当前位置:首页 > 问答 > 正文

Redis那点事儿,入门基础到高级技巧全讲解,跟我一起学吧

综合自博客园“程序员小灰”的《Redis入门指南》系列、知乎专栏“Redis实战笔记”以及开源电子书《Redis设计与实现》的相关章节)

Redis那点事儿,咱们就从最简单的开始聊,你可以把它想象成一个超级快的“大本子”,这个本子放在你的服务器内存里,所以读写速度飞快,它主要用来存一些临时但又很重要的数据,比如网站用户的登录状态、秒杀活动的商品库存,或者手机验证码什么的。

第一部分:基础入门——先学会用

Redis有五种最基本的数据结构,就像不同的收纳盒,各有各的用法。

  1. String(字符串):这是最简单的盒子,一个钥匙(key)对应一个值(value),你可以用 set user:1001 "张三" 把用户ID和名字存起来,然后用 get user:1001 就能立刻拿到“张三”,它还能给数字值做自增自减,用来统计文章阅读量、点赞数特别方便。

  2. List(列表):像一个排队队伍,数据一个接一个,你可以从左边推进去(lpush),也可以从右边推进去(rpush),常用于实现消息队列,比如系统有发送邮件的任务,就把它lpush到队列里,另一个程序再从另一边rpop取出来处理。

  3. Hash(哈希):这个盒子适合存一个对象的多个属性,比如一个用户信息,有姓名、年龄、城市,你可以用一个key(如user:1001)存一个哈希表,里面包含nameagecity等多个字段和值,这样存取和修改单个属性都很高效,不用像String那样把整个对象取出来。

  4. Set(集合):这个盒子的特点是里面的元素不重复,而且没有顺序,可以用来给文章打标签(同一个标签只存一次),或者求两个用户共同的粉丝(求两个集合的交集)。

  5. ZSet(有序集合):它给集合里的每个元素都绑定了一个分数(score),可以根据分数排序,排行榜是最典型的应用,比如游戏积分榜,玩家ID是元素,积分是分数,轻松实现TopN查询。

第二部分:进阶技巧——让Redis更可靠、更强大

光会用这些“盒子”还不够,在实际项目中,你得考虑更多问题。

  • 持久化:数据都在内存里,服务器一断电不就全没了吗?Redis提供了两种“记笔记”的方式,把内存数据存到硬盘上,一种是RDB,像拍照,定期给整个数据库拍个快照;另一种是AOF,像写日记,把每一个写操作命令都记录下来,通常两者结合使用,既保证数据安全,又能快速恢复。

  • 过期策略:像验证码这种数据,5分钟后就该失效,你可以给key设置一个过期时间(expire命令),Redis会自动清理过期的数据,这比你自己写程序去删要靠谱得多。

  • 事务:有时候需要连续执行好几个命令,希望它们“要么全成功,要么全失败”,Redis提供了简单的事务(multi...exec),但它不像数据库事务那么严格,中间某条命令出错,后面的依然会执行,这点需要注意。

  • 管道(pipeline):如果客户端需要连续请求Redis一万次,每次来回网络开销很大,管道技术可以把多个命令打包,一次发送过去,再一次性接收所有结果,极大提升性能。

第三部分:高级实战——应对复杂场景

当系统用户量大了,Redis也得跟着升级。

  • 主从复制:搞一个“主”Redis负责写数据,同时挂几个“从”Redis同步主的数据,负责读请求,这样读写分离,既减轻了主库的压力,又提高了可用性,主库挂了从库还能顶上来。

  • 哨兵(Sentinel):光有主从还不够,万一主库宕机了,需要有人能自动把一个从库提升为新的主库,哨兵就是干这个的,它像个自动运维机器人,时刻监控着Redis实例,实现故障自动切换。

  • 集群(Cluster):当数据量超级大,一台机器内存装不下了怎么办?Redis集群把数据分片存储在多个节点上,每个节点存一部分数据,这样就把存储压力和访问压力分散开了,实现了真正的分布式扩展。

Redis从入门到精通,就是从熟悉五种数据结构开始,然后逐步掌握如何保证数据不丢、如何提高性能、如何应对高并发和高可用的需求,它功能强大,但学习曲线平滑,是每个后端开发者都应该熟练掌握的神器,希望这点事儿能帮你打开Redis的大门。

Redis那点事儿,入门基础到高级技巧全讲解,跟我一起学吧