Spring Data Redis分析

价值

方便操作redis

入口

RedisAutoConfiguration(springboot系列都应该先去分析自动配置类)

底层实现

lettuce 基于netty的事情驱动模式

打开日志级别
io.netty.handler.codec.EncoderException
CommandHandler命令的编码/解码异常会导致,处理netty响应异常

jedis
单线程模式
连接使用socket = new Socket();分配在堆中,会导致线程不安全。

使用连接池可以避免,和降低Socket连接成本。

分布式锁

Redisson
核心,看门狗线程

特别注意多线程分布式锁的处理:

1
2
3
4
5
6
RLock lock = redissonClient.getLock(key);
if(lock.isLocked()){ // 是否还是锁定状态
if(lock.isHeldByCurrentThread()){ // 时候是当前执行线程的锁
lock.unlock(); // 释放锁
}
}

redis操作原子性

如果可能使用lua,进行操作原子性保障

参考

Lettuce和jedis
https://jishuin.proginn.com/p/763bfbd73b84
jedis线程不安全
https://cloud.tencent.com/developer/article/1678172

看门狗机制
https://www.cnblogs.com/jelly12345/p/14699492.html