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

玩Redis其实没那么难,边学边用笔记帮你轻松掌握各种技巧

(引用来源:常见的Redis学习笔记和入门教程)

很多人一听到Redis,就觉得是程序员大佬才会的高深技术,心里先打了退堂鼓,其实不然,你可以把Redis想象成一个超级快的“大本子”或者“临时记事本”,它最主要的特点就是快,数据都放在内存里,所以读写速度非常惊人,这篇笔记的目的,就是带你用最直白的方式,边学边用,看看这个“大本子”都能帮我们干点啥。

第一件事:先把Redis“跑起来”

光说不练假把式,玩转任何技术的第一步,就是把它安装好并能简单使用,对于Redis来说,现在最简单的方式就是使用Docker,你不需要去理解复杂的编译过程,只需要确保你的电脑上安装了Docker,然后一行命令就能让它启动起来。

(引用来源:Redis官方文档及Docker Hub Redis镜像说明)

命令大概长这样:docker run --name some-redis -d redis,这条命令就像是说:“喂,Docker,你去仓库里把那个叫redis的镜像拿来,然后以它为基础,给我创建一个叫some-redis的容器,并在后台运行起来。” 跑起来之后,你可以用docker exec -it some-redis redis-cli这个命令连接到这个Redis服务,这时你就进入了Redis的命令行界面,看到一个0.0.1:6379>的提示符,恭喜你,已经成功了一半!接下来就可以在里面“写写画画”了。

第二件事:认识Redis的“数据结构”

别被“数据结构”这个词吓到,其实就是Redis这个“大本子”里记录信息的几种不同格式,掌握了它们,你就知道了Redis都能存什么类型的信息。

玩Redis其实没那么难,边学边用笔记帮你轻松掌握各种技巧

  1. String:最简单的键值对 这就像是你给一个东西贴个标签,你可以设置一个键叫user:100:name,它的值设置成“张三”,命令就是SET user:100:name "张三",想取出来的时候,就用GET user:100:name,它就会返回“张三”,这种类型非常适合存一些简单的配置、用户的昵称等。

  2. Hash:存一个对象的多个属性 如果说String是贴一张便签,那Hash就是挂一个文件夹,里面可以放好多张相关的便签,比如一个用户的信息,有名字、年龄、城市,你可以用一个键user:100来代表这个用户,然后用Hash来存他的一系列信息,命令是HSET user:100 name "张三" age 30 city "北京",这样,你就可以通过HGET user:100 name单独获取他的名字,或者用HGETALL user:100把他所有的信息都拿出来,这比用多个String来存要方便和高效得多。

  3. List:一个有序的列表 你可以把它想象成一张待办事项清单,或者一条朋友圈消息流,它的特点是按顺序排队,并且可以从左边或者右边添加、取出元素,命令LPUSH mylist "task1"是从左边塞进去一个任务,RPUSH mylist "task2"是从右边塞进去。LPOP mylist则是从左边弹出一个任务,利用这个特性,可以很轻松地实现一个简单的消息队列或者最新动态列表。

  4. Set:一个不允许重复的无序集合 这个就像是一个装独特小球的袋子,你往里面放球,但同样的球只能放一个,命令SADD myset "apple"表示把“apple”这个元素加入集合,Set最大的用处是求交集、并集和差集,你可以用一个Set存用户A的好友,另一个Set存用户B的好友,然后用SINTER friends:A friends:B命令,一秒就能找出他俩的共同好友。

    玩Redis其实没那么难,边学边用笔记帮你轻松掌握各种技巧

  5. Sorted Set:带分数的Set 这是Set的升级版,每个元素都带有一个分数(score),Redis会根据这个分数从小到大给元素排序,这简直就是为排行榜量身定做的!比如做一个游戏积分榜,键叫leaderboard,你可以用ZADD leaderboard 1000 "玩家A"来记录玩家A的1000分,然后用ZREVRANGE leaderboard 0 2命令,就能取出排名前三的玩家,非常方便。

第三件事:想想能用它做什么

知道了这些基本操作,我们就可以想一些实际的应用场景了。

  • 缓存: 这是Redis最经典的用法,比如你网站首页的数据,从数据库里查很慢,就可以在第一次查出来后,存一份到Redis里,并设置一个过期时间(用EXPIRE命令),下次再有人访问首页,就直接从超快的Redis里拿数据,网站速度瞬间提升。
  • 秒杀库存计数: 秒杀开始时,大量用户同时抢购,用数据库直接减库存很可能扛不住,可以先把商品库存数量预存在Redis里(一个String键值对),用户下单时,用DECR命令让库存减1,这个操作是原子性的,不会出现超卖问题。
  • 好友关系与排行榜: 就像前面说的,用Set处理好友关系,用Sorted Set做排行榜,都是Redis的拿手好戏。
  • 临时验证码存储: 用户注册或登录时发的短信验证码,通常几分钟后就失效,用Redis存,并设置一个短的过期时间,时间一到自动删除,完美符合需求。

最后的小提示

玩Redis的时候,有两点要记住:一是Redis的数据主要在内存里,所以不适合存特别大量(比如几个T)的永久性数据,成本高;二是要记得给它设置密码(配置requirepass)并做好网络权限控制,别让外人随便连上了。

你看,拆解开来,Redis的核心概念并不复杂,最关键的是,你亲手把它跑起来,敲几条命令试试,马上就能感受到它的威力,这个“大本子”用熟了,绝对能成为你解决很多实际问题的得力助手。