redis 命令
Redis 命令中文: https://www.redis.net.cn/order/
Redis 命令英文:https://redis.io/commands/ (可以使用搜索)
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
1、Redis 键(key) 命令
官网文档
序号 | 命令及描述 |
---|---|
1 | DEL key 该命令用于在 key 存在是删除 key。 |
3 | EXISTS key 检查给定 key 是否存在。 |
9 | MOVE key db 将当前数据库的 key 移动到给定的数据库 db 当中。 |
2 | DUMP key 序列化给定 key ,并返回被序列化的值。 |
16 | TYPE key 返回 key 所储存的值的类型。 |
4 | EXPIRE key seconds 为给定 key 设置过期时间。 |
8 | KEYS pattern 查找所有符合给定模式( pattern)的 key 。 |
12 | TTL key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。 |
11 | PTTL key 以毫秒为单位返回 key 的剩余的过期时间。 |
10 | PERSIST key 移除 key 的过期时间,key 将持久保持。 |
14 | RENAME key newkey 修改 key 的名称 |
15 | RENAMENX key newkey 仅当 newkey 不存在时,将 key 改名为 newkey 。 |
13 | RANDOMKEY 从当前数据库中随机返回一个 key 。 |
6 | PEXPIRE key milliseconds 设置 key 的过期时间亿以毫秒计。 |
7 | PEXPIREAT key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计 |
5 | EXPIREAT key timestamp EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。 |
2、五大数据类型命令
2.1、Redis 字符串(String) 命令
命令 | 描述 |
---|---|
Redis SET 命令 | 设置指定 key 的值 |
Redis Get 命令 | 获取指定 key 的值。 |
Redis Append 命令 | 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。 |
Redis Strlen 命令 | 返回 key 所储存的字符串值的长度。 |
Redis Incr 命令 | 将 key 中储存的数字值增一。 |
Redis Decr 命令 | 将 key 中储存的数字值减一。 |
Redis Incrby 命令 | 将 key 所储存的值加上给定的增量值(increment) 。 |
Redis Decrby 命令 | key 所储存的值减去给定的减量值(decrement) 。 |
Redis Incrbyfloat 命令 | 将 key 所储存的值加上给定的浮点增量值(increment) 。 |
Redis Getrange 命令 | 返回 key 中字符串值的子字符 |
Redis Setrange 命令 | 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。 |
Redis Setex 命令 | 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。 |
Redis Setnx 命令 | (SET if Not eXists)只有在 key 不存在时设置 key 的值。(分布式锁常用) |
Redis Mset 命令 | 同时设置一个或多个 key-value 对。 |
Redis Mget 命令 | 获取所有(一个或多个)给定 key 的值。 |
Redis Msetnx 命令 | 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。 |
Redis Setbit 命令 | 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。 |
Redis Getbit 命令 | 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。 |
Redis Psetex 命令 | 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。 |
Redis Getset 命令 | 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。 |
value除了是字符(String)还可以是数字:计数器、统计多单位数量、对象缓存储存。
2.2、Redis 列表(List) 命令
List可以设计成:栈、队列、阻塞队列。List实际是一个链表。
命令 | 描述 |
---|---|
Redis Lpush 命令 | 命令将一个或多个值插入到列表头部。 |
Redis Lpop 命令 | 移出并获取列表的第一个元素 |
Redis Rpush 命令 | 命令用于将一个或多个值插入到列表的尾部(最右边) |
Redis Rpop 命令 | 移除并获取列表最后一个元素 |
Redis Llen 命令 | 获取列表长度 |
Redis Lindex 命令 | 通过索引获取列表中的元素 |
Redis Lrange 命令 | 获取列表指定范围内的元素 |
Redis Lrem 命令 | 移除列表元素 (LREM KEY_NAME COUNT VALUE:根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。) |
Redis Ltrim 命令 | 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 |
Redis Lset 命令 | 通过索引设置列表元素的值 (LSET KEY_NAME INDEX VALUE:当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。) |
Redis Linsert 命令 | 在列表的元素前或者后插入元素 |
Redis Lpushx 命令 | 将一个或多个值插入到已存在的列表头部 |
Redis Rpushx 命令 | 为已存在的列表添加值 |
Redis Rpoplpush 命令 | 移除列表的最后一个元素,并将该元素添加到另一个列表并返回 |
Redis Blpop 命令 | 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
Redis Brpop 命令 | 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
Redis Brpoplpush 命令 | 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
2.3、Redis 集合(Set) 命令
set中的值是不能重复的。
命令 | 描述 |
---|---|
Redis Sadd 命令 | 向集合添加一个或多个成员 |
Redis Sismember 命令 | 判断 member 元素是否是集合 key 的成员 |
Redis Smembers 命令 | 返回集合中的所有成员 |
Redis Scard 命令 | 获取集合的成员数 |
Redis Srem 命令 | 移除集合中一个或多个成员 |
Redis Srandmember 命令 | 返回集合中一个或多个随机数 |
Redis Spop 命令 | 移除并返回集合中的一个随机元素 |
Redis Smove 命令 | 将 member 元素从 source 集合移动到 destination 集合 |
Redis Sdiff 命令 | 返回给定所有集合的差集 |
Redis Sdiffstore 命令 | 返回给定所有集合的差集并存储在 destination 中 |
Redis Sinter 命令 | 返回给定所有集合的交集 |
Redis Sunion 命令 | 返回所有给定集合的并集 |
Redis Sscan 命令 | 迭代集合中的元素 |
Redis Sinterstore 命令 | 返回给定所有集合的交集并存储在 destination 中 |
Redis Sunionstore 命令 | 所有给定集合的并集存储在 destination 集合中 |
2.4、Redis 哈希(Hash) 命令
Map集合,key-Map集合。存储经常变动的数据。
命令 | 描述 |
---|---|
Redis Hset 命令 | 将哈希表 key 中的字段 field 的值设为 value 。 |
Redis Hget 命令 | 获取存储在哈希表中指定字段的值 |
Redis Hmset 命令 | 同时将多个 field-value (域-值)对设置到哈希表 key 中。 |
Redis Hmget 命令 | 获取所有给定字段的值 |
Redis Hgetall 命令 | 获取在哈希表中指定 key 的所有字段和值 |
Redis Hexists 命令 | 查看哈希表 key 中,指定的字段是否存在。 |
Redis Hlen 命令 | 获取哈希表中字段的数量 |
Redis Hdel 命令 | 删除一个或多个哈希表字段 |
Redis Hkeys 命令 | 获取所有哈希表中的字段 |
Redis Hvals 命令 | 获取哈希表中所有值 |
Redis Hsetnx 命令 | 只有在字段 field 不存在时,设置哈希表字段的值。 |
Redis Hincrby 命令 | 为哈希表 key 中的指定字段的整数值加上增量 increment 。 |
Redis Hincrbyfloat 命令 | 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。 |
2.5、Redis 有序集合(sorted set) 命令
命令 | 描述 |
---|---|
Redis Zadd 命令 | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 |
Redis Zrem 命令 | 移除有序集合中的一个或多个成员 |
Redis Zcard 命令 | 获取有序集合的成员数 |
Redis Zscore 命令 | 返回有序集中,成员的分数值 |
Redis Zscan 命令 | 迭代有序集合中的元素(包括元素成员和元素分值) |
Redis Zcount 命令 | 计算在有序集合中指定区间分数的成员数 |
Redis Zlexcount 命令 | 在有序集合中计算指定字典区间内成员数量 |
Redis Zrange 命令 | 通过索引区间返回有序集合成指定区间内的成员 |
Redis Zrevrange 命令 | 返回有序集中指定区间内的成员,通过索引,分数从高到底 |
Redis Zrangebyscore 命令 | 通过分数返回有序集合指定区间内的成员。 |
Redis Zrevrangebyscore 命令 | 返回有序集中指定分数区间内的成员,分数从高到低排序 |
Redis Zrangebylex 命令 | 通过字典区间返回有序集合的成员 |
Redis Zrank 命令 | 返回有序集合中指定成员的索引 |
Redis Zrevrank 命令 | 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 |
Redis Zremrangebylex 命令 | 移除有序集合中给定的字典区间的所有成员 |
Redis Zremrangebyrank 命令 | 移除有序集合中给定的排名区间的所有成员 |
Redis Zremrangebyscore 命令 | 移除有序集合中给定的分数区间的所有成员 |
Redis Zunionstore 命令 | 计算给定的一个或多个有序集的并集,并存储在新的 key 中 |
Redis Zinterstore 命令 | 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中 |
Redis Zincrby 命令 | 有序集合中对指定成员的分数加上增量 increment |
3、三种特殊类型数据
3.1、Redis 地理位置(geo) 命令
城市经纬度查询:城市经纬度查询-国内城市经度纬度在线查询工具 (jsons.cn)
底层是使用有序集合(sorted set),所以可以使用有序集合(sorted set)命令来操作地理位置。
命令 | 描述 |
---|---|
Redis GEOADD 命令 | 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中 |
Redis GEOPOS 命令 | 从key里返回所有给定位置元素的位置(经度和纬度) |
Redis GEORADIUS 命令 | 以给定的经纬度为中心, 找出某一半径内的元素 |
Redis GEORADIUSBYMEMBER 命令 | 找出位于指定范围内的元素,中心点是由给定的位置元素决定 |
Redis GEODIST 命令 | 返回两个给定位置之间的距离 |
Redis GEOHASH 命令 | 返回一个或多个位置元素的 Geohash 表示 |
GEOADD
具体的限制,由EPSG:900913 / EPSG:3785 / OSGEO:41001 规定如下:
- 有效的经度从-180度到180度。
- 有效的纬度从-85.05112878度到85.05112878度。
当坐标位置超出上述指定范围时,该命令将会返回一个错误。
GEODIST
如果两个位置之间的其中一个不存在, 那么命令返回空值。
指定单位的参数 unit 必须是以下单位的其中一个:
- m 表示单位为米。
- km 表示单位为千米。
- mi 表示单位为英里。
- ft 表示单位为英尺。
如果用户没有显式地指定单位参数, 那么 GEODIST
默认使用米作为单位。
GEODIST
命令在计算距离时会假设地球为完美的球形, 在极限情况下, 这一假设最大会造成 0.5% 的误差。
GEORADIUS
在给定以下可选项时, 命令会返回额外的信息:
WITHDIST
: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。WITHCOORD
: 将位置元素的经度和维度也一并返回。WITHHASH
: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
命令默认返回未排序的位置元素。 通过以下两个参数, 用户可以指定被返回位置元素的排序方式:
ASC
: 根据中心的位置, 按照从近到远的方式返回位置元素。DESC
: 根据中心的位置, 按照从远到近的方式返回位置元素。
在默认情况下, GEORADIUS 命令会返回所有匹配的位置元素。 虽然用户可以使用 COUNT <count>
选项去获取前 N 个匹配元素, 但是因为命令在内部可能会需要对所有被匹配的元素进行处理, 所以在对一个非常大的区域进行搜索时, 即使只使用 COUNT
选项去获取少量元素, 命令的执行速度也可能会非常慢。 但是从另一方面来说, 使用 COUNT
选项去减少需要返回的元素数量, 对于减少带宽来说仍然是非常有用的。
测试
127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing
(integer) 1
127.0.0.1:6379> geoadd china:city 121.47 31.22 shanghai
(integer) 1
127.0.0.1:6379> geoadd china:city 114.08 22.54 shenzhen
(integer) 1
127.0.0.1:6379> geoadd china:city 113.28 23.12 guangzhou
(integer) 1
127.0.0.1:6379> geoadd china:city 120.15 30.28 hangzhou
(integer) 1
127.0.0.1:6379> geopos china:city
(empty array)
127.0.0.1:6379> geopos china:city beijign
1) (nil)
127.0.0.1:6379> geopos china:city beijing
1) 1) "116.39999896287918091"
2) "39.90000009167092543"
127.0.0.1:6379> geopos china:city beijing shanghai
1) 1) "116.39999896287918091"
2) "39.90000009167092543"
2) 1) "121.47000163793563843"
2) "31.21999956478423854"
127.0.0.1:6379> geodist china:city beijing shanghai
"1068394.9294"
127.0.0.1:6379> geodist china:city beijing shenzhen km
"1943.2550"
3.2、Redis HyperLogLog 命令
基数(cardinality,也译作势),是指一个集合中不重复元素的个数。这里的集合和我们学过的严格定义的集合不同,允许存在重复元素,被称作multi-set,如给定这样的一个集合{1,2,3,1,2},它有5个元素, 基数是3。
基数计数(cardinality counting),则是指计算一个集合的基数,意即count-discint。
基数计算(cardinality counting)指的是统计一批数据中的不重复元素的个数。
例如计算网站的访问uv(unique visitor 网站独立访客)。传统的实现基数计数的方式就是通过Set,直接保存相应的key,最后Set集合的size就得到集合的基数。但是,这种方法的空间复杂度很高,在面对大数据的场景下做这样的统计代价很高。
命令 | 描述 |
---|---|
Redis Pfadd 命令 | 添加指定元素到 HyperLogLog 中。 |
Redis Pfcount 命令 | 返回给定 HyperLogLog 的基数估算值。 |
Redis Pgmerge 命令 | 将多个 HyperLogLog 合并为一个 HyperLogLog |
统计UV
- 如果允许容错,则使用 HyperLogLog。
- 如果不允许容错,则使用 Set集合或自定义数据类型。
3.3、Redis 位图 (Bitmap) 命令
命令 | 描述 |
---|---|
SETBIT key offset value | 设置或清除存储在 key 的字符串值的偏移量位。该位根据值设置或清除,值可以是 0 或 1。 |
GETBIT key offset | 返回存储在 key 的字符串值中偏移量的位值。 |
[BITCOUNT key start end [ BYTE | BIT ]] | 统计 key 中设置的位数。 |
BITOP operation destkey key [key …] | |
[BITPOS key bit [ start end [BYTE|BIT]] | |
BITFIELD | |
BITFIELD_RO |
使用 Bitmap 来记录周一到周日的打卡记录
周一:1 、周二:0、周三:0 …
127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 0
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 0
(integer) 0
127.0.0.1:6379> setbit sign 5 1
(integer) 0
127.0.0.1:6379> setbit sign 6 0
(integer) 0
查看某一天是否有打卡:
127.0.0.1:6379> getbit sign 3
(integer) 1
127.0.0.1:6379> getbit sign 4
(integer) 0
统计这一周的打卡次数:
127.0.0.1:6379> bitcount sign
(integer) 3
4、事务
4.1、Redis 事务 命令
命令 | 描述 |
---|---|
Redis Multi 命令 | 标记一个事务块的开始。 |
Redis Exec 命令 | 执行所有事务块内的命令。 |
Redis Unwatch 命令 | 取消 WATCH 命令对所有 key 的监视。 |
Redis Discard 命令 | 取消事务,放弃执行事务块内的所有命令。 |
Redis Watch 命令 | 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。 |
5、其他
5.1、Redis 发布订阅 命令
命令 | 描述 |
---|---|
Redis Unsubscribe 命令 | 指退订给定的频道。 |
Redis Subscribe 命令 | 订阅给定的一个或多个频道的信息。 |
Redis Pubsub 命令 | 查看订阅与发布系统状态。 |
Redis Punsubscribe 命令 | 退订所有给定模式的频道。 |
Redis Publish 命令 | 将信息发送到指定的频道。 |
Redis Psubscribe 命令 | 订阅一个或多个符合给定模式的频道。 |