Redis
缓存问题
缓存穿透
- 问题:key在Redis中根本不存在,直接访问数据库;
-
缓存击穿
问题:某个经常被访问的key(热点数据)过期,产生大量数据库读取操作;
解决:使用互斥锁挡住后续请求,自身访问数据库并写会缓存,由于锁被挡住的请求自己进入等待;
缓存雪崩
问题:大量key在同一时刻过期,请求全部转到数据库;
-
Redis常用数据类型
string:默认最大512M,可以存储任何类型的数据(二进制、JSON、序列化数据等);
- list:按插入顺序排序,底层为双向链表;
- set:无序不重复集合;
- hash:适合存储POJO;
-
Redis持久化
为了解决内存数据丢失,使用持久化功能RDB(Redis Data Base)/AOF(Append Only File)将数据保存到硬盘,重启Redis时把硬盘的数据重新加载到内存。
RDB(默认):指定时间间隔内,Redis执行了一定次数的操作,自动触发一次持久化到磁盘;
AOF:使用操作日志记录Redis的每一次写操作,下次启动Redis时重新执行写操作,类似于MySQL的bin log。
Redis事务
Redis的事务只支持部分原子性,使用
multi命令开启事务队列,将事务所需全部命令输入后,使用exec执行事务队列,可以使用watch <key>/unwatch <key>堆某个key进行监控来实现CAS。在命令进入事务队列时如果出错,所有队列中的命令都不会被执行,满足原子性;
- 进入事务队列成功,执行
exec时出错,不满足原子性。
