Redis命令学习

ECS配置redis客户端连接远程服务端

首先保证ECS与redis网络环境能互通,用ping命令测试和检查服务端6379端口是否放通,白名单安全组都需要检查。

一、从redis官网下载redis-cli的压缩包

wget http://download.redis.io/redis-stable.tar.gz

解压下载下来的压缩包

tar xvzf redis-stable.tar.gz

进入redis-stable目录

cd redis-stable

安装

make

将redis-cli拷贝到/usr/local/bin/下,让redis-cli指令可以在任意目录下直接使用

二、登录redis

三种登录方式,第一种直接登录后输入密码,第二种直接输入密码登录,第三种用自己创建的用户登录

1. redis-cli -h r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com      auth yourpassword
2. redis-cli -h r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com -a 13265121289Zw      
--这里提示一下,我们采取此方式登录会出现waring的告警,为了有更好的体验建议还是用1和3的交互式auth登录方式     
3.  redis-cli -h r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com  auth zici2008zw:13265121289Zw                                                                                                                           --我在服务端创建了一个zici2008zw的用户,指定用户密码登录 

根据以上步骤,已经配置好redis登录方式啦!!!

关于redis-cli 命令的相关参数:

在这里插入图片描述
在这里插入图片描述

获取redis中所有的key,可使用

r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> keys *
1. "four"
2. "one"
3. "three"

获取指定元素的key,可使用指定元素

r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> keys f
1. "four"

测试 ECS --> Redis 实例的连接,连接到 15 库.

redis-cli -h r-2ze1daaf91b9d6f4.redis.rds.aliyuncs.com -p 6379 -a Passwd123 -n 15

测试 ECS --> Redis 实例的延迟.

redis-cli -h r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com -p 6379 -a 13265121289Zw --latency-history -i 5

测试 ECS --> Redis 实例的连接.

redis-cli -h r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com -p 6379 -a 13265121289Zw -r 3 ping

查询包含 f 的 key

redis-cli -h r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com -p 6379 -a 13265121289Zw --scan --pattern '*f*'

尝试搜寻下大 key.

redis-cli -h r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com -p 6379 -a 13265121289Zw --bigkeys

查看当前实例的统计信息.

redis-cli -h r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com -p 6379 -a 13265121289Zw --stat

通过 Pipleline 传输命令.

echo -en '*3\r\n$3\r\nset\r\n$4\r\nname\r\n$8\r\nzhangsan\r\n' | redis-cli -h r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com -p 6379 -a 13265121289Zw --pipe

上述这段标红解释一下:
(1)这串字符,就是键值key:value在redis的rdb文件里存储的格式。
(2)以redis protoc格式数据,将键值name:chenjing保存到redis里,如果原来就已存在对应的key,即会覆盖。
(3)’*3\r\n$3\r\nset\r\n$4\r\nname\r\n$8\r\nzhangsan\r\n’ 这一段的意思主要是想向redis创建一个key(name):value(zhangsan)的键值(set name zhangsan)。
*3表示一共3个参数;
\r\n表示空格;
$3表示参数的字节数,例如set是3个字母,set命令前先标记$3,zhangsan是8个字符标记$8;

通过 Pipleline读取AOF日志进行数据迁移.

redis-cli -h r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com -p 6379 -a 13265121289Zw --pipe < appendonly.aof

从标准输入读取数据作为最后一个参数

echo -n 'hello' | redis-cli -h r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com -p 6379 -a 13265121289Zw  get

更多命令可参考:
https://www.cnblogs.com/cjing2011/p/3000576bb44f506af4065eb558b7e343.html
https://segmentfault.com/a/1190000022162774

redis服务端命令

设置当前连接的名称

r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> client list
id=89594 addr=172.17.253.228:33368 fd=34 name= age=5 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events= cmd=CLIENT
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> client setname 'AES-QUEGE'
OK
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> client getname
"AES-QUEGE"
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> client list
id=89594 addr=172.17.253.228:33368 fd=34 name=AES-QUEGE age=85 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events= cmd=CLIENT

终止一个会话

r-2ze1daaf91b9d6f4.redis.rds.aliyuncs.com:6379> client list
id=156638 addr=10.44.155.194:52524 fd=5 name=jacky age=322 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0
id=156711 addr=10.44.155.194:52612 fd=8 name= age=99 idle=93 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0
id=156742 addr=10.44.155.194:52662 fd=11 name= age=9 idle=9 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0
r-2ze1daaf91b9d6f4.redis.rds.aliyuncs.com:6379> client kill 10.44.155.194:52612
OK
r-2ze1daaf91b9d6f4.redis.rds.aliyuncs.com:6379> client kill addr 10.44.155.194:52662
(integer) 1
r-2ze1daaf91b9d6f4.redis.rds.aliyuncs.com:6379> client list
id=156638 addr=10.44.155.194:52524 fd=5 name=jacky age=369 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0

查看 slow 相关的参数.

r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> config get slow* --也可单独获取 以下参数(config get slowlog-log-slower-than)
1. "slowlog-log-slower-than"     ---目前redis 记录所有查询时间大于等于 20000 微秒的查询
2. "20000"
3. "slowlog-max-len"             ---目前redis最多保存条日志,目前是1024条
4. "1024"

关于slow log详解可参考:https://www.cnblogs.com/onmyway20xx/p/5486604.html

查看当前数据库的 Key 数量.

[root@zengwen  ~]#  redis-cli -h r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com -p 6379 -a 13265121289Zw 
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> select 10
OK
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379[10]> dbsize
(integer) 0
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379[10]> select 1
OK
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379[1]> dbsize
(integer) 0
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379[1]>

查看当前实例的 db 子节点数量,其中nodecount的返回值为节点的数目

r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379[1]> info cluster
Cluster
cluster_enabled:0
databases:256
nodecount:8

查看 Redis 实例接收的命令.

monitor

查看当前实例的慢日志.

r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> slowlog get
(empty array)
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> slowlog len
(integer) 0

集群实例查看 key 所在的集群子节点的index和slot

r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> info key user:u01
slot:13584 node_index:6r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> 

集群实例查看指定 db 子节点的统计信息.

r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> iinfo 7 cpu
"# CPU\r\nused_cpu_sys:126.79\r\nused_cpu_user:266.04\r\nused_cpu_sys_children:0.00\r\nused_cpu_user_children:0.00\r\n"
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> iinfo 1 cpu
"# CPU\r\nused_cpu_sys:129.53\r\nused_cpu_user:269.65\r\nused_cpu_sys_children:0.00\r\nused_cpu_user_children:0.00\r\n"
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> iinfo 2 cpu
"# CPU\r\nused_cpu_sys:114.74\r\nused_cpu_user:310.02\r\nused_cpu_sys_children:0.00\r\nused_cpu_user_children:0.00\r\n"
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> iinfo 3 cpu
"# CPU\r\nused_cpu_sys:118.53\r\nused_cpu_user:239.94\r\nused_cpu_sys_children:0.00\r\nused_cpu_user_children:0.00\r\n"
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379>

集群版在指定 db 子节点以迭代方式遍历 key

r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> iscan 0 0
1) "0"
2) (empty array)
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> dbsize
(integer) 5
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> select 5
OK
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379[5]> dbsize
(integer) 0
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379[5]> 

集群实例查看指定的 db 子节点接收到的命令.

r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> monitor 1
OK
1617933414.776044 [0 127.0.0.1:61082] "INFO" "keyspace"
1617933414.776213 [0 127.0.0.1:61082] "INFO" "all"
1617933415.513654 [0 127.0.0.1:62574] "info" "all"
1617933415.740450 [0 10.13.53.160:59742] "role"
1617933416.208204 [0 11.115.28.156:44789] "role"
1617933416.513662 [0 127.0.0.1:62574] "info" "all"
1617933416.532412 [0 11.115.29.30:52143] "role"
1617933416.547598 [0 10.13.48.158:64052] "ECHO" "1"
1617933416.555325 [0 10.13.48.158:64052] "info"
1617933416.577764 [0 10.13.48.158:64052] "info"
1617933416.767382 [0 127.0.0.1:61105] "INFO" "keyspace"
1617933416.767563 [0 127.0.0.1:61105] "INFO" "all"
^C
[root@zengwen ~]#  redis-cli -h r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com -p 6379 -a 13265121289Zw  
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> monitor 2
OK
1617933422.783067 [0 127.0.0.1:62202] "info" "all"
1617933423.783062 [0 127.0.0.1:62202] "info" "all"
1617933423.935848 [0 127.0.0.1:50302] "INFO" "keyspace"
1617933423.946771 [0 127.0.0.1:50302] "INFO" "all"

读写分离实例查看指定 只读 子节点的统计信息.

r-f8z1erxbh1i6e6c726198.redis.rds.aliyuncs.com:6379> riinfo 0 0 cpu
"# CPU\r\nused_cpu_sys:136.74\r\nused_cpu_user:304.72\r\nused_cpu_sys_children:0.00\r\nused_cpu_user_children:0.00\r\n"

创建key并设置过期时间

set key1 value1 ex 60 --60秒过期,key=key1,value=value1
setex k4 10 v4 --10秒过期,value=v4,key=k4

设置已存在key的过期时间

expire key 60 --秒级
pexpireat key milliseconds-timestamp --毫秒级

查看key过期时间,可以实时查看

ttl key 

redis过期数据清理规则
• Redis配置项hz定义了serverCon任务的执行周期,默认为10,即CPU空闲时每秒执行10次;
• 每次过期key清理的时间不超过CPU时间的25%,即若hz=1,则一次清理时间最大为250ms,若hz=10,则一次清理时间最大为25ms;
• 清理时依次遍历所有的db;
• 从db中随机取20个key,判断是否过期,若过期,则逐出;
• 若有5个以上key过期,则重复步骤4,否则遍历下一个db;
• 在清理过程中,若达到了25%CPU时间,退出清理过程;

redis数据逐出算法
• volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰;
• volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选要过期的数据淘汰;
• volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰;
• allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰;
• allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰;
• no-enviction(驱逐):禁止驱逐数据

redis数据淘汰策略
• 不要放垃圾数据,及时清理无用数据(实验性的数据和下线的业务数据及时删除);
• key尽量都设置过期时间(对具有时效性的key设置过期时间,通过redis自身的过期key清理策略来降低过期key对于内存的占用,同时也能够减少业务的麻烦,不需要定期手动清理了;
• 单key不要过大(key过大会导致网络传输延迟比较大,需要分配的输出缓冲区比较大,在定期清理的时候也容易造成比较高的延迟,最好能通过业务拆分,数据压缩等方式避免这种过大的key的产生);
• 不同业务如果公用一个业务的话,最好使用不同的逻辑db分开(从上面的分析可以看出,Redis的过期key清理策略和强制淘汰策略都会遍历各个db。将key分布在不同的db有助于过期key的及时清理,另外不同业务使用不同db也有助于问题排查和无用数据的及时下线)。

针对redis 热key,有什么好的解决方案?

关于redis热key,先从热key出现点来剖析,多数热key都由业务场景稳定出现拉升导致,可能是某些实时热搜的微博、评论、商品大促销导致点击量骤增等各类业务场景,都会导致热key的出现,一般多数热key的出现都是读多写少的场景;

常见热key导致的问题点:

  1. 流量集中,达到物理网卡上线。
  2. 请求过多,缓存分片服务器被打垮。
  3. DB击穿,引起业务雪崩。

解决方案:结合我们现有云产品Redis部署架构,我个人感觉用读写分离的部署架构可以适应较多的热key场景,特别是读多写少的场景热key;
在这里插入图片描述
该架构中各节点的作用如下:
1、SLB 层做负载均衡
2、Proxy 层做读写分离自动路由
3、Master 负责写请求
4、ReadOnly 节点负责读请求
5、Slave 节点和 Master 节点做高可用
实际过程中 Client 将请求传到 SLB,SLB 又将其分发至多个 Proxy 内,通过 Proxy 对请求的识别,将其进行分类发送;
例如,将同为 Write 的请求发送到 Master 模块内,而将 Read 的请求发送至 ReadOnly 模块。
而模块中的只读节点可以进一步扩充,从而有效解决热点读的问题。
读写分离同时具有可以灵活扩容读热点能力、可以存储大量热点Key、对客户端友好等优点。

此架构缺点:
5. 本架构比较适用于读多写少的场景,但是遇到读写量较为均衡或写多读少的场景,可以考虑改为云产品的集群版(性能增强版)会跟合适,但具体还是要根据实际情况选择。
6. 本方案需要依赖读写架构体系,但因为目前Redis集群版提供1个、3个、5个只读节点的配置,如果只读节点不够,或者满足不了当前的业务需求,可以考虑原产品的集群版,最终还是以实际情况为准。

测试指定key是否存在 ,返回1表示存在,0不存在

exists key

返回给定key的value类型,返回node表示key不存在,string字符类型,list链表类型,set无序集合类型。

type key

返回从当前数据库中随机选择的一个key

randomkey

原子的重命名一个key,如果newkey存在,将会被覆盖,返回1表示成功,0失败。可能是oldkey不存在或者和newkey相同

rename oldkey newkey

同上,但是如果newkey存在返回失败

renamex oldkey newkey

key的超时设置处理,单位是秒,返回1成功,0表示key已经设置过期时间或者key不存在,如果想消除超时则使用persist key。如果希望采用绝对超时,则使用expireat命令。

expire key seconds

返回设置过过期时间的key的剩余过期描述,-1表示没有设置过期时间,对于不存在的key,返回-2。

ttl key

设置生命周期

pexpire key 毫秒数

以毫秒返回生命周期

pttl key

设置key对应的值为string类型的value,返回1表示成功,0失败。(注意:如果ex,px同时写,以后面的有效期为准)

set key value [ex 秒数] / [px 毫秒数] [nx] /[xx]

仅当key不存在时才set,如果key已经存在,返回0,nx是not exists的意思。

setnx key value

一次设置多个key的值,成功返回1表示所有的值都设置了,失败返回0表示没有任何值被设置。

mset key value1 ...keyN valueN

同上,但是不会覆盖已经存在的key

msetnx key value1 . . . keyN valueN

SET 命令还支持可选的 NX 选项和 XX 选项,例如:SET nx-str “this will fail” XX 如果给定了 NX
选项,那么命令仅在键 key 不存在的情况下,才进行设置操作;如果键 key 已经存在,那么 SET … NX
命令不做动作(不会覆盖旧值)。 如果给定了 XX 选项,那么命令仅在键 key 已经存在的情况下,才进行设置操作;如果 键 key
不存在,那么 SET … XX 命令不做动作(一定会覆盖旧值)。在给定 NX 选项和 XX 选项的情况下,SET 命令在设置成功时返回
OK ,设置失败时返回 nil 。

获取key对应的string值,如果key不存在返回nil

get key

原子的设置key的值,并返回key的旧值。如果key不存在返回nil。应用场景:设置新值,返回 旧值,配合setnx可实现分布式锁。

getset key value

一次获取多个key的值,如果对应key不存在,则对应返回nil

mget key1 key2 ... keyN

对key的值做加加操作,并返回新的值。注意incr一个不是int的value会返回错误,incr一个不存 在的key,则设置key为1。范围为64有号,-9223372036854775808~9223372036854775807。

incr key

同上,但是做的是减减操作,decr一个不存在key,则设置key为-1

decr key

同incr,加指定值 ,key不存在时候会设置key,并认为原来的value是 0

incrby key integer

同decr,减指定值。decrby完全是为了可读性,我们完全可以通过incrby一个负值来实现同样 效果,反之一样。

decrby key integer

针对浮点数增加

incrbyfloat key floatnumber

追加字符串

append key value

返回新字符串值的长度,返回截取过的key的字符串值,注意并不修改key的值。下标是从0开始的

substr key start end

用value 参数覆写(overwrite)给定key 所储存的字符串值,从偏移量offset 开始。 不存在的key 当作空白字符串处理。可以用作append(注意: 如果偏移量>字符长度, 该字符自动补0x00,注意它不会报错):

SETRANGE key offset value

返回key 中字符串值的子字符串,字符串的截取范围由start 和end 两个偏移量决定(包括start 和end 在内)。可以使用负值,字符串右面下标是从-1开始的。(注意返回值处理: 1: start>=length, 则返回空字符串 2: stop>=length,则截取至字符结尾 3: 如果start 所处位置在 stop右边, 返回空字符串)

GETRANGE key start end

在redis-cli中使用中文时,必须打开 --raw 选项,才能正常显示中文

redis-cli --raw

设置四个中文字符

reids>set msg"世界你好"

显示了“世界你好”的字节长度为12

redis>strlen msg

取指定key的value值的长度

strlen

在key对应list的头部添加字符串元素,返回1表示成功,0表示key存在且不是list类型。注意: 江湖规矩一般从左端Push,右端Pop,即LPush/RPop。

lpush key string

也是将一个或者多个value插入到key列表的表头,但是如果key不存在,那么就什么都不在, 返回一个false【rpushx也是同样】

lpushx

同上,在尾部添加

rpush key string

在key对应list的特定位置之前或之后添加字符串元素

linsert

返回key对应list的长度,key不存在返回0,如果key对应类型不是list返回错误

llen key

创建一个list列表

LPUSH key value

增加列表数量

LPUSH key2 value2

获取key 0-10的列表值

LRANGE key0 10

返回所有数据

LRANGE key0 -1

index 返回名称为key的list中index位置的元素,下标为0开始,例如:

lindex key 0

保留指定区间内元素,成功返回OK,key不存在返回错误。O(N)操作。

ltrim key start end

从key对应list中删除count个和value相同的元素。count为0时候删除全部,count为正,则删 除匹配count个元素,如果为负数,则是从右侧扫描删除匹配count个元素。复杂度是O(N),N 是List长度,因为List的值不唯一,所以要遍历全部元素,而Set只要O(log(N))。

lrem key count value

从list的头部删除元素,并返回删除元素。如果key对应list不存在或者是空返回nil,如果key对 应值不是list返回错误。

lpop key
同上,但是从尾部删除。
rpop

设置list中指定下标的元素值

lset key index value

从左到右扫描返回对第一个非空list进行lpop操作并返回,比如blpop list1 list2 list3 0 ,如果list 不存在list2,list3都是非空则对list2做lpop并返回从list2中删除的元素。如果所有的list都是空或 不存在,则会阻塞timeout秒,timeout为0表示一直阻塞。当阻塞时,如果有client对 key1…keyN中的任意key进行push操作,则第一在这个key上被阻塞的client会立即返回(返回 键和值)。如果超时发生,则返回nil。有点像unix的select或者poll。

blpop key1...keyN timeout

同blpop,一个是从头部删除一个是从尾部删除。

brpop

BLPOP/BRPOP 的先到先服务原则 如果有多个客户端同时因为某个列表而被阻塞,那么当有
新值被推入到这个列表时,服务器会按照先到先服务(first in first service)原则,优先向最
早被阻塞的客户端返回新值。举个例子,假设列表 lst 为空,那么当客户端 X 执行命令 BLPOP lst timeout 时,客户端 X
将被阻塞。在此之后,客户端 Y 也执行命令 BLPOP lst timeout ,也因此被阻塞。如果这时,客户端 Z 执行命令 RPUSH
lst “hello” ,将值 “hello” 推 入列表 lst ,那么这个 “hello” 将被返回给客户端 X ,而不是客户端 Y
,因为客户端 X 的被阻 塞时间要早于客户端 Y 的被阻塞时间。 rpoplpush/brpoplpush:rpoplpush srckey
destkey 从srckey对应list的尾部移除元素并添加到
destkey对应list的头部,最后返回被移除的元素值,整个操作是原子的.如果srckey是空或者不
存在返回nil,注意这是唯一一个操作两个列表的操作,用于两个队列交换消息。 应用场景:task + bak
双链表完成工作任务转交的安全队列,保证原子性。 业务逻辑: 1: Rpoplpush task bak 2: 接收返回值,并做业务处理 3:
完成时用LREM消掉。如不成功或者如果 集群管理(如zookeeper)发现worker已经挂掉,下次从bak表里取任务
另一个应用场景是循环链表: 127.0.0.1:6379> lrange list 0 -1 1) “c” 2) “b” 3) “a”
127.0.0.1:6379> rpoplpush list list “a” 127.0.0.1:6379> lrange list 0 -1 1) “a” 2) “c” 3) “b”

成功返回1,如果元素以及在集合中返回0,key对应的set不存在返回错误

sadd key member

成功返回1,如果member在集合中不存在或者key不存在返回0,如果key对应的不是set类型 的值返回错误

srem key member

如果set是空或者key不存在返回nil

spop key

同spop,随机取set中的一个元素,但是不删除元素

srandmember key

集合间移动元素(从srckey对应set中移除member并添加到dstkey对应set中,整个操作是原子的。成功返回1, 如果member在srckey中不存在返回0,如果key不是set类型返回错误)

smove srckey dstkey member

查看集合大小,如果set是空或者key不存在返回0

scard key

判断member是否在set中,存在返回1,0表示不存在或者key不存在

sismember key member
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值