当我们了解了redis的五大数据类型,手动去敲一敲每个数据类型对应的命令,无论是再来看jedis,还是spring-data-redis都是很轻松的,他们提供的API都是基于原生的redis命令,可读性很强
jedis操作五大数据类型
其实关于怎么使用jedis的对应的五大数据类型的api,就不说太多了,因为可读性真的是太强了,只要了解那么底层的命令,开箱即用,忘记了,点一下,全出来了
demo:
1 | /** |
jedis的事务demo
1 | Transaction multi = jedis.multi(); |
因为他对事务是部分支持,所以一般都要加上watch
RedisPool
一般在多线程下并发访问redis,为了提高性能,会使用redis连接池(单例)
1 |
|
spring-data-redis
spring整个redis后提供了如下两个模板,供我们去操作redis
1 | (SpringRunner.class) |
- 前者的kv 全是object
- 后者的kv 全是string
大多数情况下,我们都是把string字符串往redis里面存储,所以更倾向于StringRedisTemplate
两套模板针对五大数据类型对应如下api,同样可读性依然超级好
header 1 | header 2 |
---|---|
操作字符串 | redisTemplate.opsForValue() |
操作hash | redisTemplate.opsForHash() |
操作list | redisTemplate.opsForList() |
操作set | redisTemplate.opsForSet() |
操作zset | redisTemplate.opsForZSet() |
注意点:
RedisTemplate 前者针对对象操作,要求我们的bean要是实现可序列化接口Serializable
- 默认会使用jdk默认的序列化机制,把序列化后的数据保存到redis,当我们直接去redis上查看存进去的对象时,看到的无异于一堆乱码(当然并没错,依旧可以通过反序列化得到对象)
如何解决?
- 我们可以先把对象手动转化成json,再存储到redis
- 定制RedisTemplate
在redis的自动配置类中我们可以看到它的自动配置
1 |
|
跟进 RedisTemplate 可以找到他默认使用的序列化器是 jdk的
1 |
|
自动注入我们指定的redisTemplate
1 |
|