Redis命令 📅 2026/7/15 8:10:22 redis命令不区分大小写全局命令value实际上会存在多种类型每种不同的类型对应不同的命令不区分类型的命令称为全局命令get根据key来获取value查询不存在的返回空操作格式get key举个例子get key1/get key1set把key和value存储进去操作格式set key value举个例子set key1 value1/set key3 value3keys用来查询当前服务器上匹配的key返回所有满足样式pattern的keyh?llo匹配hellohxllo等h*llo匹配hlloheeeello等h[ae]llo匹配hallohello但不匹配hilloh[^e]llo匹配hallohbllo等但不匹配helloh[a-b]llo匹配hallohbllo但不匹配hcllo举个例子keys h?llo keys h*llo keys h[ab]llo keys h[^e]llo keys h[a-b]llo注意keys的命令时间复杂度O(N)所以在生产环境上一般禁止使用keys命令尤其keys*因为可能导致遍历时间过长导致阻塞了许多命令无法给其他客户端提供服务进而导致许多命令再去访问Mysql导致Mysql一次来了大量访问将其搞崩所以一般禁止该命令为什么我说会搞崩Mysqlredis经常会用于做缓存挡在Mysql前面万一redis被一个keys *阻塞住了此时其他人查询redis操作就会超时此时这些请求就会查询数据库导致Mysql一次来了大量访问将其搞崩exists判定key是否存在操作格式exists key [key...]举个例子exists key1 key2 key3返回值查询到的key的个数时间复杂度O(1),当然你要查询N个时间复杂度就是O(N)注意redis是一个客户端服务端结构程序客户端和服务端之间靠网络来通信所以发布命令尽可能简洁有效减少网络通信次数进而提高效率因为网络通信和内存相比效率较低成本较高所以次数越少越好。举个例子//分开写进行多次网络之间的通信 exists key1 exists key2 //放在一起写减少网络之间的通信这样效率要高于上面的写法 exists key1 key2del(delete)删除指定的key操作格式del key [key,...]返回值成功删除key的个数举个例子del key1 key2 key3注意该命令的危险不同于mysql该命令的危险性是根据redis做什么服务而定的如果作为缓存一般情况下并不会出现什么问题此时redis里面只含有一些热点数据全量数据在mysql中如果删除了几个数据无非就重新从mysql中拿取就行但是如果要删除了一大半数据导致大量请求去找mysql拿数据那这就可能出现上述说的问题搞崩mysql这样问题就大了。如果redis直接作为数据库:那么删数据导致数据丢失那么问题就非常严重了。如果redis作为消息队列:误删对数据影响大小就要根据具体情况具体分析了。expire给指定的key设置过期时间超出设置的时间就会被自动删除使用场景手机验证码某些优惠卷基于redis实现的分布式锁为了避免出现死锁一般要给锁设置上过期时间操作格式expare/pexpare key seconds秒/毫秒举个例子expare key1 3 pexpare key2 10返回值0表示设置成功1表示设置失败什么情况下会造成失败?比如key不存在ttl/pttl查看过期时间还剩多少ttl查询的剩余时间单位是秒pttl查询的剩余时间单位是毫秒操作格式ttl key1/pttl key2时间复杂度O(1)返回值剩余时间-1表示没有设置过期时间-2表示key不存在举个例子ttl key1 pttl key2type返回value对应的数据类型redis作为消息队列value类型为stream操作格式type key举个例子type key1时间复杂度O(1)