Redis韩顺平课堂上的那些重点笔记,学起来感觉特别实用和接地气
- 问答
- 2026-01-01 10:19:25
- 2
(韩顺平课堂笔记开始)
Redis是个啥?就是个超级快的“大Map”
别想太复杂,你就把它理解成一个放在内存里的、速度飞快的键值对集合,为啥快?因为数据都存在内存里,读写不用像MySQL那样去硬盘翻找,自然就快了,它的主要任务就是给数据库“减负”,把那些经常被查询、又不怎么变动的“热数据”放在自己这里,比如商品信息、用户会话。
五种常用数据类型,别死记硬背,想想咋用
韩老师讲这个的时候,特别喜欢用生活例子打比方,一下就懂了。

- String(字符串):最基础的,就是一个key对应一个value,比如存个验证码:
set code:13800138000 123456,还可以用来做计数器,文章点赞数incr article:1001:likes。 - List(列表):就是个双向链表,两头都能操作,典型的用场就是消息队列,虽然现在有更专业的MQ,但简单的场景够用了,生产者用
lpush从左边塞任务,消费者用rpop从右边取任务,这就是个FIFO(先进先出)队列,还可以做朋友圈点赞列表。 - Set(集合):自动去重,无序,最经典的就是共同好友功能,用户A的好友ID放一个set,用户B的好友ID放一个set,用
sinter命令一求交集,共同好友就出来了,还有抽奖活动,用sadd加参与人,自动去重,防止重复参与。 - Hash(哈希):相当于Java里的Map,或者数据库里的一行记录,这个是韩老师强调存储对象的首选,比如存用户信息,别用String把整个用户对象序列化成JSON存,那样修改一个字段就得整个覆盖,用Hash:
hset user:1001 name "张三" age 28,这样要改年龄,直接hset user:1001 age 29就行了,高效又灵活。 - Zset(有序集合):带分数的Set,能排序。排行榜的天然实现,比如游戏积分榜,成员是用户ID,分数是积分。
zadd leaderboard 10000 user1,zrevrange leaderboard 0 9就能取出前十名,还有根据时间戳排序的需求,也能用它。
持久化:怕断电丢数据?有两个“备份”大招
数据在内存里,服务器一关机就全没了,所以得想办法存到硬盘上,这就是持久化。
- RDB(快照):韩老师比喻成“拍照片”,在某个时间点,把整个内存数据生成一个快照文件(dump.rdb)存起来,优点是恢复数据快,因为这个文件就是个完整的数据备份,缺点是可能会丢数据,比如你设置5分钟拍一次照,如果服务器在拍照后第4分钟宕机,那这4分钟的数据就没了。
- AOF(日志):比喻成“记日记”,把每次写操作命令都记录下来,追加到一个文件里,重启的时候,把日记里的命令重新执行一遍,数据就恢复了,优点是数据安全,最多丢一秒的数据(可以配置),缺点是日记文件会越来越大,恢复速度比RDB慢。
韩老师建议:生产环境通常两个都开着,用AOF保证数据安全,用RDB做冷备和快速恢复。
事务:Redis的事务有点“愣”

Redis的事务不像MySQL那样有复杂的回滚机制,它就是一串命令打包,按顺序执行,中间不会被别的客户端命令打断,这保证了“隔离性”,但它没有“原子性”,意思是如果事务里一个命令出错了,后面的命令还会继续执行,它不会回滚,韩老师提醒:用的时候要自己保证命令的正确性。
主从复制:一主多从,读写分离
一台Redis怕扛不住?那就搞个“集群”,主从模式就是:一台主节点(Master)负责写,多台从节点(Slave)负责读,并且从节点自动从主节点那里同步数据,这样好处是:读写分离,减轻主节点压力;数据备份,从节点就是主节点的副本;高可用基础,主节点挂了,可以从从节点里选一个新的主。
缓存穿透、击穿、雪崩:面试必问,实际问题

这是韩老师讲的重点中的重点,非常实用。
-
缓存穿透:查一个根本不存在的数据,比如恶意请求一个不存在的商品ID,这个ID缓存里没有,就会一直去查数据库,把数据库打垮。
- 解决:布隆过滤器,在缓存之前加一层布隆过滤器,它能快速判断一个key是否存在,如果布隆过滤器说不存在,那这个请求直接返回,根本不会去查缓存和数据库。
-
缓存击穿:一个热点key过期了,瞬间大量请求砸向数据库,就像保险丝在用电高峰时熔断了一样。
- 解决:热点key永不过期,或者加互斥锁,第一个请求发现key过期,先去加个锁(比如用Redis的setnx命令),然后去数据库加载数据回填缓存,期间其他请求等待或者返回默认值,填完缓存后再释放锁。
-
缓存雪崩:大量的key在同一时间过期,导致所有请求都去查数据库,数据库瞬间压力过大崩掉。
- 解决:给key的过期时间加上随机值,比如原本都设置10分钟过期,现在改成10分钟加上一个0到5分钟的随机数,这样key就不会在同一时刻大面积失效了。
一些接地气的小技巧
- Key的命名:用冒号分隔,清晰易懂。
业务名:对象名:id,shop:user:1001。 - 批量操作:多用
mget、mset、pipeline减少网络请求次数,提升性能。 - 避免大Key:一个key对应的value太大(比如一个list里有几十万元素),会导致操作慢、网络阻塞,要拆解。
韩老师总结的核心思想就是:Redis是利器,但要用对地方,它不是为了替代数据库,而是作为缓存和提速工具,和数据库配合使用,扬长避短。
(韩顺平课堂笔记结束)
本文由颜泰平于2026-01-01发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/72396.html