【 Redis】安裝使用--Centos安裝Redis,SpringBoot2集成Redis

Centos7 安裝 Redis5

網絡上詳細安裝過程很多,這裏不詳細介紹。這裏簡要列出安裝Redis核心內容

下載官方包並安裝,命令彙總如下:
	wget http://download.redis.io/releases/redis-5.0.4.tar.gz
	tar xzf redis-5.0.4.tar.gz
	cd redis-5.0.4
	make
	make install

安裝完成可執行文件所在目錄: 
	cd /usr/local/bin
直接啓動Redis(關閉窗口也可以使用):  
	redis-server
停止Redis: 
	redis-cli SHUTDOWN

複製Redis默認配置文件(redis解壓目錄/utils/)到/etc/init.d中: 
	cp redis_init_script /etc/init.d/redis_6379
	然後修改腳本第14行的REDISPORT變量的值爲同樣的端口號: 
		vim redis_6379
	然後修改腳本加入如下所示的紅色授權信息(密碼停止服務): 
		vim redis_6379
	  	$CLIEXEC -a "你的密碼" -p $REDISPORT shutdown
	  	
建立文件夾存放Redis的配置文件:  
	/etc/redis
建立文件夾存放Redis持久化文件:  
	/var/redis/6379
複製模板(redis-5.0.4/redis.conf)到/etc/redis目錄中,以端口號命名(如“6379.conf”):
	cp redis.conf  /etc/redis/6379.conf
	修改/etc/redis/6379.conf配置文件的值:
		daemonize=yes                   說明:使Redis以守護進程模式運行
	    pidfile=/var/run/redis_6379.pid  說明:設置Redis的PID文件位置
	    port=6379                            說明:設置Redis監聽的端口號
	    dir=/var/redis/6379              說明:設置持久化文件存放位置
	    requirepass password         說明:連接Redis的密碼,在使用redis desktop工具連接redis時需要這個密碼
現在也可以使用下面的命令來啓動和關閉Redis了
	/etc/init.d/redis_6379 start
	/etc/init.d/redis_6379 stop
	
Centos本地連接Redis測試:
	/usr/local/bin/redis-cli
	auth yun19830206
	set name chengyun22
	get name
Windows環境安裝redis-desktop-manager,連接Redis查看Redis緩存中的數據

SpringBoot2集成Redis並做緩存存取

首先引用Pom依賴(注意spring-boot-starter-redis是SpringBoot1使用的,別亂了)

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

在SpringBoot配置文件增加如下配置內容

    ############Redis相關配置###########
    # Redis數據庫索引(默認爲0)
    # spring.redis.database=0
    # Redis服務器地址
    spring.redis.host=101.200.139.133
    # Redis服務器連接端口
    spring.redis.port=6379
    # Redis服務器連接密碼(默認爲空)
    spring.redis.password=password
    # 連接超時時間(毫秒)
    spring.redis.timeout=1000

創建RedisCacheImpl類,用於與Redis做緩存取出存入動作

public class RedisCacheImpl implements ICacheInterface {

    @Autowired
    private StringRedisTemplate redisTemplate ;

    /**
     * 將Key、Value放入緩存
     * @param key                 緩存的key,規範爲:域:資源:業務
     * @param value               緩存的對象
     * @param timeOutSeconds      緩存多少秒
     * @param <T>                 泛型
     */
    @Override
    public <T> void setValue(String key, T value, long timeOutSeconds) {
        if(null == key || key.length()<1 || null == value ){
            return ;
        }
        String valueJson = JSONObject.toJSONString(value);
        redisTemplate.opsForValue().set(key,valueJson,timeOutSeconds, TimeUnit.SECONDS);
        log.debug("Redis Cache Log: set <{},{}> into cache in {} seconds success.",key,value.getClass(),timeOutSeconds);
    }

    /**
     * 根據Key來獲得緩存值
     * @param key           緩存的key,規範爲:域:資源:業務
     * @param clazz         返回數據類型
     * @param <T>           泛型
     * @return              返回值
     */
    @Override
    public <T> T getValue(String key, Class<T> clazz) {
        if(null == key || key.length()<1 ){
            return null ;
        }
        String stringValue = redisTemplate.opsForValue().get(key);
        if(null == stringValue || stringValue.length()<1){
            return null ;
        }
        T returnValue = JSONObject.parseObject(stringValue,clazz);
        log.debug("Redis Cache Log: get {} from cache success, return{}.",key, returnValue.getClass());
        return returnValue;
    }
}

直接在需要使用緩存的類中Autowried RedisCacheImpl類,使用方法即可,示例如下

		//1:緩存操作對象String:放入緩存,取緩存,成功
        log.debug("###############");
        String robotName = "Chat Robot Instance 1." ;
        log.debug("放入緩存對象爲:{}",robotName);
        redisCache.setValue(CACHE_STRING_KEY,robotName,60*5);
        robotName = redisCache.getValue(CACHE_STRING_KEY,String.class);
        log.debug("取得緩存對象爲:{}",robotName);

        //2:緩存操作對象User:放入緩存,取緩存,成功
        log.debug("###############");
        User user = new User("張三",36) ;
        log.debug("放入緩存對象爲:{}",user);
        redisCache.setValue(CACHE_OBJECT_KEY,user,60*5);
        user = redisCache.getValue(CACHE_OBJECT_KEY,User.class);
        log.debug("取得緩存對象爲:{}",user);

        //3:緩存操作對象User的List:放入緩存,取緩存,成功
        log.debug("###############");
        List<User> userList = new LinkedList<>();
        userList.add(new User("張三",36));
        userList.add(new User("李四",37));
        userList.add(new User("王五",26));
        log.debug("放入緩存對象爲:{}",userList);
        redisCache.setValue(CACHE_LIST_KEY,userList,60*5);
        userList = redisCache.getValue(CACHE_LIST_KEY,List.class);
        log.debug("取得緩存對象爲:{}",userList);

        //4:緩存操作對象User的Map:放入緩存,取緩存,成功
        log.debug("###############");
        Map<String,User> userMap = new HashMap<>();
        userMap.put("張三",new User("張三",36));
        userMap.put("李四",new User("李四",37));
        userMap.put("王五",new User("王五",26));
        log.debug("放入緩存對象爲:{}",userMap);
        redisCache.setValue(CACHE_MAP_KEY,userMap,60*5);
        userMap = redisCache.getValue(CACHE_MAP_KEY,Map.class);
        log.debug("取得緩存對象爲:{}",userMap);

        //5:兩層對象封裝:放入緩存,取緩存,成功(AjaxResponse爲帶泛型對象,裏面有泛型屬性 T data)
        log.debug("###############");
        User userAjax = new User("張三",36);
        AjaxResponse<User> successUserAjax = AjaxResponse.success(userAjax, "創建成功");
        log.debug("放入緩存對象爲:{}",successUserAjax);
        redisCache.setValue(CACHE_PACKAGE_OBJECT_KEY,successUserAjax,60*5);
        successUserAjax = redisCache.getValue(CACHE_PACKAGE_OBJECT_KEY,AjaxResponse.class);
        log.debug("取得緩存對象爲:{}",successUserAjax);

這樣就可以讓業務方非常方便的使用Redis做緩存了。

留下待思考的問題

  1. SpringBoot2集成Redis有兩種(jedis,lettuce),默認lettuce,擴充配置lettuce的連接池大小等屬性;
  2. opsForZSet:對應ZSet有序集合;
     opsForHash:對應Hash哈希
     opsForList:對應List列表
     opsForSet:對應Set集合
     需要支持如上類型的數據緩存,又需要如何擴展配置。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章