🌹 引导
Commands | Redishttps://redis.io/commands/Redis命令中心(Redis commands) -- Redis中国用户组(CRUG)Redis命令大全,显示全部已知的redis命令,redis集群相关命令,近期也会翻译过来,Redis命令参考,也可以直接输入命令进行命令检索。http://www.redis.cn/commands.html
👍 Redis 键
注:命令不区分大小写
KEYS * | 查看当前库所有的key |
EXISTS key | 判断某个key是否存在 |
TYPE key | 查看某个key数据类型 |
DEL key | 删除指定key数据 |
UNLINK key | 非阻塞删除,仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步中操作 |
TTL key | 查看还剩下多少秒过期,-1表示永不过期,-2 表示已过期 |
EXPIRE key | 给指定key设置过期时间 |
MOVE key dbindex【0-15】 | 将当前数据库的key移动到给定的数据库db中 |
SELECT dbindex | 切换数据库【0-15】默认0 |
DBSIZE | 切换当前数据库key的数量 |
FLUSH | 清空当前库 |
FLUSHALL | 清苦所有库 |
HELP @数据类型 | 查看帮助文档 例如(help @string) |
① 字符串(string)
理论
- Redis基本类型,一个key对应一个value
- 二进制安全的,Redis 的string可以包含任何数据;比如说jpg图片或者是序列化对象
- 一个key对应value最多可以是512M
实操
SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
EX seconds -- 以秒为单位设置过期时间.
PX milliseconds -- 以毫秒为单位设置过期时间.
EXAT timestamp-seconds -- 设置以秒为单位的UNIX时间戳所对应的时间位过期时间.
PXAT timestamp-milliseconds -- 设置以毫秒为单位的UNIX时间戳所对应的时间位过期时间.
NX -- 键不存在时设置键值.
XX -- 键存在时设置键值.
KEEPTTL --保留设置前指定键的生存时间.
GET -- 返回指定键原本的值,若键不存在返回NULL.
1 | SET key value |
设置指定 key 的值。 | |
2 | GET key |
获取指定 key 的值。 | |
3 | GETRANGE key start end |
返回 key 中字符串值的子字符 | |
4 | GETSET key value |
将给定 key 的值设为 value ,并返回 key 的旧值(old value)。 | |
5 | GETBIT key offset |
对 key 所储存的字符串值,获取指定偏移量上的位(bit)。 | |
6 | MGET key1 [key2..] |
获取所有(一个或多个)给定 key 的值。 | |
7 | SETBIT key offset value |
对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。 | |
8 | SETEX key seconds value |
将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。 | |
9 | SETNX key value |
只有在 key 不存在时设置 key 的值。 | |
10 | SETRANGE key offset value |
用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。 | |
11 | STRLEN key |
返回 key 所储存的字符串值的长度。 | |
12 | MSET key value [key value ...] |
同时设置一个或多个 key-value 对。 | |
13 | MSETNX key value [key value ...] |
同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。 | |
14 | PSETEX key milliseconds value |
这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。 | |
15 | INCR key |
将 key 中储存的数字值增一。 | |
16 | INCRBY key increment |
将 key 所储存的值加上给定的增量值(increment) 。 | |
17 | INCRBYFLOAT key increment |
将 key 所储存的值加上给定的浮点增量值(increment) 。 | |
18 | DECR key |
将 key 中储存的数字值减一。 | |
19 | DECRBY key decrement |
key 所储存的值减去给定的减量值(decrement) 。 | |
20 | APPEND key value |
如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。 |
最常用
SET
获取时间戳
KEEPTTL:保留当前key上一次设置的过期时间
设置/获取多键值对
MSET
MSETNX
整体操作,要么都成功,要么都失败
获取范围内的值
GETRANGE
GETRANGE k start end:start ,end 是下标索引 (GETRANGE key 0 -1 表示整个字符串)
SETRANGE
SETRANGE k index v:往k对应的value中索引位置在index后插入v (SETRANGE k1 2 xyz)
数值增减
值一定是数字才能进行加减
INCR
INCRBY
DECR
DECRBy
获取字符串长度和内容追加
STRLEN
STRLEN k
APPEND
APPEND k v
分布式锁
SETNX SETEX
setex(set with expire)键秒值/setnx(set if not exist)
GETSET
1.3 应用场景
商品点赞,阅读量等
② 数组(list)
1. 理论
Redis 列表是简单的字符串列表,按照插入顺序排序。可在头部(左边)或者尾部(右边)添加元素,最多可包含2^32-1个元素(4294967295,每个列表超过40亿个元素)
主要功能是push/pop等,一般用在栈、队列、消息队列等
它的底层是一个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能较差
2. 实操
1 | BLPOP key1 [key2 ] timeout |
移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 | |
2 | BRPOP key1 [key2 ] timeout |
移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 | |
3 | BRPOPLPUSH source destination timeout |
从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 | |
4 | LINDEX key index |
通过索引获取列表中的元素 | |
5 | LINSERT key BEFORE|AFTER pivot value |
在列表的元素前或者后插入元素 | |
6 | LLEN key |
获取列表长度 | |
7 | LPOP key |
移出并获取列表的第一个元素 | |
8 | LPUSH key value1 [value2] |
将一个或多个值插入到列表头部 | |
9 | LPUSHX key value |
将一个值插入到已存在的列表头部 | |
10 | LRANGE key start stop |
获取列表指定范围内的元素 | |
11 | LREM key count value |
移除列表元素 | |
12 | LSET key index value |
通过索引设置列表元素的值 | |
13 | LTRIM key start stop |
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 | |
14 | RPOP key |
移除列表的最后一个元素,返回值为移除的元素。 | |
15 | RPOPLPUSH source destination |
移除列表的最后一个元素,并将该元素添加到另一个列表并返回 | |
16 | RPUSH key value1 [value2] |
在列表中添加一个或多个值到列表尾部 | |
17 | RPUSHX key value |
为已存在的列表添加值 | |
18 | DECR key |
将 key 中储存的数字值减一。 | |
19 | DECRBY key decrement |
key 所储存的值减去给定的减量值(decrement) 。 | |
20 | APPEND key value |
如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。 |
LPUSH/RPUSH/LRANGE
LPOP/RPOP
LINDEX
按照索引下标获取元素(从上往下)
LLEN
获取列表中元素个数
LREM
LREM key num val: 删除num个val值
LTRIM
LTRIM key 开始index 结束index:截取指定范围的值后赋值给当前key
RPOPLPUSH
RPOPLPUSH 源列表 目标列表
LSET
LSET key index value:在index位置设置value
LINSERT
LINSERT key before/after 已有值 插入新的值
LINSERT list1 before 11 mysql :往list1集合中11这个值的前面插入mysql
3. 应用场景
微信公众号:订阅的公众号
LPUSH lxs:artcle001 no1 no2 no3 订阅LRANGE lxs:artcle001 0 9 分页查询
③ 哈希(hash)
1. 理论
Redis Hash 是一个String类型的field(字段) 和value(值) 的映射表,hash 特别适合存储对象。
Redis 中的每个Hash 可以存储2^32-1键值对(40多亿)。比如:k1 field1 v1
类似Java中的 Map<String,Map<String,object>>
2. 实操
1 | HDEL key field1 [field2] |
删除一个或多个哈希表字段 | |
2 | HEXISTS key field |
查看哈希表 key 中,指定的字段是否存在。 | |
3 | HGET key field |
获取存储在哈希表中指定字段的值。 | |
4 | HGETALL key |
获取在哈希表中指定 key 的所有字段和值 | |
5 | HINCRBY key field increment |
为哈希表 key 中的指定字段的整数值加上增量 increment 。 | |
6 | HINCRBYFLOAT key field increment |
为哈希表 key 中的指定字段的浮点数值加上增量 increment 。 | |
7 | HKEYS key |
获取哈希表中的所有字段 | |
8 | HLEN key |
获取哈希表中字段的数量 | |
9 | HMGET key field1 [field2] |
获取所有给定字段的值 | |
10 | HMSET key field1 value1 [field2 value2 ] |
同时将多个 field-value (域-值)对设置到哈希表 key 中。 | |
11 | HSET key field value |
将哈希表 key 中的字段 field 的值设为 value 。 | |
12 | HSETNX key field value |
只有在字段 field 不存在时,设置哈希表字段的值。 | |
13 | HVALS key |
获取哈希表中所有值。 | |
14 | HSCAN key cursor [MATCH pattern] [COUNT count] |
迭代哈希表中的键值对。 |
HSET HGET HMSET HMGET HGETALL HDEL
HLEN
HEXISTS
HKEYS HVALS
HINCRBY HINCRBYFLOAT
HSETNX
3. 应用场景
功能 | 操作 | 命令 |
购物车 | 新增商品 | HSET shopcar:uid1024 goodId_001 1 |
新增商品 | HSET shopcar:uid1024 goodId_002 1 | |
增加商品数量 | HINCRBY shopcar:uid1024 goodId_001 1 | |
商品种类总数 | HLEN shopcar:uid1024 | |
全选 | HGETALL shopcar:uid1024 |
④ 集合(set)
1. 理论
Reids 的 Set 是 String 类型的集合。集合成员是唯一的,集合中不会存在重复数据,集合对象的编码可以是 intset 或者 hashtable .
Redis 中 Set 集合是通过哈希表实现的,添加、删除、查找的复杂度都是O(1)。
集合中最大的成员数是2^32-1(4294967295,每个列表超过40亿个元素)·
2. 实操
1 | SADD key member1 [member2] |
向集合添加一个或多个成员 | |
2 | SCARD key |
获取集合的成员数 | |
3 | SDIFF key1 [key2] |
返回第一个集合与其他集合之间的差异。 | |
4 | SDIFFSTORE destination key1 [key2] |
返回给定所有集合的差集并存储在 destination 中 | |
5 | SINTER key1 [key2] |
返回给定所有集合的交集 | |
6 | SINTERSTORE destination key1 [key2] |
返回给定所有集合的交集并存储在 destination 中 | |
7 | SISMEMBER key member |
判断 member 元素是否是集合 key 的成员 | |
8 | SMEMBERS key |
返回集合中的所有成员 | |
9 | SMOVE source destination member |
将 member 元素从 source 集合移动到 destination 集合 | |
10 | SPOP key |
移除并返回集合中的一个随机元素 | |
11 | SRANDMEMBER key [count] |
返回集合中一个或多个随机数 | |
12 | SREM key member1 [member2] |
移除集合中一个或多个成员 | |
13 | SUNION key1 [key2] |
返回所有给定集合的并集 | |
14 | SUNIONSTORE destination key1 [key2] |
所有给定集合的并集存储在 destination 集合中 | |
15 | SSCAN key cursor [MATCH pattern] [COUNT count] |
迭代集合中的元素 | |
16 | RPUSH key value1 [value2] |
在列表中添加一个或多个值到列表尾部 | |
17 | RPUSHX key value |
为已存在的列表添加值 | |
18 | DECR key |
将 key 中储存的数字值减一。 | |
19 | DECRBY key decrement |
key 所储存的值减去给定的减量值(decrement) 。 | |
20 | APPEND key value |
如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。 |
SADD SMEMBERS
SISMEMBER
SREM
SCARD
SRANDMEMBER
SPOP
SMOVE
3. 集合运算
差集 A-B(SDIFF)
SDIFF user:001 user:002
求集合差集,属于user:001但不属于user:002的元素
并集 A ∪ B(SUNION)
SUNION user:001 user:002
属于user:001或user:002 集合元素
交集 A ∩ B(SINTER)
SINTER user:001 user:002
属于user:001且属于user:002的元素
SINTERCARD 2 user:001 user:002 limit 4
统计2个集合元素,限制返回数量4(超出时,返回最大值),返回集合元素关系属于user:001且属于user:002的元素
4. 应用场景
抽奖小程序
用户ID,立即参与按钮 | SADD cp user:001 |
显示有参与人数 | SCARD cp |
抽奖(从set中任意选取N个中奖人) | SRANDMEMBER cp 2 随机选取两人,不移除选中人 SPOP cp 3 随机选择三个中奖人并从集合中移除 |
微信朋友圈查看同赞好友
新增点赞 | SADD pub:msgID user:001 user:002 |
取消点赞 | SREM pub:msgID user:001 |
显示所有点赞用户 | SMEMBER pub:msgID |
点赞用户统计 | SCARD pub:msgID |
判断某个好友是否点赞 | SISMEMBER pub:msgID user:003 |
内推可能认识的人
用户1 认识的人 | SADD user:001 u1 u2 u3 u4 | u1 u2 u3 u4 |
用户2 认识的人 | SADD user:002 u3 u4 u5 | u3 u4 u5 |
用户1 用户2 共同认识的人(user:001∩ user:002) | SINTER user:001 user:002 | u3 u4 |
用户1认识,用户2 不认识(user:001-user:002) | SDIFF user:001 user:002 | u1 u2 |
用户1不认识,用户2 认识(user:002-user:001) | SDIFF user:002 user:001 | u5 |
用户1认识或者用户2 认识(user:001∪ user:002) | SUNIONuser:002 user:001 | u1 u2 u3 u4 u5 |
⑤ 有序集合(sorted set ->zset)
1. 理论
Redis Zset 和Set 一样,也是String 类型元素的集合,且不允许元素重复。
不同的是每个元素都会关联一个double 类型的分数,Redis 通过分数为集合成员进行从小到大排序。
Zset 的成员是唯一的,但是分数(score)却可以重复
Zset 集合是通过哈希表实现的,添加、删除、查找的复杂度都是O(1)。集合最大成员2^32-1
k1 score1 v1 score2 v2
2. 实操
1 | ZINTERSTORE destination numkeys key [key ...] |
计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 destination 中 | |
2 | ZLEXCOUNT key min max |
在有序集合中计算指定字典区间内成员数量 | |
3 | ZRANGEBYLEX key min max [LIMIT offset count] |
通过字典区间返回有序集合的成员 | |
4 | ZREMRANGEBYLEX key min max |
移除有序集合中给定的字典区间的所有成员 | |
5 | ZREMRANGEBYRANK key start stop |
移除有序集合中给定的排名区间的所有成员 | |
6 | ZREMRANGEBYSCORE key min max |
移除有序集合中给定的分数区间的所有成员 | |
7 | ZUNIONSTORE destination numkeys key [key ...] |
计算给定的一个或多个有序集的并集,并存储在新的 key 中 | |
8 | ZSCAN key cursor [MATCH pattern] [COUNT count] |
迭代有序集合中的元素(包括元素成员和元素分值) |
ZADD
ZADD key score1 member1 [score2 member2] |
向有序集合添加一个或多个成员,或者更新已存在成员的分数 |
ZADD users 60 user:001 70 user:002 80 user:003 90 user:004 100 user:005
ZRANGE
ZRANGE key start stop [WITHSCORES] |
通过索引区间返回有序集合指定区间内的成员 |
ZRANGE users 0 -1 withscores
ZREVRANGE
ZREVRANGE key start stop [WITHSCORES] |
返回有序集中指定区间内的成员,通过索引,分数从高到低 |
ZREVRANGE users 0 -1 [withscores]
ZRANGEBYSCORE
ZRANGEBYSCORE key min max [WITHSCORES][limit offset count ] |
获取指定分数范围的元素。withscores 显示分数,limit 返回限制,'(' 作用不包含 |
ZRANGEBYSCORE users (70 90 withscores limit 0 2
ZSCORE
ZSCORE key member |
返回有序集中,成员的分数值 |
ZSCORE users user:002
ZCARD
ZCARD key |
获取有序集合的成员数 |
ZCARD users
ZREM
ZREM key member [member ...] |
移除有序集合中的一个或多个成员 |
ZREM users user:001
ZINCRBY
ZINCRBY key increment member |
有序集合中对指定成员的分数加上增量 increment |
ZINCRBY users 2 user:002
ZCOUNT
ZCOUNT key min max |
计算在有序集合中指定区间分数的成员数 |
ZCOUNT users 70 90
ZMPOP
7.0版本 | ZMPOP key min max |
从键名列表中的第一个非空排序集中弹出一个或者多个元素,每个元素都是成员分数对 |
ZMPOP 1 users min count 1
ZRANK
ZRANK key member |
返回有序集合中指定成员的索引 |
ZRANK users user:002
ZREVRANK
ZREVRANK key member |
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 |
ZREVRANK users user:003
应用场景
热销商品排序 | 商品编号1001销量 9,1002 销量15 | ZADD goods:sellsort 9 1001 15 1002 |
客户下单买了1001 x2 | ZINCRBY goods:sellsort 2 1001 | |
商品前10 | ZRANGE goods:sellsort 0 9 withscores |
🌹 以上分享 Redis 数据类型 基础篇,如有问题请指教写。
🌹🌹 如你对技术也感兴趣,欢迎交流。
🌹🌹🌹 如有需要,请👍点赞💖收藏🐱🏍分享