文章
问题
- Redis如何解决数据库一致性
- 以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存?
- redis实现一次通讯
- redis淘汰机制
梳理
- redis单线程构建原理
- Redis的五种数据接口,String,hash,list,set,sorted set
- redis 持久化,RDB和AOF
redis 持久化
开始持久化,一种主动,一种被动。
主动通过save命令,会阻塞Redis线程,被动fork会创建一个子线程,进行快照保存。
4. RDB: 使用一次性生成内存快照的方式,产生的文件紧凑压缩比更 高,因此读取RDB恢复速度更快。由于每次生成RDB开销较大,无法做到实时持久化,一般用于数据冷备和复制传输。
5. AOF : 通过追加写命令到文件实现持久化,通过appendfsync参数可以 控制实时/秒级持久化。因为需要不断追加写命令,所以AOF文件体积逐渐变大,需要定期执行重写操作来降低文件体积。
6. 在redis5之后,同时开启RDB和AOF,在数据恢复的时候,会先重写RDB,然后把AOF文件追加到重写的文件中。
参考
参考
秒杀应用
- 初始,setnx key value
- 防止死锁,set key value EX (秒数) ,根据实际线程整个流程时间设置
- 存在一种情况,第一个线程阻塞,redis锁到时间自动消失,第二个线程开始,这时候第一个线程开始,并完成流程,开始主动删除redis锁,会把第二个线程的锁删除,导致程序异常。可以通过将value值设置为线程ID,线程ID相同才会进行删除。
- 防止线程超时,但是线程还在正常运行,要设置守护线程,进行续约,线程结束删除对应的key。