redis-cli 命令详解
auth —> 密码认证quit —> 退出,关闭连接ping —> 返回 pongecho —> 打印字符串select —> 切换指定数据库,以索引号表示
client list —> 获取连接到服务器的客户端连接列表client kill —> 关闭客户端连接save —> 同步保存数据到磁盘bgsave —> 在后台异步保存当前数据库的数据到磁盘time —> 返回当前服务器时间info —> 获取 Redis 服务器的各种信息和统计数值,Server —> 服务器信息Clients —> 连接客户端信息Memory —> 内存信息Persistence —> RDB 和 AOF 的相关信息Stats —> 一般统计信息Replication —> 主/从复制信息CPU —> CPU 计算量统计信息Cluster —> 集群信息Keyspace —> 数据库相关的统计信息
exists —> 确认key是否存在del —> 删除keytype —> 查看key对应值类型keys —> 查询满足条件的所有keysrandomkey —> 随机返回一个keyrename —> 重命名key,若新key存在则删除原来存在的keydbsize —> 返回key的总数expire —> 设置key有效时间,单位秒;设置小于等于 0 则表示删除keyttl —> 返回key剩余有效时间,永久有效返回 -1,不存在key返回 -2move —> 将指定的key移动到索引号表示的数据库flushdb —> 删除当前数据库所有的 keyflushall —> 删除所有数据库的所有 key
String 类型
set —> 设置 key/value 值对,值为 stringget —> 返回 key 对应的 string 值mget —> 返回多个 key 的值mset —> 同时设置多个 key/valueincr —> 给 key 的 value 增加 1 ,只当 value 是 integer 时以及不超过最大值(2^31-1)时有效decr —> 给 key 的 value 减少 1append —> 在字符串 value 后面连接新的 valuesubstr —> 返回截取的字符串,substr key start end
List 类型
rpush —> 向名称为 key 的列表尾部添加一个 string 元素lpush —> 向名称为 key 的列表头部添加一个元素llen —> 返回列表长度lrange —> 返回名称为 key 的列表从 start 到 end 之间的元素ltrim —> 截取列表元素,保留 start 到 end 之间的元素lindex —> 返回 index 处的元素lset —> 给 index 处的元素赋值为 valuelrem —> lrem key count value 删除count个值为value的元素,count为0表示删除所有值为value的元素,count>0表示从头至尾删除count个值为value的元素,count<0表示从尾到头删除 |count| 个值为value的元素lpop —> 返回并删除列表中的第一个元素rpop —> 返回并删除列表中的最后一个元素
Set 类型
sadd —> 向名称为 key 的 set 中添加元素srem —> 删除名称为 key 的 set 中的元素spop —> 随机删除并返回名称为 key 的 set 中的一个元素smove —> 从名称为 srckey 的集合中的一个名称为 member 元素移动到名称为 dstkey 的集合scard —> 返回名称为 key 的集合的元素数量sismember —> 返回 member 是否是 key 集合中的元素sinter —> 求集合交集sinterstore —> 求集合交集并保存到 dstkey 的集合sunion —> 求集合并集sunionstore —> 求集合并集并保存到 dstkey 的集合sdiff —> 求集合差集,第一个集合中不存在后面集合中的元素,集合 a : {a,b,c} , 集合 b : {a} , 集合 c : { c } ,则sdiff a b c = { b }sdiffstore —> 求差集并保存到 dstkey 的集合smembers —> 列出集合中的元素srandmember —> 随机返回集合中的一个元素
ZSet 类型
zadd —> 向名称为 key 的有序集合中添加元素 member,score用于排序,如果该元素已经存在,则更新该元素的 scorezrem —> 删除名称为 key 的 zset 中的元素 memberzincrby —> 如果在名称为 key 的 zset 中已经存在元素 member,则该元素的 score 增加 increment;否则向集合中添加该元素,其 score 的值为 incrementzrank —> 返回名称为 key 的 zset(元素已按 score 从小到大排序)中 member 元素的 rank(即index,从0开始)zrevrank —> 返回名称为 key 的 zset(元素已按 score 从大到小排序)中 member 元素的 rank(即index,从0开始)zrange —> 返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素zrevrange —> 返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素zrangebyscore —> 返回名称为key的zset中score >= min且score <= max的所有元素zcard —> 返回名称为key的zset的基数zscore —> 返回名称为key的zset中元素的scorezremrangebyrank —> 删除名称为key的zset中rank >= min且rank <= max的所有元素zremrangebyscore —> 删除名称为key的zset中score >= min且score <= max的所有元素zunionstorezinterstore
Hash 类型
hset —> 将哈希表 key 中的字段 field 的值设为 valuehget —> 返回哈希表 key 中的字段 field 的值hlen —> 返回哈希表 key 中字段数量hkeys —> 返回哈希表 key 中所有字段hexists —> 返回哈希表 key 中字段 field 是否存在hdel —> 删除哈希表 key 中字段 fieldhgetall —> 获取在哈希表中指定 key 的所有字段和值hincrby —> 为哈希表 key 中的指定字段的整数值加上增量 incrementhincrbyfloat —> 为哈希表 key 中的指定字段的浮点数值加上增量 incrementhmget —> 获取所有给定字段的值hmset —> 同时将多个 field-value (域-值)对设置到哈希表 key 中hsetnx —> 只有在字段 field 不存在时,设置哈希表字段的值hvals —> 获取哈希表中所有值hscan —> 迭代哈希表中的键值对
增删查改命令
Redis支持多种数据类型,每种类型都有其特定的应用场景和操作命令。核心数据类型及其增删查改命令:
| 数据类型 | 数据结构 | 典型场景 | 增加/修改 | 删除 | 查询 | 修改(特定) |
|---|---|---|---|---|---|---|
| String(字符串) | 二进制安全的字符串,可存文本、数字等 | 缓存、计数器、分布式锁 | SET key valueMSET key1 v1 key2 v2SETNX key valueINCR key |
DEL key |
GET keyMGET key1 key2STRLEN key |
APPEND key valueINCRBY key increment |
| Hash(哈希) | 字段-值对的集合,适合存储对象 | 存储用户信息、商品详情等对象 | HSET key field valueHMSET key f1 v1 f2 v2 |
HDEL key field |
HGET key fieldHGETALL keyHKEYS key |
HINCRBY key field increment |
| List(列表) | 双向链表,元素有序且可重复 | 消息队列、朋友圈时间线 | LPUSH key valueRPUSH key valueLINSERT key BEFORE/AFTER pivot value |
LPOP keyRPOP keyLREM key count value |
LRANGE key start stopLINDEX key index |
LSET key index value |
| Set(集合) | 无序集合,元素唯一 | 标签、共同好友 | SADD key member |
SREM key member |
SMEMBERS keySISMEMBER key memberSINTER key1 key2 |
无原生修改命令,需先删后增 |
| Sorted Set(有序集合) | 元素按分数排序的集合,元素唯一 | 排行榜、延迟队列 | ZADD key score member |
ZREM key member |
ZRANGE key start stop [WITHSCORES]ZREVRANGEZRANK key member |
ZADD key new_score member(通过重新添加实现覆盖) |
💡 进阶数据类型与使用建议
除了上述五种基本类型,Redis还提供了一些用于特定场景的高级类型:
- Bitmap(位图):基于String的位操作,非常适合二值状态统计(即只有两种状态(是/否、存在/不存在、真/假) 的数据统计场景),如用户签到。常用命令有
SETBIT、GETBIT、BITCOUNT。 - HyperLogLog:用于大数据量下的去重计数,有约0.81%的误差率,但非常节省内存,如统计网站UV。常用命令有
PFADD、PFCOUNT。 - GEO(地理空间):可以存储地理坐标并进行距离计算、范围查询等,用于附近的人或商家等功能。常用命令有
GEOADD、GEORADIUS。 - Stream:提供了完整的消息队列功能,支持消费者组,用于异步任务处理、消息流等。常用命令有
XADD、XREAD。
⚠️ 重要注意事项
在使用Redis命令时,有几个关键点需要留意:
- 命令特性:Redis命令不区分大小写,但key是区分大小写的。所有数据都是以字符串形式保存的。
- 生产环境建议:
- 避免使用
KEYS *命令查询键,因为它会阻塞服务器,尤其在数据量大时。可以使用SCAN命令进行渐进式遍历。 - 使用
HGETALL获取一个包含大量字段的Hash时,可能会消耗较多资源。如果只需要部分字段,建议使用HMGET;如果需要遍历所有字段,可以使用HSCAN。
- 避免使用
- 类型选型:根据你的业务场景选择最合适的数据类型。例如,存储对象用Hash,需要排序用Sorted Set,只需要去重则用Set。
