1.Redis的五种基本数据结构:STRING(字符串)、LIST(列表)、SET(集合)、HASH(哈希散列表)、ZSET(有序集合);在字符串的基本上演变出Bitmaps(位图)和HyperLogLog(基数);以及配合LBS发展而产生的GEO(地理信息定位)。
2.key超时了,Redis不会立刻回收,而会被标记成超时。Redis提供了定时回收和惰性回收两种方式。
3.Redis存在两种备份方式:RDB和AOF;RDB恢复速度更快,但是开销大,不适合实时持久化,一般用于数据冷备和复制;
4.Redis内存回收策略:当Redis的内存达到规定的最大值时,提供6种方式淘汰键值对。
~最近最少前提下,回收超时键值对
~对所有键值对采用最近最少策略
~随机删除超时键值对
~随机删除所有键值对(不常用)
~采用存活时间最短策略(TTL)
~不淘汰,只报错
5.哨兵模式配合主从复制完成集群搭建
6.Redis常用命令:
~ keys * :查看所有键
~ dbsize: 查看键总数
~ exists [key]:检查键是否存在
~ del [key ...]:删除键
~ expire [key] [seconds]:设置过期时间
~ type [key]:显示键的数据结构类型
7.Redis单线程模型高性能的原因
~ 纯内存访问是高速响应的基础;
~ 使用I/O多路复用技术实现非阻塞I/O;
~ 单线程避免了线程切换和竞态产生的消耗。
8.Redis数据类型的动态内部实现
~ string:int(8个字节的长整形)、embstr(小于等于39个字节的字符串)、raw(大于39个字节的字符串);
~ hash:ziplist(压缩列表)、hashtable(哈希表);前者占用空间小,后者在键值对大时效率高;
~ list:ziplist、linkedlist、quicklist;
~ set:intset(整数集合)、hashtable;
~ zset:ziplist、shiplist(跳跃表)
9.Redis阻塞原因:慢查询、CPU过载、AOF阻塞;CPU竞争、内存交换、网络问题。
10.Redis内存优化思路:
~ 精简键值对大小,使用高效二进制序列化器
~ 使用对象共享池优化小整数对象
~ 数据优先使用整数,比字符串类型节省空间
~ 优化字符串使用,避免预分配造成的内存浪费
11.穿透优化:缓存空对象;缓存过滤器。
12.雪崩优化:保证缓存层高可用;限流并降级;提前演练。
13.热点key重建优化:分布式锁;永不过期。