目录
前言
原先写过很多关于Redis的知识点,推荐阅读:
- Redis框架从入门到学精(全)
 - Redis的常见面试题(全)
 - Redis 跳表(skiplist)知识点详解
 - Python操作Redis从入门到精通附代码(全)
 
基本的只是都如上所示,本文主要讲解常用的命令
 第一是应对开发中常用的测试
 第二是近年软考常考redis知识
通过启动redis-server之后,用redis-cli进行连接即可
1. key键位命令
| 命令 | 命令模版 | 描述 | 示例 | 
|---|---|---|---|
| DEL | DEL key | 删除指定的 key | DEL mykey | 
| DUMP | DUMP key | 序列化给定 key,并返回被序列化的值 | DUMP mykey | 
| EXISTS | EXISTS key | 检查给定 key 是否存在 | EXISTS mykey | 
| EXPIRE | EXPIRE key seconds | 为 key 设置过期时间(秒) | EXPIRE mykey 60 | 
| EXPIREAT | EXPIREAT | key timestamp 以 UNIX 时间戳为单位设置 key 的过期时间 | EXPIREAT mykey 1672531199 | 
| KEYS | KEYS pattern | 查找匹配给定模式的所有 key | KEYS user* | 
| MOVE | MOVE key db | 将 key 移动到另一个数据库 | MOVE mykey 1 | 
| PERSIST | PERSIST key | 移除 key 的过期时间,令其持久存在 | PERSIST mykey | 
| PEXPIRE | PEXPIRE key milliseconds | 设置 key 的过期时间(毫秒) | PEXPIRE mykey 60000 | 
| PEXPIREAT | PEXPIREAT key milliseconds-timestamp | 设置毫秒级的 UNIX 时间戳作为 key 的过期时间 | PEXPIREAT mykey 1672531199123 | 
| PTTL | PTTL key | 以毫秒为单位返回 key 的剩余存活时间 | PTTL mykey | 
| RENAME | RENAME key newkey | 将 key 重命名为 newkey | RENAME mykey newkey | 
| RENAMENX | RENAMENX key newkey | 当且仅当 newkey 不存在时,将 key 重命名为 newkey | RENAMENX mykey newkey | 
| SORT | SORT key [options] | 对 key 进行排序,返回或存储排序后的结果 | SORT mylist | 
| TTL | TTL key | 以秒为单位返回 key 的剩余存活时间 | TTL mykey | 
| TYPE | TYPE key | 返回 key 所存储的值的类型 | TYPE mykey | 
| UNLINK | UNLINK key | 异步删除 key,避免阻塞 Redis | UNLINK mykey | 
| SCAN | SCAN cursor [MATCH pattern] [COUNT count] | 增量迭代数据库中的 key | SCAN 0 MATCH user* COUNT 100 | 
测试连接性
127.0.0.1:6379> ping
PONG
 
获取所有的key值
127.0.0.1:6379> keys *
1) "xxxx"
 
获取所有的键值
127.0.0.1:6379> dbsize
(integer) 180
 
部分截图如下:

查询键是否存在:exists key [key ...],可以查询多个
127.0.0.1:6379> exists xxx yyy
(integer) 2
 
删除键:del key [key ...],可以删除多个
127.0.0.1:6379> del xxx yyy
(integer) 2
 
查询键类型:type key
127.0.0.1:6379> type xxx
string
 
查询key的生命周期(秒)
# 秒语法:ttl key
# 毫秒语法:pttl key
#-1:永远不过期
127.0.0.1:6379> ttl xxx
(integer) -1
 
移动键:move key db
127.0.0.1:6379> move xxx 2
(integer) 1
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> keys *
1) "xxx"
 
部分截图如下:

-1 为过期时间,还可以通过expire设置一个过期时间
127.0.0.1:6379> expire xxx 60
(integer) 1
127.0.0.1:6379> ttl xxx
(integer) 57
 
设置永不过期:persist key
127.0.0.1:6379> persist xxx
(integer) 1
 
更改键名称:rename key newkey
127.0.0.1:6379> rename xxx yyy
OK
 
部分截图如下:

2. list列表命令
| 命令 | 命令模版 | 描述 | 示例 | 
|---|---|---|---|
| LPUSH | LPUSH key value [value …] | 将一个或多个值插入到列表头部 | LPUSH mylist "a" "b" | 
| RPUSH | RPUSH key value [value …] | 将一个或多个值插入到列表尾部 | RPUSH mylist "a" "b" | 
| LPOP | LPOP key | 移除并返回列表的第一个元素 | LPOP mylist | 
| RPOP | RPOP key | 移除并返回列表的最后一个元素 | RPOP mylist | 
| LLEN | LLEN key | 获取列表的长度 | LLEN mylist | 
| LRANGE | LRANGE key start stop | 获取列表中指定范围的元素 | LRANGE mylist 0 -1 | 
| LINDEX | LINDEX key index | 获取列表中指定索引的元素 | LINDEX mylist 0 | 
| LSET | LSET key index value | 将列表中指定索引的元素设置为新的值 |  LSET mylist 0 "newvalue" | 
| LREM | LREM key count value | 从列表中移除指定的元素,count 表示移除的数量 | LREM mylist 2 "a" | 
| LTRIM | LTRIM key start stop | 修剪列表,只保留指定范围内的元素 | LTRIM mylist 1 3 | 
| RPOPLPUSH | RPOPLPUSH source destination | 移除列表的最后一个元素并将其插入到另一个列表的头部 | RPOPLPUSH mylist myotherlist | 
| BLPOP | BLPOP key [key …] timeout | 阻塞弹出列表的第一个元素,若列表为空则等待直到超时或有新元素 | BLPOP mylist 0 | 
| BRPOP | BRPOP key [key …] timeout | 阻塞弹出列表的最后一个元素,若列表为空则等待直到超时或有新元素 | BRPOP mylist 0 | 
| BRPOPLPUSH | BRPOPLPUSH source destination timeout | 阻塞移除列表的最后一个元素,并将其插入到另一个列表头部 | BRPOPLPUSH mylist myotherlist 0 | 
左端存值语法:lpush key value [value ...]
127.0.0.1:6379> lpush xx a b c
(integer) 3
 
右端存值语法:rpush key value [value ...]
127.0.0.1:6379> rpush yy a b c
(integer) 3
 
索引存值语法:lset key index value
127.0.0.1:6379> lset xx 2 d
OK
 
左端弹出语法:lpop key
右端弹出语法:rpop key
获取元素个数:llen key

获取列表元素:lrange key start stop
获取所有: lrange key 0 -1
右获取: lrange key -3 -1
索引获取语法:lindex key index
删除元素:lrem key count value
3. string字符串命令
| 命令 | 命令模版 | 描述 | 示例 | 
|---|---|---|---|
| SET | SET key value [EX seconds] [PX milliseconds] | 设置指定 key 的值。可选参数可以指定过期时间(秒或毫秒) | SET mykey "Hello" | 
| GET | GET key | 获取指定 key 的值 | GET mykey | 
| GETSET | GETSET key value | 设置指定 key 的新值并返回旧值 | GETSET mykey "NewValue" | 
| MSET | MSET key value [key value …] | 一次设置多个 key-value 对 | MSET key1 "a" key2 "b" | 
| MGET | MGET key [key …] | 一次获取多个 key 的值 | MGET key1 key2 | 
| SETEX | SETEX key seconds value | 设置 key 的值及其过期时间(秒) | SETEX mykey 10 "Hello" | 
| SETNX | SETNX key value | 只有在 key 不存在时,才设置 key 的值 | SETNX mykey "Hello" | 
| INCR | INCR key | 将 key 的整数值加 1 |  INCR mycounter | 
| INCRBY | INCRBY key increment | 将 key 的整数值加指定的增量 | INCRBY mycounter 5 | 
| DECR | DECR key | 将 key 的整数值减 1 | DECR mycounter | 
| DECRBY | DECRBY key decrement | 将 key 的整数值减指定的减量 | DECRBY mycounter 5 | 
| APPEND | APPEND key value | 将 value 追加到原 key 值的末尾 | APPEND mykey " World" | 
| STRLEN | STRLEN key | 返回 key 所存储的字符串值的长度 | STRLEN mykey | 
| SETRANGE | SETRANGE key offset value | 用指定的字符串覆盖 key 从偏移量开始的值 | SETRANGE mykey 6 "Redis" | 
| GETRANGE | GETRANGE key start end | 返回 key 中字符串值的子字符串,范围由 start 和 end 指定 | GETRANGE mykey 0 4 | 
| MSETNX | MSETNX key value [key value …] | 当所有给定 key 都不存在时,同时设置多个 key-value 对 | MSETNX key1 "a" key2 "b" | 
存放键值:set key value [EX seconds] [PX milliseconds] [NX|XX]
 nx:如果key不存在则建立,xx:如果key存在则修改其值,也可以直接使用setnx/setex命令
如果字符串中的值是数字类型的,可以使用incr命令每次递增,不是数字类型则报错:incr key
4. set集合命令
| 命令 | 命令模版 | 描述 | 示例 | 
|---|---|---|---|
| SADD | SADD key member [member …] | 向集合中添加一个或多个成员 | SADD myset "apple" "banana" | 
| SCARD | SCARD key | 获取集合中成员的数量 | SCARD myset | 
| SDIFF | SDIFF key [key …] | 返回一个集合与其他集合的差集 | SDIFF myset1 myset2 | 
| SDIFFSTORE | SDIFFSTORE destination key [key …] | 将差集结果存储在指定的集合中 | SDIFFSTORE resultset myset1 myset2 | 
| SINTER | SINTER key [key …] | 返回集合的交集 | SINTER myset1 myset2 | 
| SINTERSTORE | SINTERSTORE destination key [key …] | 将交集结果存储在指定的集合中 | SINTERSTORE resultset myset1 myset2 | 
| SISMEMBER | SISMEMBER key member | 判断成员是否在集合中 | SISMEMBER myset "apple" | 
| SMEMBERS | SMEMBERS key | 返回集合中的所有成员 | SMEMBERS myset | 
| SMOVE | SMOVE source destination member | 将指定成员从一个集合移动到另一个集合 | SMOVE myset1 myset2 "apple" | 
| SPOP | SPOP key [count] | 随机移除并返回集合中的一个或多个成员 | SPOP myset 1 | 
| SRANDMEMBER | SRANDMEMBER key [count] | 随机返回集合中的一个或多个成员,但不移除 | SRANDMEMBER myset 2 | 
| SREM | SREM key member [member …] | 移除集合中的一个或多个成员 | SREM myset "apple" "banana" | 
| SUNION | SUNION key [key …] | 返回所有集合的并集 | SUNION myset1 myset2 | 
| SUNIONSTORE | SUNIONSTORE destination key [key …] | 将并集结果存储在指定的集合中 | SUNIONSTORE resultset myset1 myset2 | 
示例如下:
存储值:sadd key member [member ...]
# 只存了2个
127.0.0.1:6379> sadd ma nong ma nong
(integer) 2
 
获取所有元素语法:smembers key
127.0.0.1:6379> smembers ma
1) "nong"
2) "ma"
 
部分截图如下:

随机获取:srandmember langs count
127.0.0.1:6379> srandmember ma 1
1) "nong"
 
判断集合是否存在元素:sismember key member
127.0.0.1:6379> sismember ma ma
(integer) 1
 
截图如下:

获取集合元素个数:scard key
127.0.0.1:6379> scard ma
(integer) 2
 
删除集合元素:srem key member [member ...]
127.0.0.1:6379> srem ma ma
(integer) 1
 

弹出元素:spop key [count]
127.0.0.1:6379> spop ma 1
1) "nong"
 
5. hash哈希
键值对集合,特别适合用于存储对象类型
 常用命令:
hset key field value给key集合中的filed键赋值valuehget key1 field集合field取出valuehmset key1 field1 value1 field2 value2批量设置hash的值hexists key1 field查看哈希表key中,给定域field是否存在hkeys key列出该hash集合的所有fieldhvals key列出该hash集合的所有valuehincrby key field increment为哈希表key中的域field的值加上增量1 -1hsetnx key field value将哈希表key中的域field的值设置为value,当且仅当域field不存在
例如 hset user:1000 id 1
6. Zset有序集合
没有重复元素的字符串集合,按照相关的分数进行排名,排名从低到高,排名可重复
有序集合 zset 与普通集合 set 非常相似,是一个没有重复元素的字符串集合
常用命令:
zadd key score1 value1 score2 value2将一个或多个member元素及其score值加入到有序key中zrange key start stop (withscores)返回有序集key,下标在start与stop之间的元素,带withscores,可以让分数一起和值返回到结果集。zrangebyscore key min max(withscores)返回有序集key,所有score值介于min和max之间(包括等于min或max)的成员。有序集成员按score的值递增次序排列zrevrangebyscore key max min (withscores)同上,改为从大到小排列zincrby key increment value为元素的score加上增量zrem key value删除该集合下,指定值的元素zcount key min max统计该集合,分数区间内的元素个数zrank key value返回该值在集合中的排名,从0开始










