SpringBoot-集成Redis

SpringBoot除了对关系型数据库支持外,还对NoSql型数据库做了大量的封装,使得我们可以很方便的与这些数据库集成。

Redis简介:
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

  • Redis支持数据的备份,即master-slave模式的数据备份。

快速构建一个SpringBoot项目,并添加如下依赖:

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

SpringBoot自2.0版本以后,使用了Lettuce客户端。Lettuce 是一个可伸缩线程安全的 Redis 客户端,多个线程可以共享同一个 RedisConnection,它利用优秀 Netty NIO 框架来高效地管理多个连接。
Lettuce 需要使用 commons-pool 2 创建 Redis 连接池,所以我们需要引入这个依赖。

添加配置文件如下:

# Redis服务器连接密码(默认为空)
spring.redis.password=

##############单机版配置##############
# Redis数据库索引(默认为0)
#spring.redis.database=0
# Redis服务器地址
#spring.redis.host=localhost
# Redis服务器连接端口
#spring.redis.port=6379
####################################

##############集群版配置##############
# 获取失败 最大重定向次数
spring.redis.cluster.max-redirects=3
# 集群节点
spring.redis.cluster.nodes=192.168.145.24:6379,192.168.145.24:6380,192.168.145.25:6379,192.168.145.25:6380

# 连接池最大连接数(使用负值表示没有限制) 默认 8
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
spring.redis.lettuce.pool.max-wait=-1
# 连接池中的最大空闲连接 默认 8
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接 默认 0
spring.redis.lettuce.pool.min-idle=0

编写RedisController存放与Controller包下:

@RestController
@RequestMapping("redis")
public class RedisController {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private RedisTemplate redisTemplate;

    @GetMapping("setStringValue")
    public RedisModel setStringValue(@RequestBody RedisModel redisModel){
        String key = redisModel.getStrKey();
        String val = redisModel.getStrVal();
        stringRedisTemplate.opsForValue().set(key,val);
        return redisModel;
    }

    @GetMapping("getStringValue")
    public RedisModel getStringValue(@RequestBody RedisModel redisModel){
        String key = redisModel.getStrKey();
        String val = stringRedisTemplate.opsForValue().get(key);
        redisModel.setStrVal(val);
        return redisModel;
    }

    @GetMapping("setRedisValue")
    public RedisModel setRedisValue(@RequestBody RedisModel redisModel){
        String key = redisModel.getStrKey();
        String val = redisModel.getStrVal();
        redisTemplate.opsForValue().set(key,val);
        return redisModel;
    }

    @GetMapping("getRedisValue")
    public RedisModel getRedisValue(@RequestBody RedisModel redisModel){
        String key = redisModel.getStrKey();
        String val = String.valueOf(redisTemplate.opsForValue().get(key));
        redisModel.setStrVal(val);
        return redisModel;
    }

}

RedisModel

@Data
public class RedisModel {
    private String strKey;
    private String strVal;
}

StringRedisTemplateRedisTemplate的区别:

  • 两者的关系是StringRedisTemplate继承RedisTemplate。
  • 两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
  • RedisTemplate使用的是JdkSerializationRedisSerializer,存入数据会将数据先序列化成字节数组然后在存入Redis数据库。
  • StringRedisTemplate使用的是StringRedisSerializer

使用注意事项:
当你的redis数据库里面本来存的是字符串数据或者你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可。
但是如果你的数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择。

启动项目,调用接口测试:

  1. setStringValue:
    SpringBoot-集成Redis_第1张图片

  2. getStringValue:
    SpringBoot-集成Redis_第2张图片

  3. setRedisValue:
    SpringBoot-集成Redis_第3张图片

  4. getRedisValue:
    SpringBoot-集成Redis_第4张图片
    注意上面第一步和第三步测试,我们使用的是同一个key,保存值时用了stringRedisTemplate和redisTemplate来保存,接着我们用同一个key来获取数据,结果是不同的。这就证明了两者的数据是不共通的。

点击这里获取示例源码

你可能感兴趣的:(SpringBoot,Redis,Spring,Boot学习记录)