第三课补充01——set类型 sorted类型命令操作详解,redis管道及事务
1、 set类型的命令操作:
(1)sadd命令:向key指定的set集合添加成员

##sadd命令:是设置set集合类型的数据,sadd <key> <mumber> [<mumber>]
##<key>不存在的时候,sadd命令创建key并向集合添加成员;
##注意,成员之间空格分隔,如果用逗号,则表示是同一个成员
##set集合里,member是不重复的
(2)smove命令:是原子操作,将指定的member从source移动到desitination
##其中,source destination均是指set类型的key,member是source里的某个成员
##smove命令:用于两个集合之间成员的移出、移入;

(3)spop命令:从key指定的set集合里移除一个值,返回值是被移除的member,没有或key不存在则返回nil

##spop命令,是从集合里移除一个member,是随机移除的,因为set是无序的,sorted set才是有



##set里的member是非重复的,且存入和pop是无序的,set集合本身就是无序的
(4)srem命令:从指定key的set集合里移除指定的member,返回值是移除的member的数量


(5)scard命令:返回key对应的set集合里member数量


(6)smembers命令:返回key对应的集合的所有成员


(7)sdiff命令:返回第一个集合存在,而后面集合里不存在的成员



settest1={s1 s2 s3 s4}
settest2={s1 s2 s3}
settest3={s1 s2 s3 s4}
sdiff settest1 settset2命令后,返回settest1里存在,而settest2里不存在的成员值,因此返回值为s4
sdiff settest1 settset2 settest3命令,则是以settest1为比较基准,返回settest1里存在而其他集合不存在的成员,因此上面第二个例子返回值为empty set
(8)sdiffstore命令:与sdiff一样,但是会把存在差异的值放在destination的set中


(9)sinter命令:返回两个集合的交集


settest1={s1 s2 s3 s4}
settest2={s1 s2 s3}
sinter settest1 settest2命令后,返回settest1和settest2集合的交集member
(10)sinterstore命令:将交集存储到一个集合里


(11)sismember 命令:判断该成员是否在该集合里


(12)srandmember命令:随机返回集合里指定个数个成员,不指定个数则随机返回一个成员


(13)sunion命令:返回所有集合的成员



(14)sunionstore命令:求集合的并集,并把结果存在在新集合上

(15)sscan命令:对集合里的成员遍历,用法和scan类似,scan是对string类型的key做遍历;sscan命令是对指定集合里的成员做遍历,可以模式匹配


2、 sorted set(排序后的set集合)类型的命令操作:
##set集合里,数据的排序和插入的次序是不相关的,sorted set集合里的数据排序是有序的;
(1)zadd命令:将后面的成员按照一定的排序分数放入key指定的sorted set里

(1) xx选项是只有成员存在才能操作,也就是对成员的update操作;
(2) nx选项是针对不存在的成员才能操作,也就是对成员的insert操作;
(3) ch选项表示返回的值不是新增元素的数量,而是发生变化的元素的数量,不加ch,返回值是新增原因的数量;
(4) incr选项,指定后后面只能有一对score-member,表示给成员的score增加对应的值,不同的成员有相同的score时,按照成员的字典序进行排序;


##按照1 2 3的顺序,向有序集合sset1里添加3个成员:11 22 33



(2)zrange命令:返回key指定的set集合里指定区间的member


(3)zscore命令:获取key对应的set集合中指定member的score值


(4)zscan命令:与scan类似


(5)zcard命令:返回key指定的set集合里的所有成员数量


(6)zcount命令:返回key指定的set集合里,满足min<=score<=max条件的元素的数量


(7)zincreby命令:把key指定的set集合里,指定的member的score增加increment


(8)zinterstore命令:求指定key对应的集合的交集,并存入新集合key

(9)zunionstore命令:求指定key对应的集合的并集,并存入新集合key

(10)zrangebylex命令:当集合里所有元素的score都一样时,用此命令可以去除key的集合中符合字典序min max之间的值

3、 管道

(1) redis的客户端和服务器端通信,有网络传输,假设网络传输可以承受100字节,但是由于redis命令输送量比较少,如果发送一个命令就封装一个包,传输数据包没有把网络占全,而在同样的网络时延下,一个命令一个传输包,带的信息量很少,导致网络的吞吐率不高。如果传输包里有多个redis命令,占满网络传输承载,这样可以提高客户端的吞吐率。
(2) 在这个背景下,提供管道——以批量形式将命令从客户端传输到服务器上,提高客户端吞吐率,注意的是,管理传输的命令,必须同时执行完,缓存到服务器端,再一起返回给客户端。
(3) 由于中间执行结果会缓存到内存,命令执行结果数据较多的时候,会导致服务器端内存暴增;当已经把网络填充满后,再增加多的命令,不会提升性能,主要涉及到最大报文段长度的值;
(4) 不用管道,和用管道,性能相差6倍多
4、 事务

##redis的事务,不像关系型数据库那样严谨,没有事务回滚机制,一旦某个命令执行失败,剩余命令依旧执行,会导致整个事务数据不完整。
##一般的语句执行错误都是由于命令错误等bug导致,某些情况了执行总会成功,例如mset命令。因此为了获取较高的性能,在不是很严格的业务场景下,可以大胆使用redis事务;如果是在非常严格的场景使用,建议增加类似对账机制进行数据的校验和纠正处理。
(1)事务的成功提交

(2)事务的丢弃(失败)

(3)事务里的乐观锁(乐观锁只针对一次事务有效)

在窗口1里执行:
(1)string1原值为是s1,string2原值为s2
(2)先用乐观锁监控string1
(3)以事务方式,对string1和stirng2做修改
(3)事务尚未提交

在窗口2里执行:
(4)修改string1的值

在窗口1里执行:
(5)提交(3)里未提交的事务,exec提交事务,发现返回nil,说明事务失败
(6)查看string1值为s11111,说明窗口2里对string1的修改生效了;string2值为s2,是最初的值没有修改。
总结:在使用乐观锁监控下,一旦事务内的被乐观锁监控的key发生变化(被乐观锁监控的key被修改了),就会导致事务失败。
第三课补充01——set类型 sorted类型命令操作详解,redis管道及事务的更多相关文章
- 第二课补充01——redis-cli命令行详解、string类型、list类型、hash类型命令操作详解
一. redis-cli命令行参数 1.-x参数:从标准输入读取一个参数: [问题] [解决] 因为echo命令是默认带有回车\n的,不带回车需要echo –n命令: echo -n "ha ...
- Redis学习——详解Redis配置文件(三)
一.Redis脚本简介 在我们介绍Redis的配置文件之前,我们先来说一下Redis安装完成后生成的几个可执行文件: redis-server .redis-cli .redis-benchmark ...
- sorted()排序详解
sorted()排序详解 http://wiki.python.org/moin/HowTo/Sorting?highlight=%28howto%29#The_Old_Way_Using_t ...
- P2P技术详解(三):P2P技术之STUN、TURN、ICE详解
1.内容概述 在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet.很多时候,我们希望网络中的两台主机能够直接进行通信,即所谓的P2P ...
- web前端学习(三)css学习笔记部分(6)-- 选择器详解
9.选择器详解 9.1 属性选择器 CSS3 属性选择器,在 CSS3 中,追加了三个属性选择器分别为:[att*=val].[att^=val]和[att$=val],使得属性选择器有了通配符的概 ...
- Qt开发技术:QCharts(三)QCharts样条曲线图介绍、Demo以及代码详解
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- 面渣逆袭:Spring三十五问,四万字+五十图详解
大家好,我是老三啊,面渣逆袭 继续,这节我们来搞定另一个面试必问知识点--Spring. 有人说,"Java程序员都是Spring程序员",老三不太赞成这个观点,但是这也可以看出S ...
- 【Android Studio安装部署系列】三十二、Android模拟器Genymotion安装使用教程详解
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 一.注册\登录 打开Genymotion官网,https://www.genymotion.com/ ,首先点击右上角的Sign in进行 ...
- ECMAScript---布尔类型、null、undefined详解
布尔类型中 至只有 true和false 在开发中它是非常重要的两个值,尤其是在条件判断中 如何把其他类型转换为布尔类型? 1.Boolean() Boolean(1); //true Boolean ...
随机推荐
- WebKit(Blink分支)各组件的创建与逻辑关系
从render_view_impl.cc開始说起. 1. 方法RenderViewImpl::Initialize中有: WebLocalFrame* web_frame = WebLocal ...
- Vim进阶指南
常用按键说明 按键 解释 移动光标 n+(Space) 向右移动n个字符 n+(Enter) 向下移动n行 nG 移动到第n行 gg 移动到第一行 G 移动到最后一行 0或Home键(Mac使用fn+ ...
- Hyper-V 虚拟机无法上网的解决方法
创建一个虚拟机网络交换机 2 创建一个 外部网络如下图所示: 3 添加一个旧版的网络适配器: 4 设置旧版网络适配器: END XP系统的情况 1 启动虚拟机,设置虚拟机IP: 2 输入http:// ...
- ubuntu:好用的help命令
以前光知道如何不清楚某个命令的用法可以打上后缀 ‘ --help' 现在刚发现,原来还有help命令来帮忙,如果你安装的是中文支持,在ubuntu上, 那么部分命令说明还是中文版哦. 举例: help ...
- Jetty - Connector源码分析
1. 描述 基于Jetty-9.4.8.v20171121. Connector接受远程机器的连接和数据,允许应用向远程机器发送数据. 1.2 类图 从类图看出AbstractConnector继承C ...
- C++父子类继承时的隐藏、覆盖、重载
存在父子类继承关系时,若有同名成员函数同时存在,会发生隐藏.覆盖和重载这几种情况.对于初学者也比较容易混淆,为此,我整理了一下我的个人看法,仅供参考.希望对大家理解有帮助,也欢迎指正. 1.父子类继承 ...
- tomcat能启动正常,但是输入localhost:8080不能登录
怎么配置JDK和TOMCAT应该百度经验已经很好地解释了. tomcat启动成功了,但是 localhost:8080 登录不成功. 有一种可能,缺少http:// 输入: http://loca ...
- UITextField/UITextView限制字数
一,UITextFild限制字数(三步) 1,给textfild添加响应事件,类型为:UIControlEventEditingChanged [self.nickNameFild addTarget ...
- DHCP中继器
DHCP客户机和服务器在不同的子网内,客户机向服务器申请IP地址,这就要用到DHCP中继代理.DHCP中继代理实际上是一种软件技术,安装了DHCP中继代理的计算机称为DHCP中继代理服务器,它承担不同 ...
- U盘工作原理(转)
u盘工作原理 一. U盘基本工作原理 通用串行总线(Universal serial Bus)是一种快速灵活的接口, 当一个USB设备插入主机时,由于USB设备硬件本身的原因,它会使USB总线的数据信 ...