成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring Boot 2.x(十四):整合Redis,看這一篇就夠了

Miracle / 2321人閱讀

摘要:豐富的特性還支持通知過期等等特性。到這個就說明測試通過了。主要針對方法配置,能夠根據(jù)方法的請求參數(shù)對其進(jìn)行緩存,常用于查詢操作主要針對方法配置,能夠根據(jù)方法的請求參數(shù)對其進(jìn)行緩存,常用于修改操作清空緩存,主要用于刪除操作。

[TOC]

Redis簡介

Redis 是一個開源的使用 ANSI C 語言編寫、遵守 BSD 協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value 數(shù)據(jù)庫,并提供多種語言的 API非關(guān)系型數(shù)據(jù)庫(NoSQL)。

Redis的特性

Redis的所有操作都是原子性的,意思就是要么成功執(zhí)行要么失敗完全不執(zhí)行。單個操作是原子性的。多個操作也支持事務(wù),即原子性,通過MULTI和EXEC指令包起來。

性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。豐富的數(shù)據(jù)類型 – Redis支持二進(jìn)制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類型操作。

原子 – Redis的所有操作都是原子性的,意思就是要么成功執(zhí)行要么失敗完全不執(zhí)行。單個操作是原子性的。多個操作也支持事務(wù),即原子性,通過MULTI和EXEC指令包起來。

豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。

Redis的應(yīng)用

會話緩存

數(shù)據(jù)緩存

排行榜/計數(shù)器

消息隊列

Redis的數(shù)據(jù)類型

String: 字符串

Hash: 散列

List: 列表

Set: 集合

Sorted Set: 有序集合

Redis的部署

PS: 我這里是基于Mac環(huán)境,Windows環(huán)境下的同學(xué)可以安裝Linux虛擬機(jī)同步進(jìn)行操作。

官網(wǎng)下載 Stable(穩(wěn)定)版本

找到下載的文件,解壓并編譯

tar -zxvf redis-5.0.4.tar.gz
mv redis-5.0.4 /usr/local/
cd /usr/local/redis-5.0.4/
make test

執(zhí)行到這里,最好先執(zhí)行一遍make test,確保編譯可以通過,需要大概三分鐘。
到這個就說明測試通過了。我們接著往下執(zhí)行

make
cd src/
make install

執(zhí)行到這里安裝就算是告一段落了,接下來我們進(jìn)行redis的一些配置:

vim ../redis.conf

找到136行左右的daemonize將其屬性改為yes,可以讓redis在后臺運(yùn)行,然后找到500行左右的requirepass,后面輸入我們需要設(shè)置的密碼,這樣就可以通過密碼來訪問redis了。
然后我們通過指定配置文件的方式來啟動redis

./redis-server ../redis.conf

執(zhí)行完事兒之后,查看是否執(zhí)行成功:

ps -ef | grep redis

可以看到,我們的redis已經(jīng)啟動成功了,然后通過rdm來訪問一下:

大功告成,現(xiàn)在萬事俱備,只欠東風(fēng)。我們下面來看一下在Spring Boot中怎么使用redis吧。

在Spring Boot中的使用

Spring Boot給我們提供了現(xiàn)成的spring-boot-starter-data-redis,我們只需要在pom文件中將之導(dǎo)入即可。

        
            org.springframework.boot
            spring-boot-starter-data-redis
        
        
        
            org.apache.commons
            commons-pool2
        

然后,我們需要在配置文件中配置一些有關(guān)redis的信息:

spring:
  redis:
    host: 127.0.0.1  # IP
    port: 6379  # 端口號
    password: 123456  # 密碼
    lettuce:
      pool:
        max-active: 8 # 連接池最大連接數(shù)
        max-wait: -1ms  # 連接池最大阻塞等待時間(使用負(fù)值表示沒有限制)
        min-idle: 0 # 連接池中的最小空閑連接
        max-idle: 8 # 連接池中的最大空閑連接

接下來,我們需要對我們所需要的Redis的操作給封裝到一個接口中,方便我們?nèi)フ{(diào)用,這里我基于接口,抽象類,實(shí)現(xiàn)類的結(jié)構(gòu)實(shí)現(xiàn)了一套Redis的方法,需要的同學(xué)可以去GitHub上下載(子項目名稱:viboot-rds),GitHub的地址在文末。這里僅僅貼出接口的部分方法。

package com.itframe.dao;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 *
 */
public interface RedisDao {

    /**
     * 判斷緩存中是否有對應(yīng)的value
     * 
     * @param key
     * @return boolean
     */
    public boolean existsKey(Object key);

    /**
     * 根據(jù)key獲取key列表(key值可為模糊匹配---taskInfo:taskDetail:* <---> *代表任意字符)
     * 
     * @param pattern
     * @return Set
     */
    public Set keys(Object pattern);

    /**
     * 根據(jù)key刪除對應(yīng)的value
     * 
     * @param key
     */
    public boolean delete(Object key);

    /**
     * 根據(jù)key獲取個數(shù)
     * 
     * @param key
     */
    public int count(Object key);

    /**
     * 批量刪除對應(yīng)的value
     * 
     * @param keys
     */
    public void delete(String[] keys);

    /**
     * 批量刪除key(key值可為模糊匹配---taskInfo:taskDetail:* <---> *代表任意字符)
     * 
     * @param pattern
     */
    public long deletePattern(Object pattern);

    /**
     * 批量刪除對應(yīng)的value
     * 
     * @param keys
     */
    public long delete(Set keys);

    /**
     * 寫入緩存(操作字符串)
     * 
     * @param key
     * @param value
     * @return boolean
     */
    public boolean vSet(Object key, Object value);

    /**
     * 寫入緩存設(shè)置時效時間(操作字符串)
     * 
     * @param key
     * @param value
     * @return boolean
     */
    public boolean vSet(Object key, Object value, Long expireTime);

    /**
     * 更新寫入緩存設(shè)置時效時間(操作字符串)
     * 
     * @param key
     * @return boolean
     */
    public boolean vSetUpdate(Object key, Long expireTime);

    /**
     * 讀取緩存(操作字符串)
     * 
     * @param key
     * @return Object
     */
    public Object vGet(Object key);

    /**
     * 哈希 添加(操作hash)
     * 
     * @param key
     * @param hashKey
     * @param value
     */
    public void hmSet(Object key, Object hashKey, Object value);

    /**
     * 哈希 添加(操作hash)
     * 
     * @param key
     * @param map
     */
    public void hmSetAll(Object key, Map map);

    /**
     * 哈希獲取數(shù)據(jù)(操作hash)
     * 
     * @param key
     * @return Map
     */
    public Map hmGet(Object key);

    /**
     * 哈希獲取數(shù)據(jù)(操作hash)
     * 
     * @param key
     * @param hashKey
     * @return Object
     */
    public Object hmGet(Object key, Object hashKey);

    /**
     * 哈希刪除數(shù)據(jù)(操作hash)
     * 
     * @param key
     * @param hashKey
     * @return Object
     */
    public Object hmDel(Object key, Object hashKey);

}

抽象類中我們進(jìn)行了RedisTemplate的初始化以及序列化:

public abstract class AbstractBaseRedisDao {

    @Resource(name = "redisTemplate")
    protected RedisTemplate redisTemplate;

    /**
     * 設(shè)置redisTemplate
     * 
     * @param redisTemplate
     */
    public void setRedisTemplate(RedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    /**
     * 獲取 RedisSerializer
     */
    protected RedisSerializer getRedisSerializer() {
        return redisTemplate.getStringSerializer();
    }
}

在實(shí)現(xiàn)類中我們通過操作RestTemplate來實(shí)現(xiàn)接口中的方法~

Redis緩存實(shí)戰(zhàn)

首先,我們?nèi)绻朐赟pring Boot項目中啟用緩存,需要在啟動類上加上注解@EnableCaching,這個是重點(diǎn),要記住了!

首先介紹一下注解三劍客:@Cacheable, @CachePut,@CacheEvict

@Cacheable:主要針對方法配置,能夠根據(jù)方法的請求參數(shù)對其進(jìn)行緩存,常用于查詢操作

@CachePut:主要針對方法配置,能夠根據(jù)方法的請求參數(shù)對其進(jìn)行緩存,常用于修改操作

@CacheEvict:清空緩存,主要用于刪除操作。

下面我們來看一下用法:

    /**
     *    value: 緩存的名稱
     *    key: 緩存的鍵
     *    return 緩存的值
     */ 
    @Override
    @Cacheable(value = "users", key = "#id")
    public UserDO findOne(Long id) {
        // 如果我們第二次訪問的時候,控制臺沒有打印出這句話說明是從緩存中取出
        log.info("From MYSQL");
        return userMapper.get(id);
    }

    @Override
    @CachePut(value = "users", key = "#userDO.id")
    public UserDO update(UserDO userDO) {
        // 執(zhí)行之后,再次訪問findOne的時候,應(yīng)當(dāng)沒有打印出“From MySQL”,且返回的是我們修改后的值,說明這一步緩存成功
        if (userMapper.update(userDO) > 0) {
            return userMapper.get(userDO.getId());
        }
        return null;
    }

    @Override
    @CacheEvict(value = "users", key = "#id")
    public int delete(Long id) {
        // 執(zhí)行之后去rdm中查看即可
        return userMapper.delete(id);
    }
測試1

第一次訪問findOne

第二次訪問findOne:

仍然是剛剛的結(jié)果,但是控制臺沒有打印出任何東西,說明緩存成功

測試2

調(diào)用update后再次調(diào)用findOne:

可以看出信息已被修改且未訪問數(shù)據(jù)庫

測試3

訪問delete,查看rdm:

說明刪除成功~

源碼地址

Github
Gitee

記得順手點(diǎn)個star,您的肯定是對我寫作最大的動力!

公眾號

原創(chuàng)文章,文筆有限,才疏學(xué)淺,文中若有不正之處,萬望告知

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75966.html

相關(guān)文章

  • 【推薦】最新200篇:技術(shù)文章整理

    摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語言和等其他語言的對比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問到的持久化與恢復(fù)實(shí)現(xiàn)故障恢復(fù)自動化詳解哨兵技術(shù)查漏補(bǔ)缺最易錯過的技術(shù)要點(diǎn)大掃盲意外宕機(jī)不難解決,但你真的懂?dāng)?shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...

    BicycleWarrior 評論0 收藏0
  • 【推薦】最新200篇:技術(shù)文章整理

    摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語言和等其他語言的對比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問到的持久化與恢復(fù)實(shí)現(xiàn)故障恢復(fù)自動化詳解哨兵技術(shù)查漏補(bǔ)缺最易錯過的技術(shù)要點(diǎn)大掃盲意外宕機(jī)不難解決,但你真的懂?dāng)?shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...

    tommego 評論0 收藏0
  • @ConfigurationProperties 注解使用姿勢,這一篇夠了

    摘要:在項目中,為滿足以上要求,我們將大量的參數(shù)配置在或文件中,通過注解,我們可以方便的獲取這些參數(shù)值使用配置模塊假設(shè)我們正在搭建一個發(fā)送郵件的模塊。這使得在不影響其他模塊的情況下重構(gòu)一個模塊中的屬性變得容易。 在編寫項目代碼時,我們要求更靈活的配置,更好的模塊化整合。在 Spring Boot 項目中,為滿足以上要求,我們將大量的參數(shù)配置在 application.properties 或...

    SolomonXie 評論0 收藏0
  • @ConfigurationProperties 注解使用姿勢,這一篇夠了

    摘要:在項目中,為滿足以上要求,我們將大量的參數(shù)配置在或文件中,通過注解,我們可以方便的獲取這些參數(shù)值使用配置模塊假設(shè)我們正在搭建一個發(fā)送郵件的模塊。這使得在不影響其他模塊的情況下重構(gòu)一個模塊中的屬性變得容易。 在編寫項目代碼時,我們要求更靈活的配置,更好的模塊化整合。在 Spring Boot 項目中,為滿足以上要求,我們將大量的參數(shù)配置在 application.properties 或...

    KoreyLee 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<