美文网首页
redis 常用命令

redis 常用命令

作者: 杨健kimyeung | 来源:发表于2020-08-18 20:35 被阅读0次

一、概要

中文文档

Redis 支持 5 中数据类型:string(字符串),hash(哈希),list(列表),set(集合),zset(sorted set:有序集合)。

二、字符串类型操作

1、特点

  • 自增、自减

  • 位运算

2、常用命令

set/get/decr/incr/mget/incr

3、常用应用场景

  • 利用 setbit、getbit、bitcount 统计用户签到、活跃用户(注意:bitcount的start、end参数指的是字符串的位置,不是对应位的位置)

  • 利用 INCR做原子计数器,生成唯一序列号

  • 设置 key 有效期,上操作锁或者防止短时间内频繁发送短信验证

4、实现原理

String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr、decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。

5、命令详解

set

  1. 说明

    设置键值

  2. 方法名

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n31" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">SET key value [EX seconds] [PX milliseconds] [NX|XX]</pre>

  3. 参数说明

    • EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value
  • PX millisecond :设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value

    • NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value
  • XX :只在键已经存在时,才对键进行设置操作。

  1. 栗子

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n48" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">set 1 '小红'
    set 2 '小姐姐'
    set key-with-expire-time "hello" EX 60</pre>

setnx

  1. 说明

    设置键值(key不存在则设置,否则不做操作)

  2. 语法格式

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n56" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">setnx(key,value)</pre>

  3. 参数说明

    • key:键

    • value:值

get

  1. 说明

    通过键获取值

  2. 方法

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n71" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">get(key)</pre>

setbit

  1. 说明

    对二进制表示位进行操作,将值对应的ASCII码变换成二进制后再进行索引

  2. 命令

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n79" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">setbit key offset value</pre>

  3. 参数

    • key

    • offset

      偏移量,也就是位的索引(将值对应的ASCII码变换成二进制后再进行索引)

    • value

      值只能是 1 或 0

  4. 栗子

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n94" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;"># 当前的字母是:h, 对应的ASC码是: 104, 对应的二进制数据是: 01101000

    当前的字母是:e, 对应的ASC码是: 101, 对应的二进制数据是: 01100101

    当前的字母是:l, 对应的ASC码是: 108, 对应的二进制数据是: 01101100

    当前的字母是:l, 对应的ASC码是: 108, 对应的二进制数据是: 01101100

    当前的字母是:o, 对应的ASC码是: 111, 对应的二进制数据是: 01101111


    setbit hello 21 0 # 将第三个l变成h </pre>

getset

  1. 说明

    设置新值,返回原值

  2. 方法

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n102" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">getset key value</pre>

  3. 参数

    • key

    • value

      新的值

  4. 返回值

    如果存在返回旧的值,否则返回null

  5. 举个栗子

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n117" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">getset 'key' '小红'</pre>

incr

  1. 说明

    自增mount对应的值,当mount不存在时,则创建mount=amount,否则,则自增,amount为自增数(整数)

  2. 方法

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n125" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">incr key amount=1</pre>

  3. 参数

    • key

    • amount

      当mount不存在时,则创建mount=amount 默认1,否则,则自增,amount为自增数(整数)

  4. 返回值

    返回一个整数,增加后键的值

  5. 举个栗子

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="python" cid="n140" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">incr 'count1'
    rds.incr 'count2', 2</pre>

getbit

  1. 说明

    获取值

  2. 命令

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n148" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">getbit key offset</pre>

  3. 参数

    • key

    • offset

      偏移量,也就是位的索引(将值对应的ASCII码变换成二进制后再进行索引)

  4. 栗子

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n160" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">"""
    hello
    01101000|[8]01[10]100101|01101100|01101100|01101111
    """
    getbit hello 8 # 0
    getbit hello 10 # 1</pre>

bitcount

  1. 说明

    获取Bitmaps指定范围值为1的个数

  2. 命令

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n168" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">bitcount hello</pre>

三、list操作

1、常用命令

lpush/rpush/lpop/rpop/lrange等;

2、应用场景

Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如微博的关注列表,粉丝列表等都可以用Redis的list结构来实现

3、实现原理

Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。

4、命令详解

lpush

  1. 说明

    在key对应的list中添加元素,每个新的元素都添加到列表的最左边

  2. 方法

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n184" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">lpush kye values...</pre>

  3. 参数

    • key

    • values

      要添加的值

  4. 返回值

    值的长度

  5. 举个栗子

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n199" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">lpush "li" 2 3 4 5</pre>

rpush

  1. 说明

    同lpush,但每个新的元素都添加到列表的最右边

lpushx

  1. 说明

    在key对应的list中添加元素,只有key已经存在时,值添加到列表的最左边

  2. 方法

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n212" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">lpushx key value</pre>

  3. 参数

    同上

  4. 栗子

  5. <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n219" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">lpushx li 1</pre>

lrange

  1. 说明

    分片获取元素

  2. 命令

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n227" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">lrange key start stop</pre>

  3. 参数

    • key 键

    • start 开始索引位置

    • stop 结束的索引位置

  4. 举个栗子

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n239" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">lrange li 0 -1</pre>

lpop/rpop

  1. 说明

    移除列表的左侧第一个元素

  2. 命令

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n247" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">lpop key</pre>

  3. 参数

    key 键

  4. 栗子

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n253" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">lpop li</pre>

四、hash操作

常用命令

hget/hset/hgetall等

应用场景

redis中的Hash在内存中一个键。对应一个map来存储 我们要存储一个用户信息对象数据,其中包括用户ID、用户姓名、手机,通过用户ID我们希望获取该用户的姓名或者其它信息

<pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n260" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit; color: rgb(184, 191, 198); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">user:uid:1 username,hehe
user:uid:1 phone 110
</pre>

实现原理

set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

命令详解

hget/hset/hgetall

hset

  1. 说明

    key对应的hash中设置一个键值对(不存在,则创建,否则,修改)

  2. 语法

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n273" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;"> hset key key value</pre>

  3. 参数

    • key redis的键

    • key hash的键

    • value hash对应的值

  4. 栗子

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n285" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">hset user userkey qq123456 </pre>

hset

  1. 说明

    获取key对应的hash中值

  2. 语法

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n293" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;"> hset key key </pre>

  3. 参数

    • key redis的键

    • key hash的键

  4. 栗子

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n303" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">hget user userkey </pre>

hgetall

  1. 说明

    获取hash中对应值的所有键

  2. 语法

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n311" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">hgetall key</pre>

  3. 参数

    key: 键

  4. 栗子

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n317" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">hset user phone 110

    hagetall user</pre>

其它

  • hincrby 对应的hash的值递增

  • hlen 获取元素的个数

  • hkeys 是否包含key

  • hvals 是否包含值

  • hdel 删除键支持简单的正则

五 、set相关操作

1、说明

Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择

2、常用命令

sadd/spop/smembers/sunion等

3、特点

  • 唯一性

  • 差集、并集

4、常用应用场景

  • 利用交并集操作,可以查找共同好友、好友推荐

  • 利用差集操作,可以求出新增用户([利用Redis集合(Set)统计新增用户和次日留存率)

  • 利用唯一性,可以统计网站UV

5、命令详解

sadd

  1. 说明

    添加集合

  2. 语法格式

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n358" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">sadd key value.. </pre>

  3. 参数说明

    • key:键

    • value:值

  4. 举个栗子

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n368" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">sadd numbers 1 2 3 1 1
    sadd k1 "hello" "niuniu"
    sadd k2 "jiaojiao" "hello" "world"</pre>

sdiff

  1. 说明

    返回给定键所有集合的差集

  2. 语法格式

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n376" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">SDIFF key [key ...]</pre>

  3. 参数说明

    • key:键

    • key:键

  4. 举个栗子 ​

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n386" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">sadd k1 "hello" "niuniu"
    sadd k2 "jiaojiao" "hello" "world"
    SDIFF k1 k2</pre>

smembers

  1. 说明

    获取集合中的所有的成员。 不存在的集合 key 被视为空集合

  2. 语法格式

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n394" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">SMEMBERS KEY VALUE </pre>

  3. 参数说明

    key:键

    value:值

  4. 栗子

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n401" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">sadd k1 "hello"
    sadd k1 "niuniu"
    SMEMBERS k1</pre>

spop

  1. 说明

    移除key对应集合中最右边(即最后面)的元素

  2. 语法格式

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n409" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">spop key </pre>

  3. 参数说明

    • key:键
  4. 举个栗子

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n417" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">spop k1</pre>

sunion

  1. 说明

    令返回给定集合的并集。不存在的集合 key 被视为空集

  2. 语法格式

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n425" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">SUNION KEY KEY1..KEYN</pre>

  3. 参数说明

    • key:集合的键
  4. 栗子

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n433" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">sadd k1 "hello"
    sadd k1 "niuniu"
    sadd k2 "jiaojiao"
    sadd k2 "hello"
    sadd k2 "world"

    SUNION k1 k2</pre>

六、有序集合相关操作

1、常用命令

zadd/zrange/zrem/zcard等

2、特点

  • 有序,自由实现堆、栈的功能

  • 轮询监控

  • 索引取区间

3、常用应用场景

  • 利用 LTRIM key start stop获取网站最后5个访问用户、最新消息排行榜

  • 利用PUSH POP当成队列,进行多任务处理

  • 利用BRPOPLPUSH key1 key1 time,使用相同的key作为BRPOPLPUSH的两个参数,无限循环整个列表,比如:一个服务器监控程序,并行检查一组网站,确保网站的可访问性

  • 利用BRPOP key time进行事件提醒,在新元素到达时立即处理,新元素未到达一直阻塞住,避免轮询占用资源

4、实现原理

set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

5、命令详解

zincrby

  1. 说明

    命令对有序集合中指定成员的分数加上增量 increment

    可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。

    当 key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。

    当 key 不是有序集类型时,返回一个错误。

    分数值可以是整数值或双精度浮点数。

  2. 语法格式

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n469" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">zincrby key increment member</pre>

  3. 参数说明

    • key:键

    • increment:值

    • amount:分数自增值

  4. 举个栗子 ​

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n481" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">ZINCRBY hot 1 "华为mate30发布会"
    ZINCRBY hot 1 "华为mate30发布会"
    ZINCRBY hot 1 "华为mate30发布会"
    ZINCRBY hot 1000 "华为mate30发布会"
    ZINCRBY hot 1 "杨紫荷叶边半裙"
    ZINCRBY hot 1 "杨紫荷叶边半裙"
    ZINCRBY hot 1 "杨紫荷叶边半裙"

    按分数升序

    zrange 'hot' 0 -1

    按分数降序

    zrevrange 'hot' 0 -1
    </pre>

zadd

  1. 说明

    在name对应的有序集合中添加元素,分数越小,越靠前

  2. 语法格式

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n489" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;"> zadd key_name score value.. score value</pre>

  3. 参数说明

    • key_name:键

    • score 分数

    • value

  4. 举个栗子

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n501" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">zadd hot 1 "华为mate发布会" 2 "斗鱼三骚"</pre>

zcard

  1. 说明

    获取key对应的有序集合的元素个数

  2. 语法格式

    <pre spellcheck="false" class="md-fences mock-cm md-end-block" lang="" cid="n509" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: pre-wrap; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">zcard key</pre>

  3. 参数说明

    key:键

  4. 举个栗子

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n515" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">zcard hot</pre>

zcount

  1. 说明

    获取key对应的有序集合中,min<=分数<=max中的元素个数

  2. 语法格式

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n523" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">zcount key,min,max </pre>

  3. 参数说明

    • name:键

    • min:小值(分数)

    • max:大值(分数)

  4. 举个栗子 ​

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n535" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">zcount hot 1 9 </pre>

zrange

  1. 说明

    获取name对应的有序集合中,start<=下标<=end的所有数据。

  2. 语法格式

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n543" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">ZRANGE key start stop [WITHSCORES]</pre>

  3. 参数说明

    • name:键

    • start:起始位置

    • end:结束位置

    • withscores:是否获取分数,默认False

  4. 举个栗子 ​

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n557" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">zrange 'hot' 0 -1 WITHSCORES</pre>

zrem

  1. 说明

    移除有序集中的一个或多个成员,不存在的成员将被忽略

  2. 语法格式

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n565" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">zrem key member</pre>

  3. 参数说明

    • name:键

    • member

  4. 举个栗子 ​

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n575" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit;">zrem hot "华为mate发布会"</pre>

相关文章

  • docker安装mongodb和redis数据库

    mongodb安装 mongodb常用命令 redis安装 redis常用命令

  • redis汇总

    redis优化 redis 操作相关 安装Redis redis常用命令

  • Redis-数据结构&常用指令

    零、本文纲要 一、Redis数据结构二、Redis常用命令三、String类型&常用命令四、Hash类型&常用命令...

  • Redis 命令

    redis常用命令

  • Redis入门

    redis杂项知识 key的常用命令 List常用命令

  • Docker-redis安装设置

    常用命令 参数说明 /data存储redis数据 查看redis版本号 redis参数匹配 Redis默认不是以守...

  • redis

    redis 1.redis几种数据结构,常用命令,事务 2.redis安装 3.redis和springboot集...

  • Redis 常用命令

    本文介绍 Redis 的常用命令。 目录 启动 Redis 查询 Redis 是否启动成功 查看主机的6379端口...

  • Redis基本命令(数据类型)

    Redis命令大全 Redis命令大全 Key常用命令 keys * exists key(是否存在) move ...

  • centos7.3 安装redis

    安装redis 一路默认为y即可 常用命令 启动 systemctl start redis...

网友评论

      本文标题:redis 常用命令

      本文链接:https://www.haomeiwen.com/subject/vyzkjktx.html