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 ...
随机推荐
- NLP学习常用的网页链接
[2016.7.5] 这是以前学习的时候整理的,放到博客里面,以后再有的话会更新~ 1.一个国外的学者维护的博客,介绍NLP [链接](http://nlpers.blogspot.jp/) 2.北京 ...
- 在 Students 的 Index 页面增加列标题链接(排序),分页,过滤和分组功能
3-1 在 Students 的 Index 页面增加列标题链接 为 Index 页面增加排序的功能,我们需要修改 Student 控制器的 Index 方法,还需要为 Student 视图增加代码 ...
- java基础(6)-集合类2
泛型 泛型:是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型,参数化类型,把类型当做参数一样的传递 好处: 1)把运行时期的问题提前到了编译器期间 2)避免了强制类型转换 3 ...
- Codeforces Round #280 (Div. 2) A , B , C
A. Vanya and Cubes time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- 51nod 1363 最小公倍数的和 欧拉函数+二进制枚举
1363 最小公倍数之和 题目来源: SPOJ 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 给出一个n,求1-n这n个数,同n的最小公倍数的和.例如:n = 6,1,2,3 ...
- MySql基础学习-mysql安装
Linux环境下的安装 1检查是否已经安装 sudo service mysql start #若未安装,则提示: mysql: unrecognized service 2安装MySql #安装 M ...
- Xcode rename failed(修改类名失败)的解决办法
1.前往文件夹~/Library/Developer/Xcode 2.删除Xcode文件夹下的DerivedData 3.等项目加载完成之后,即可rename
- phalcon: 开启模板缓存和缓存路径
/** * 设置view */ $di->set('view', function () use ($config) { $view = new \Phalcon\Mvc\View(); $vi ...
- php RabbitMQ使用
php RabbitMQ使用 参考网址: http://www.rabbitmq.com/tutorials/tutorial-three-php.html 最近研究rabbitmq队列,linux安 ...
- js设计模式理解干货
构造函数本身就是一个函数,只不过该函数是出于创建对象的目的而定义的. 创建Object实例的两种方式: new 操作符 var person = new Object(); person.name = ...