Redis中常用命令
在初始Redis中了解了Redis8大数据结构的特征、常用情形、底层编码,本节将介绍对应的常用命令。
Redis通用命令
通用命令是指部分数据类型均可使用的命令,常见的有:
- KEYS:查看符合模板的所有key
- DEL:删除一个指定key
- EXISTS:判断key是否存在
- EXPIRE:给一个key设置有效期,有效期到期后该key会被自动删除
- TTL:查看一个key剩余有效时间
- help [command]可以查看一个命令的具体用法
五大基本数据类型
String
String(字符串) 是 Redis 中最简单同时也是最常用的一个数据类型。
常见命令:
命令 | 介绍 |
---|---|
SET key value | 设置指定key的值 |
SETNX key value | 只有在key不存在时设置指定key的值 |
GET key | 获取指定key的值 |
MSET key1 value1 key2 value2… | 设置一个或多个指定 key的值 |
MGET key1 key2 … | 获取一个或多个指定 key 的值 |
STELEN key | 返回key所存储的字符串值的长度 |
INCR key | 将key中存储的数字值+1 |
DECR key | 将key中存储的数字值-1 |
EXISTS key | 判断指定 key 是否存在 |
DEL key | 删除指定的 key |
EXPIRE key seconds | 给指定 key 设置过期时间 |
List
Redis 中的 List 其实就是链表数据结构的实现。Redis 的 List 的实现为一个 双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销。
常见命令:
命令 | 介绍 |
---|---|
RPUSH key value1 value2 … | 在指定列表的尾部(右边)添加一个或多个元素 |
LPUSH key value1 value2 … | 在指定列表的头部(左边)添加一个或多个元素 |
LSET key index value | 将指定列表索引 index 位置的值设置为 valu |
MSET key1 value1 key2 value2… | 设置一个或多个指定 key的值 |
LPOP key | 移除并获取指定列表的第一个元素(最左边) |
RPOP key | 移除并获取指定列表的最后一个元素(最右边) |
LLEN key | 获取列表元素数量 |
LRANGE key start end | 获取列表 start 和 end 之间 的元素 |
更多 Redis List 命令以及详细使用指南,请查看 Redis 官网对应的介绍:Redis List 。
通过 RPUSH/LPOP 或者 LPUSH/RPOP实现队列:
> RPUSH myList value1
(integer) 1
> RPUSH myList value2 value3
(integer) 3
> LPOP myList
"value1"
> LRANGE myList 0 1
1) "value2"
2) "value3"
> LRANGE myList 0 -1
1) "value2"
2) "value3"
Hash
Redis 中的 Hash 也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。Hash是一个 String 类型的 field-value(键值对) 的映射表,特别适合用于存储对象,后续操作的时候,你可以直接修改这个对象中的某些字段的值。
常见命令:
命令 | 介绍 |
---|---|
HSET key field value | 设置指定哈希表中指定字段的值 |
HSETNX key field value | 只有指定字段不存在时设置指定字段的值 |
HMSET key field1 value1 field2 value2 … | 同时将一个或多个 field-value (域-值)对设置到指定哈希表中 |
HGET key field | 获取指定哈希表中指定字段的值 |
HMGET key field1 field2 … | 获取指定哈希表中一个或者多个指定字段的值 |
HGETALL key | 获取指定哈希表中所有的键值对 |
HEXISTS key field | 查看指定哈希表中指定的字段是否存在 |
HDEL key field1 field2 … | 删除一个或多个哈希表字段 |
HLEN key | 获取指定哈希表中字段的数量 |
HINCRBY key field increment | 对指定哈希中的指定字段做运算操作(正数为加,负数为减) |
Set
Redis 中的 Set 类型是一种无序集合,集合中的元素没有先后顺序但都唯一,有点类似于 Java 中的 HashSet 。当你需要存储一个列表数据,又不希望出现重复数据时,Set 是一个很好的选择,并且 Set 提供了判断某个元素是否在一个 Set 集合内的重要接口,这个也是 List 所不能提供的。
常见命令:
命令 | 介绍 |
---|---|
SADD key member1 member2 … | 向指定集合添加一个或多个元素 |
SMEMBERS key | 获取指定集合中的所有元素 |
SCARD key | 获取指定集合的元素数量 |
SREM key member1 member2 … | 移除set中的指定元素 |
SISMEMBER key member | 判断指定元素是否在指定集合中 |
SINTER key1 key2 | 获取给定所有集合的交集 |
SINTERSTORE destination key1 key2 … | 将给定所有集合的交集存储在 destination 中 |
SUNION key1 key2 … | 获取给定所有集合的并集 |
SUNIONSTORE destination key1 key2 … | 将给定所有集合的并集存储在 destination 中 |
SDIFF key1 key2 … | 获取给定所有集合的差集 |
SDIFFSTORE destination key1 key2 … | 将给定所有集合的差集存储在 destination 中 |
SPOP key count | 随机移除并获取指定集合中一个或多个元素 |
SRANDMEMBER key count | 随机获取指定集合中指定数量的元素 |
Sorted Set
Sorted Set 类似于 Set,但和 Set 相比,Sorted Set 增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,还可以通过 score 的范围来获取元素的列表。有点像是 Java 中 HashMap 和 TreeSet 的结合体。
常见命令:
命令 | 介绍 |
---|---|
ZADD key member1 member2 … | 向指定集合添加一个或多个元素 |
ZSCORE key member | 获取指定有序集合中指定元素的 score 值 |
ZCARD key | 获取指定集合的元素数量 |
ZREM key member1 member2 … | 移除set中的指定元素 |
ZINTERSTORE destination numkeys key1 key2 … | 将给定所有有序集合的交集存储在 destination 中,对相同元素对应的 score 值进行 SUM 聚合操作,numkeys 为集合数量 |
ZUNIONSTORE destination numkeys key1 key2 … | 求并集,其它和 ZINTERSTORE 类似 |
ZDIFFSTORE destination numkeys key1 key2 … | 求差集,其它和 ZINTERSTORE 类似 |
ZRANGE key start end | 获取指定有序集合 start 和 end 之间的元素(score 从低到高) |
ZREVRANGE key start end. | 获取指定有序集合 start 和 end 之间的元素(score 从高到低) |
ZREVRANK key member | 获取指定有序集合中指定元素的排名(score 从大到小排序) |
3 种特殊的数据类型
Bitmap
Bitmap 存储的是连续的二进制数字(0 和 1),通过 Bitmap, 只需要一个 bit 位来表示某个元素对应的值或者状态,key 就是对应元素本身 。我们知道 8 个 bit 可以组成一个 byte,所以 Bitmap 本身会极大的节省储存空间。
你可以将 Bitmap 看作是一个存储二进制数字(0 和 1)的数组,数组中每个元素的下标叫做 offset(偏移量)。
常见命令:
命令 | 介绍 |
---|---|
SETBIT key offset value | 设置指定 offset 位置的值 |
GETBIT key offset | 获取指定 offset 位置的值 |
BITCOUNT key start end | 获取 start 和 end 之前值为 1 的元素个数 |
BITOP operation destkey key1 key2 … | 对一个或多个 Bitmap 进行运算,可用operation (运算符)有 AND, OR, XOR 以及 NOT |
HyperLogLog
HyperLogLog 是一种有名的基数计数概率算法 ,基于 LogLog Counting(LLC)优化改进得来,并不是 Redis 特有的,Redis 只是实现了这个算法并提供了一些开箱即用的 API。
Redis 提供的 HyperLogLog 占用空间非常非常小,只需要 12k 的空间就能存储接近2^64个不同元素。这是真的厉害,这就是数学的魅力么!并且,Redis 对 HyperLogLog 的存储结构做了优化,采用两种方式计数:
- 稀疏矩阵:计数较少的时候,占用空间很小。
- 稠密矩阵:计数达到某个阈值的时候,占用 12k 的空间。
常见命令:
命令 | 介绍 |
---|---|
PFADD key element1 element2 … | 添加一个或多个元素到 HyperLogLog 中 |
PFCOUNT key1 key2 | 获取一个或者多个 HyperLogLog 的唯一计数。 |
PFMERGE destkey sourcekey1 sourcekey2 … | 将多个 HyperLogLog 合并到 destkey 中,destkey 会结合多个源,算出对应的唯一计数。 |
Geospatial
Geospatial index(地理空间索引,简称 GEO) 主要用于存储地理位置信息,基于 Sorted Set 实现。
通过 GEO 我们可以轻松实现两个位置距离的计算、获取指定位置附近的元素等功能。
常见命令:
命令 | 介绍 |
---|---|
GEOADD key longitude1 latitude1 member1 … | 添加一个或多个元素对应的经纬度信息到 GEO 中 |
GEOPOS key member1 member2 … | 返回给定元素的经纬度信息 |
GEODIST key member1 member2 M/KM/FT/MI | 返回两个给定元素之间的距离 |
GEORADIUS key longitude latitude radius distance | 获取指定位置附近 distance 范围内的其他元素,支持 ASC(由近到远)、DESC(由远到近)、Count(数量) 等参数 |
GEORADIUSBYMEMBER key member radius distance | 类似于 GEORADIUS 命令,只是参照的中心点是 GEO 中的元素 |
参考资料
https://mp.weixin.qq.com/s/tjf3nBq0GsTh564NTVUq3g