Redis里那些键值操作命令,平时用得最多的都有哪些啊?
- 问答
- 2026-01-03 13:31:37
- 6
说到Redis里平时用得最多的键值操作命令,那真是离不开那几个天天打交道的“老伙计”了,这些命令是使用Redis的基础,几乎每个项目只要用到了Redis,就肯定会用到它们,咱们就一个个来说道说道。
最最核心的,肯定就是SET和GET这一对了,这俩命令可以说是Redis的“Hello World”。(根据Redis官方文档)SET命令就是用来给一个键设置值的,简单到不能再简单,比如SET username "张三",就把“张三”这个值和“username”这个键绑定了,紧接着,你想看看“username”对应的是谁,就用GET命令:GET username,返回的就是“张三”,这是最简单的字符串类型的存取,也是很多人对Redis的第一印象,但SET命令其实有不少实用的选项,比如NX选项表示“只有当这个键不存在的时候才设置”,这在实现分布式锁等场景时特别有用;而XX选项则相反,表示“只有当这个键已经存在的时候才设置”,还可以用EX参数来给键设置一个过期时间(单位是秒),比如SET session:1234 "userdata" EX 3600,就是设置一个键为session:1234的数据,让它一小时后自动过期删除,这个在管理用户会话时非常普遍。
既然提到了过期,那就必须说说管理键过期时间的两个重要命令:EXPIRE和TTL。(同样参考自Redis官方文档)我们可能先设置了键值对,后来才想起来需要给它加个过期时间,这时候EXPIRE命令就派上用场了,比如EXPIRE username 60,就让“username”这个键在60秒后过期,那怎么知道一个键还能活多久呢?用TTL命令,TTL username,它会返回这个键剩余的生存时间,单位是秒,如果返回-2,表示这个键已经不存在了;返回-1,表示这个键没有设置过期时间,与之对应的还有一个以毫秒为单位的PEXPIRE和PTTL,用在需要更精确时间控制的场合。
对于需要存储多个字段的对象类数据,HSET和HGET(以及它们的小伙伴们)就登场了,这是哈希(Hash)类型的命令。(在《Redis设计与实现》一书中,详细讲解了哈希类型的内部编码结构)比如我们要存储一个用户的信息,有姓名、年龄、城市,如果用多个单独的键来存(如user:1:name, user:1:age),会很麻烦,用哈希就方便多了:HSET user:1 name "李四" age 30 city "北京",这一条命令就把三个字段都设置好了,你可以用HGET user:1 name来单独获取姓名,也可以用HGETALL user:1来一次性获取这个用户的所有字段和值。HMSET(新版Redis中HSET已具备同样功能)用于同时设置多个字段,HMGET用于同时获取多个字段的值,哈希类型非常适合将一些相关的数据组合在一起存储和管理,比使用多个独立的字符串键要更高效、更结构化。
然后是非常实用的INCR和DECR命令。(Redis官方文档将其归类为字符串命令,但由于其特殊性,使用极其频繁)这俩命令用于对数字类型的值进行原子性的增加1和减少1操作,所谓原子性,就是说多个客户端同时操作也不会出错,这个特性使得它们成为实现计数器的完美选择,比如统计网站点击量:INCR page:view:1001,每次执行这个命令,文章ID为1001的浏览量就会加1,还有INCRBY和DECRBY,可以指定增加或减少的步长,比如INCRBY user:1:points 10,给用户1增加10个积分,这些计数器操作在Redis内部是单线程处理的,所以绝对不会出现并发问题,非常可靠。
在处理列表数据时,LPUSH和RPUSH,以及LPOP和RPOP这组命令用得非常多。(参考常见消息队列实践)它们分别是从列表的左边(头部)和右边(尾部)插入和取出元素,比如实现一个简单的消息队列:生产者用LPUSH task:queue "task1"将任务从左边推入列表,消费者用RPOP task:queue从右边取出任务进行处理,这就形成了一个先入先出的队列,如果想实现栈(后入先出)结构,那就两边都用同一端的命令,比如都用LPUSH和LPOP,还有一个非常强大的BRPOP命令,它是RPOP的阻塞版本,如果列表里没有元素,它会一直等待直到有元素可弹出或超时,这在实现 worker 等待任务的场景下避免了无效的轮询,非常高效。
不能不提的是DEL命令和KEYS命令。(根据Redis官方文档警告)DEL命令很简单,就是删除一个或多个键,比如DEL username user:1,而KEYS命令则用于查找所有符合给定模式的键,比如KEYS user:*会找出所有以“user:”开头的键。(这一点非常重要,在生产和性能优化的文章中被反复强调)KEYS命令在生产环境中要极其谨慎地使用,因为它会遍历数据库中的所有键,当键数量巨大时,会导致Redis服务短暂停顿,引发灾难,通常我们会用SCAN命令来替代KEYS命令进行模糊查找,SCAN命令是以游标方式增量式迭代的,不会阻塞服务器。
除了以上这些,像判断键是否存在的EXISTS命令,获取键对应值类型的TYPE命令,以及不删除键但是清除其值的UNLINK命令(异步删除,适用于大键,避免阻塞)等,也都是经常会用到的辅助命令。
SET/GET是基础存取,EXPIRE/TTL管过期,HSET/HGET管对象,INCR/DECR管计数,LPUSH/RPOP管队列,DEL删键,KEYS慎用,掌握了这些命令,基本上就解决了使用Redis处理键值数据时八成以上的日常需求了。

本文由称怜于2026-01-03发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/73726.html
