Spring-boot集成Redis
Redis简介
Redis是一个开源的使用 ANSI C语言编写,支持网络,可基于内存也可持久化的日志型,Key-Value数据库,并提供了多种语言的 API ,相比 Memcached 它支持存储的类型相对更多 (字符,哈希,集合,有序集合,列表等),同时Redis是线程安全的。
Redis Java Client
Redis Java Client 是面向Java的连接Redis Server的客户端,提供Java语言调用接口。目前主流的Redis客户端,是 Lettuce 和 Jedis。
- Jedis 在实现上是直连 redis server,多线程环境下非线程安全,除非使用连接池,为每个 redis实例增加物理连接。
- Lettuce 是 一种可伸缩,线程安全,完全非阻塞的Redis客户端,多个线程可以共享一个RedisConnection,它利用Netty NIO 框架来高效地管理多个连接,从而提供了异步和同步数据访问方式,用于构建非阻塞的反应性应用程序。
注意:在 springboot 1.5.x版本的默认的Redis客户端是 Jedis实现的,springboot 2.x版本中默认客户端是用 lettuce实现的。
Spring Data Redis
Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对底层redis客户端(Lettuce 、Jedis)进行了高度封装,通过RedisTemplate对象为redis交互提供了高级抽象(主要负责连接管理和序列化工作),同时也通过RedisConnection对象提供接受和返回二进制值(字节数组)的低级方法。
RedisTemplate通过将Redis命令分组并抽象成操作视图(operations views),并通过操作视图的提供的接口来调用具体的redis命令,不同的操作视图对应了特定的Redis存储类型或者某些秘钥(keybound)。模板的操作视图具体如下:
| Interface | Description |
|---|---|
| Key Type Operations | |
| GeoOperations | Redis geospatial operations like GEOADD, GEORADIUS,…) |
| HashOperations | Redis hash operations |
| HyperLogLogOperations | Redis HyperLogLog operations like (PFADD, PFCOUNT,…) |
| ListOperations | Redis list operations |
| SetOperations | Redis set operations |
| ValueOperations | Redis string (or value) operations |
| ZSetOperations | Redis zset (or sorted set) operations |
| Key Bound Operations | |
| BoundGeoOperations | Redis key bound geospatial operations. |
| BoundHashOperations | Redis hash key bound operations |
| BoundKeyOperations | Redis key bound operations |
| BoundListOperations | Redis list key bound operations |
| BoundSetOperations | Redis set key bound operations |
| BoundValueOperations | Redis string (or value) key bound operations |
| BoundZSetOperations | Redis zset (or sorted set) key bound operations |
RedisTemplate可以通过调用其opsFor[X]方法来获得该模板具体的操作视图:
- opsForValue: 对应 String(字符串)
- opsForZSet: 对应 ZSet(有序集合)
- opsForHash: 对应 Hash(哈希)
- opsForList: 对应 List(列表)
- opsForSet: 对应 Set(集合)
- opsForGeo: 对应 GEO(地理位置)
Redis 连接池简介
在spring-boot中使用连接池来管理redis连接,所以对连接池进行简单说明:
客户端连接 Redis 使用的是 TCP协议,直连的方式每次需要建立 TCP连接,而连接池的方式是可以预先初始化好客户端连接,所以每次只需要从 连接池借用即可,而借用和归还操作是在本地进行的,只有少量的并发同步开销,远远小于新建TCP连接的开销。另外,直连的方式无法限制 redis客户端对象的个数,在极端情况下可能会造成连接泄漏,而连接池的形式可以有效的保护和控制资源的使用。
<==To be continue...
springboot 2.0使用lettuce集成Redis服务
依赖
application.properties配置文件
自定义 RedisTemplate
封装Redis操作接口
参考
http://www.spring4all.com/article/1152
https://juejin.im/post/5ba0a098f265da0adb30c684
https://blog.csdn.net/weixin_42430194/article/details/80834733
https://docs.spring.io/spring-data/redis/docs/2.0.1.RELEASE/reference/html/#why-spring-redis