【 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集合
     需要支持如上类型的数据缓存,又需要如何扩展配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值