Redis 学习笔记(二)-- Redis 命令

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) 命令

官网文档

序号命令及描述
1DEL key 该命令用于在 key 存在是删除 key。
3EXISTS key 检查给定 key 是否存在。
9MOVE key db 将当前数据库的 key 移动到给定的数据库 db 当中。
2DUMP key 序列化给定 key ,并返回被序列化的值。
16TYPE key 返回 key 所储存的值的类型。
4EXPIRE key seconds 为给定 key 设置过期时间。
8KEYS pattern 查找所有符合给定模式( pattern)的 key 。
12TTL key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
11PTTL key 以毫秒为单位返回 key 的剩余的过期时间。
10PERSIST key 移除 key 的过期时间,key 将持久保持。
14RENAME key newkey 修改 key 的名称
15RENAMENX key newkey 仅当 newkey 不存在时,将 key 改名为 newkey 。
13RANDOMKEY 从当前数据库中随机返回一个 key 。
6PEXPIRE key milliseconds 设置 key 的过期时间亿以毫秒计。
7PEXPIREAT key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
5EXPIREAT 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 命令订阅一个或多个符合给定模式的频道。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值