Set,Sorted Set相关命令操作,批量插入及管道,事务
Set
SADD key member [member ...]
向key指定的set集合添加成员,次集合是排重的,从2.4版本后才支持添加多个
如果key不存在则创建key以及set集合
返回当前操作成功添加的成员数量,不是所有的成员数量
SMOVE source destination member
把key为source的set中值为member的成员移动到key为destination的set集合中
该操作是原子操作
如果source不存在或者member不存在source中,则返回0ͺ否则返回1
SPOP key
从key指定的set集合中移除一个值
如果有值可以移除就返回被移除的值,没有或者key不存在则返回nil
SREM key member [member ...]
从key指定的set中移除member的成员,如果某个member不存在,则会被忽略,成功后返回被移除的数量
SCARD key
返回key对应的集合成员数量
SMEMBERS key
返回key对应的set的所有成员
SDIFF key [key ...]
返回第一个key与后面其它可以对应的set中不存在的值
127.0.0.1:6379> smembers settest
(empty list or set)
127.0.0.1:6379> sadd settest 11 22 33
(integer) 3
127.0.0.1:6379> smembers settest
1) "11"
2) "22"
3) "33"
127.0.0.1:6379> srem settest 11
(integer) 1
127.0.0.1:6379> smembers settest
1) "22"
2) "33"
127.0.0.1:6379> scard settest
(integer) 2
127.0.0.1:6379> sadd set2 88 99 10
(integer) 3
127.0.0.1:6379> sadd set2 33
(integer) 1
127.0.0.1:6379> sdiff settest set2
1) "22
SDIFFSTORE destination key [key ...]
与SDIFF一样,但是会把差异存在的值放在destination的set中
如果destination已经存在,将会覆盖,即原来的set中的值都没有了
返回destination中值的个数
SINTER key [key ...]
返回key对应的set中值的交集,如果key不存在,就被当作是空集合,返回值交集的元素
127.0.0.1:6379> sinter settest set2
1) "33"
SINTERSTORE destination key [key ...]
与SINTER一样,但是把交集的数据存储在desttination中
SISMEMBER key member
判断member是不是key对应set的成员,如果是返回1,如果key不存在或者不是返回0
SRANDMEMBER key [count]
不带参数count,则从key指定的set中随机返回一个成员
从2.6版本后,增加count,如果count>0,则随机返回count个不同的值ͺ如果count<0,返回多个值,但可能会有相同的值,数量就是count的绝对值
SUNION key [key ...]
返回所有key中的所有值,如果值有相同的,则会去重
127.0.0.1:6379> srandmember settest
"22"
127.0.0.1:6379> smembers settest
1) "22"
2) "33"
127.0.0.1:6379> srandmember settest
"33"
127.0.0.1:6379> srandmember settest 3
1) "22"
2) "33"
127.0.0.1:6379> srandmember settest -3
1) "22"
2) "22"
3) "33"
127.0.0.1:6379> sadd set1 100
(integer) 1
127.0.0.1:6379> sunion set1 settest
1) "22"
2) "33"
3) "100"
127.0.0.1:6379> sadd set1 33
(integer) 1
127.0.0.1:6379> sunion set1 settest
1) "22"
2) "33"
3) "100"
SUNIONSTORE destination key [key ...]
与sunion功能一致,不过把合并后的数据放在destination这个set集合,返回集合的长度
SSCAN key cursor [MATCH pattern] [COUNT count]
Sorted Set
ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
把后面的成员,按照一定的排序分数放入key指定的sorted set
如果member已经存在,则会更新score,同时把该元素插入新的顺序位置
XX表示只有member存在才能操作,也就是只能更新score
NX,表示不更新,只做插入,即如果有成员存在,该操作会失败,不存在就插入
Ch表示返回的值不是新增元素的数量而是发生变化的元素的数量,包括:新增元素和已经存在的但是score被修改的元素
Incr,当指定该属性时,后面只能有一对score-member,表示给member成员的score增加对应的值
当不同的成员具有相同的score时,redis会按照成员的字典序进行排序
如果不加ch选项,则返回被添加的新成员的数量ͺ如果采用incr选项则返回的是增加后的元素的score
127.0.0.1:6379> zadd sett1 1 11 2 22 3 33
(integer) 3
127.0.0.1:6379> zrange sett1 0 10
1) "11"
2) "22"
3) "33"
127.0.0.1:6379> zadd sett1 xx 20 22
(integer) 0
127.0.0.1:6379> zrange sett1 0 10
1) "11"
2) "33"
3) "22"
127.0.0.1:6379> zadd sett1 xx ch 21 22
(integer) 1
127.0.0.1:6379> zrange sett1 0 10
1) "11"
2) "33"
3) "22"
127.0.0.1:6379> zadd sett1 incr 100 11
"101"
127.0.0.1:6379> zrange sett1 0 10
1) "33"
2) "22"
3) "11"
ZRANGE key start stop [WITHSCORES]
返回key指定的set的某个区间值
Set的第一个值下标是0,如果start或者stop为负数,则表示倒数第几个
当带上属性withscores时,返回的值会带上score
ZSCORE key member
获取key对应的set集合中member成员的score值
ZSCAN key cursor [MATCH pattern] [COUNT count]
与scan类似,以游标的方式遍历key对应的set集合的值
127.0.0.1:6379> zrange sett1 0 10 withscores
1) "33"
2) "3"
3) "22"
4) "21"
5) "11"
6) "101"
127.0.0.1:6379> zscore sett1 33
"3"
127.0.0.1:6379> zscan sett1 0
1) "0"
2) 1) "33"
2) "3"
3) "22"
4) "21"
5) "11"
6) "101"
ZCARD key
返回key指定的set的所有成员数量
ZCOUNT key min max
返回key指定的set集合中,min<=score<=max的元素的数量
ZINCRBY key increment member
把key中的member元素的score增加increment数
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE
SUM|MIN|MAX]
求指定的key对应的集合中的交集,numkeys表示被求交集的key的数量,必须完全一致
默认交集元素的score是所有集合中score的和,可以通过AGGREGATE的参数SUM MIN MAX来指定其它算法
还可以通过WEIGHTS指定不同key的权重,参与score计算的权重
127.0.0.1:6379> zcard sett1
(integer) 3
127.0.0.1:6379> type sett1
zset
127.0.0.1:6379> zrange sett1 0 10
1) "33"
2) "22"
3) "11"
127.0.0.1:6379> zrange sett1 0 10 withscores
1) "33"
2) "3"
3) "22"
4) "21"
5) "11"
6) "101"
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE
SUM|MIN|MAX]
求指定的key对的集合中的并集,numkeys表示被求交集的key的数量,必须完全一致
如果有交集的元素,则几个元素的score是所有集合中score的和,可以通过AGGREGATE的参数SUM MIN MAX来指定其它算法
还可以通过WEIGHTS指定不同key的权重,参与score计算的权重
ZRANGEBYLEX key min max [LIMIT offset count]
当集合的所有元素的score都一样时,通过该命令取出key的集合中符合字典序min max区间的值
Min和max必须以[开头,代表不等于和等于,比如min为[5,则带表大于等于5
用-号代表无穷小,+号带表无穷大,如果min为-,max为+则代表返回所有的值
Limit用于分页返回,类似于mysql的limit,offset是第几条
ZLEXCOUNT key min max
当集合的所有元素的score都一样时,通过该命令取出key的集合中符合字典序min max区间的值的个数
Min和max必须以或者[开头,代表不等于和等于,比如min为[5,则代表大于等于5
用-号代表无穷小,+号代表无穷大,如果min为-,max为+则带表返回所有的值
ZREVRANGEBYLEX key max min [LIMIT offset count]
与zrangebylex功能类似,不过它是从大到小的返回值列表
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
取出分数(score)位于min和max之间的元素,默认是包含最小和最大两个边界,也可以采用(或者[来明确表示边界
• Withscores可以把符合要求的元素的score值一起查询出来
• Limit类似mysql的limit,offset带表起始值,count带表查询数量
• 可以通过-inf和+infї表无穷小和无穷大
ZRANK key member
• 返回key集合中,元素member对应的排序ѹ置
• 如果key不存在或者member不存在,返回nil
– ZREM key member [member ...]
• 删除key指定的set集合中对应的元素
• 返回被删除的元素的数量,不包括不存在的元素
– ZREMRANGEBYLEX key min max
• 当集合所有元素的score相同时,删除该集合中字典序范围为min和max的元素
• Min和max的定义参考ZRANGEBYLEX命令
• 返回被删除的元素个数
ZREMRANGEBYRANK key start stop
• 删除key对应集合中排序顺序为start和stop中间的元素
• Start和stop可以为负数表示从最大排序的倒数,正序的下标从0开始
• 返回被删除的元素个数
– ZREMRANGEBYSCORE key min max
• 删除key指定的set集合中对应的元素,score满足min和max大小
• 返回被删除的元素的数量,不包括不存在的元素
– ZREVRANGE key start stop [WITHSCORES]
• 与zrange类似,但是љ倒序方式查询
• 返回符合条件的元素
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
以倒序的方式返回key对ځ集合中,score在max和min中间的元素
• Withscores表示返回元素时显示元素的score值
• Limit类似mysql的limit,offset表示起始值,count表示数量
ZREMRANGEBYSCORE key min max
删除key指定的set集合中对ځ的元素,score满足min和max大小
• 返回被删除的元素的数量,不包括不存在的元素
ZREVRANK key member
返回key集合中member元素的排序ѹ置,key对ځ的集合倒排后member所处的位置
• 返回倒序序号,如果key不存在或者member不存在则返回nil
管道(pipelining)
为了提升客户端服务器器端的通信效率,从而可以提升客户端的吞吐率,redis提供了pipelining来一次
可以发起多个命令,并且要等多个命令执行完成才能返回最终结果
注意事项
由于中间执行结果会先缓冲到内存,所以如果命令执行结果数据比较多的话会导致服务器内存暴增
当已经把网络包填充满后,再增加多的命令,并不会提升性能,主要涉及到最大报文段长度的值
事务操作命令
- MULTI,开启一个事务
– EXEC,执行事务中所有的命令,即MULTI后所有的命令
– DISCARD,类似回滚,即不执行MULTI后的所有命令
– WATCH,类似于乐观锁的实,࣫当事务执行期间(实就是事务开始时,因为redis是单线程,一旦开
始执行,数据不会被其它线程的命令修改),被观察的key的值发生变化,则事务不会执行
– UNWATCH,取消观察,即取消乐观锁
事务的本质理解
类似于命令队列,保证命令的顺序性,并会检查入队列的每个命令的语法合法性
所有命令执行过程不会被打断,即使中间某个命令执行失败,也会把剩下的所有命令都执行完成
当事务通过exec或者discard后,watch乐观锁会失效
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set tkey 111
QUEUED
127.0.0.1:6379> set t2 222
QUEUED
127.0.0.1:6379> set tkey 333
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) OK
127.0.0.1:6379> get tkey
"333"
127.0.0.1:6379> get t2
"222"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set tkey 555
QUEUED
127.0.0.1:6379> set t2 333
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> get tkey
"333"
127.0.0.1:6379> get t2
"222"
127.0.0.1:6379> exec
(error) ERR EXEC without MULTI
Redis原子性有一定的局限性,它只能检查语句的合法性(入队检查),如果进入队列的语句不合法,则整个事务不会提交ͺ
如果采用乐观锁(watch),则,当对应的key的值发生变化,则事务部会提交
因为redis是单线程执行,即同时刻只有一个命令在执行,因此不会出࣫在执行过程中数据被其他命令修改的情况
执行过程中宕机不会导致数据不一致,因为通过持久化机制可以按照执行成功的标准检测
有一定的局限性:没有事务回滚机制,一旦某个命令执行失败(剩下的命令依然会继续执行),会导致整个事务的数据不能完整
单线程执行,具备很好的隔离性
依赖redis的持久化机制,如果采用aof,则需要设置appendfsync为always时,每个命令的执行都会写入磁盘
关于事务
1.并不能像关系型数据库那样严谨
2.一般的语句执行错误都是由于命令错误等bug导致,某些命令执行总会成功,比如mset命令ͺ因此为了获取比较高的性能,
在不是很严格的业务场景还是可以大胆使用的,如果在非常严谨的场景使用,建议增加类似对账机制进行数据的验证和纠错处理
Set,Sorted Set相关命令操作,批量插入及管道,事务的更多相关文章
- mysql命令行批量插入100条数据命令
先介绍一个关键字的使用: delimiter 定好结束符为"$$",(定义的时候需要加上一个空格) 然后最后又定义为";", MYSQL的默认结束符为" ...
- zookeeper的简介和相关命令操作
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- Linux服务器使用命令操作MySQL插入数据乱码问题
服务器上使用MySQL命令方式进行插入数据时,很多时候会遇到插入数据乱码问题,导出一个sql执行文件,再倒入到unbutn中,结果出现乱码,折腾7-8分钟, 解决方式 在导出mysql sql执行文件 ...
- linux中weblogic相关命令操作
在weblogic的目录下找到bin目录,其中有startWeblogic.sh.startManagerWeblogic.sh等 首先需要启动startWeblogic.sh,这个是管理服务,也就是 ...
- gitlab相关命令操作
[root@xuegod63 ~]# git config --global user.name "zsl3"[root@xuegod63 ~]# git config --glo ...
- Linux for CentOS 下的 keepalived 安装与卸载以及相关命令操作之详细教程
百度百科解释: keepalived 是一个类似于 layer3, 4 & 7 交换机制的软件,也就是我们平时说的第 3 层.第 4 层和第 7 层交换.Keepalived 的作用是检测 w ...
- windows环境变量和相关命令操作
1.很多程序在windows上运行都需要设置环境变量. 2.具体步骤 复制路径 打开系统设置 高级系统设置 环境变量 设置path 重启cmd 3.可以把路径设置成变量,这样就不用随时 改path而是 ...
- Redis中String类型的相关命令操作
String append 如果key已存在,则直接在value追加值,如果key不存在,则会插件一个新的value为空的key,然后在追加 127.0.0.1:6379> set name l ...
- 光盘 iso 镜像制作相关命令操作
1. 安装制作工具 mkisofs yum install mkisofs -y 2. Linux 操作系统镜像 iso 打包 mkisofs -o /root/.iso \ -V mini7 -b ...
随机推荐
- 一键安装 lnmp/lamp/lanmp
1.使用putty或类似的SSH工具登陆VPS或服务器 # screen -S lnmp 如果提示screen: command not found 命令不存在可以执行:yum install scr ...
- html文件转换成pdf和word
1.html文件转成pdf 采用jar包有itext-asian.jar.itextpdf-5.5.5.jar.itext-pdfa-5.5.5.jar.itext-xtra-5.5.5.jar,为了 ...
- java——base64 加密和解密
base64 一.加密 *.若有要求输入字符必须为UTF-8: 则需str.getByte("utf-8"); //在getByte()中指定utf-8编码,否则中文字符将被加密 ...
- 虚拟机CentOS7网络配置
*关于查看IP信息 window中是 ipconfig Linux一般都是 ifconfig 不过CentOS7中 这个命令发生了更改 :ip addr 设置网络 再新建虚拟机向导过程中,有一步[网 ...
- Redis源码研究:哈希表 - 蕫的博客
[http://dongxicheng.org/nosql/redis-code-hashtable/] 1. Redis中的哈希表 前面提到Redis是个key/value存储系统,学过数据结构的人 ...
- 解决:SyntaxError: Non-ASCII character in file
今天尝试用monkeyrunner脚本在夜神模拟器上安装并截图QQ,但是遇到了一些问题: from com.android.monkeyrunner import MonkeyRunner, Monk ...
- 解决:cmd中运行monkeyrunner monkey_recorder.py报错: Can't open specified script file
看lynnLi的博客monkeyrunner之录制与回放(七),遇到了一个问题,我在cmd中输入monkeyrunner monkey_recorder.py,却报错了: 当时第一个感觉时,先到\sd ...
- 图片文件和Bitmap之间的转换
图片文件转为Bitmap对象String filePath="c:/01.jpg"; Bitmap bitmap=BitmapFactory.decodeFile(filePat ...
- Linux常用命令知识积累
基本操作 Linux关机,重启 # 关机 shutdown -h now # 重启 shutdown -r now 查看系统,CPU信息 # 查看系统内核信息 uname -a # 查看系统内核版本 ...
- CMMI 3级精简并行过程综述
“精简并行过程”(Simplified Parallel Process,SPP)是基于CMMI以及软件工程和项目管理知识而创作的一种“软件过程改进方法和规范”,它由众多的过程规范和文档模板组成.SP ...