本篇文章为大家介绍SpringBoot整合Redis
一、Redis简介
Redis是一个高性能的key-value数据库。它支持存储的value类型很多,包括String(字符串)、List(列表)、Set(集合)、Sorted-Set(有序集合)和Hash(哈希类型)。
数据类型 | 概述 |
String(字符串类型) | 字符串是最基本的Redis值。Redis字符串是二进制安全的,这意味着Redis字符串可以包含任何类型的数据,例如JPEG图像或JSON字符串。 |
List(列表类型) | 在List的头端或者尾端做百万次的插入和删除操作,也能保持稳定的很少的时间消耗。在List的两端访问元素是非常快的,但是如果要访问一个很大的List中的中间部分的元素就会比较慢了,时间复杂度是O(N)。 |
Set(集合类型) | Set的一个重要特性是不允许重复元素。向集合中添加多次相同的元素,集合中只存在一个该元素。在实际应用中,这意味着在添加一个元素前不需要先检查元素是否存在。 |
Hash(哈希类型) | Hash保存String域和String值之间的映射,所以它们是用来表示对象的数据类型。 其存储方式占用很小的空间,所以在一个小的Redis实例中就可以存储上百万的这种对象。 |
Sorted-Set(有序集合类型) | Redis有序集合类型与Redis的集合类型类似,是非重复的String元素的集合。不同之处在于,有序集合中的每个成员都关联一个Score,Score是在排序时候使用的,按照Score的值从小到大进行排序。集合中每个元素是唯一的,但Score有可能重复。 |
二、Redis优点
1)Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执行81000次的读取/获取(GET)操作。
2)支持丰富的数据类型 - Redis支持开发人员常用的大多数数据类型,例如列表,集合,排序集和散列等等。这使得Redis很容易被用来解决各种问题,因为我们知道哪些问题可以更好使用地哪些数据类型来处理解决。
3)操作具有原子性 - 所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。
4)多实用工具 - Redis是一个多实用工具,可用于多种用例,如:缓存,消息队列(Redis本地支持发布/订阅),应用程序中的任何短期数据,例如,web应用程序中的会话,网页命中计数等。
三、springboot集成Redis
1) 添加pom.xml文件
2) 添加配置文件
3) 在UserServiceImpl 类中向Redis添加操作
4) 使用RedisTempate类
5) UserController类
6) 测试结果
四、RedisTemplate类
1)RedisTemplate中定义了对5种数据结构操作:
//操作字符串
redisTemplate.opsForValue();
//操作hash
redisTemplate.opsForHash();
//操作list
redisTemplate.opsForList();
//操作set
redisTemplate.opsForSet();
//操作有序set
redisTemplate.opsForZSet();
2)其他方法请参考官方Api:
https://docs.huihoo.com/javadoc/spring/spring-data/redis/1.0/org/springframework/data/redis/core/RedisTemplate.html
3)StringRedisTemplate与RedisTemplate区别?
五、常见问题
1)RedisTemplate数据存储产生的序列化问题?
通过RedisTemplate的opsForValue的set方法把数据存入缓存,在Redis客户端取不出数据。
存入客户端的的数据为:
数据已经被序列化
RedisTemplate中set值时会先调用序列化器将键和值都序列化byte字节数组放入Redis数据库中,在客户端除非get后的key为“user_key_1”使用同样的序列化器,进行取值,否则取不到值。原因是ReidsTemplate使用的默认的序列化方式有问题。
2)解决方法:
新增RedisSerializeConfig类。
六、源码demo
https://github.com/xiaonongOne/SpringBoot_Redis
最后欢迎大家关注微信公众号。