Redis_DataType
Redis_DataType.html
:first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0,.1);border-radius:3px}iframe{border:0}figure{-webkit-margin-before:0;-webkit-margin-after:0;-webkit-margin-start:0;-webkit-margin-end:0}kbd{border:1px solid #aaa;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:1px 2px 2px #ddd;-webkit-box-shadow:1px 2px 2px #ddd;box-shadow:1px 2px 2px #ddd;background-color:#f9f9f9;background-image:-moz-linear-gradient(top,#eee,#f9f9f9,#eee);background-image:-o-linear-gradient(top,#eee,#f9f9f9,#eee);background-image:-webkit-linear-gradient(top,#eee,#f9f9f9,#eee);background-image:linear-gradient(top,#eee,#f9f9f9,#eee);padding:1px 3px;font-family:inherit;font-size:.85em}.oembeded .oembed_photo{display:inline-block}img[data-echo]{margin:25px 0;width:100px;height:100px;background:url(../img/ajax.gif) center center no-repeat #fff}.spinner{display:inline-block;width:10px;height:10px;margin-bottom:-.1em;border:2px solid rgba(0,0,0,.5);border-top-color:transparent;border-radius:100%;-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}.spinner:after{content:'';display:block;width:0;height:0;position:absolute;top:-6px;left:0;border:4px solid transparent;border-bottom-color:rgba(0,0,0,.5);-webkit-transform:rotate(45deg);transform:rotate(45deg)}@-webkit-keyframes spin{to{-webkit-transform:rotate(360deg)}}@keyframes spin{to{transform:rotate(360deg)}}p.toc{margin:0!important}p.toc ul{padding-left:10px}p.toc>ul{padding:10px;margin:0 10px;display:inline-block;border:1px solid #ededed;border-radius:5px}p.toc li,p.toc ul{list-style-type:none}p.toc li{width:100%;padding:0;overflow:hidden}p.toc li a::after{content:"."}p.toc li a:before{content:"• "}p.toc h5{text-transform:uppercase}p.toc .title{float:left;padding-right:3px}p.toc .number{margin:0;float:right;padding-left:3px;background:#fff;display:none}input.task-list-item{margin-left:-1.62em}.markdown{font-family:"Hiragino Sans GB","Microsoft YaHei",STHeiti,SimSun,"Lucida Grande","Lucida Sans Unicode","Lucida Sans",'Segoe UI',AppleSDGothicNeo-Medium,'Malgun Gothic',Verdana,Tahoma,sans-serif;padding:20px}.markdown a{text-decoration:none;vertical-align:baseline}.markdown a:hover{text-decoration:underline}.markdown h1{font-size:2.2em;font-weight:700;margin:1.5em 0 1em}.markdown h2{font-size:1.8em;font-weight:700;margin:1.275em 0 .85em}.markdown h3{font-size:1.6em;font-weight:700;margin:1.125em 0 .75em}.markdown h4{font-size:1.4em;font-weight:700;margin:.99em 0 .66em}.markdown h5{font-size:1.2em;font-weight:700;margin:.855em 0 .57em}.markdown h6{font-size:1em;font-weight:700;margin:.75em 0 .5em}.markdown h1+p,.markdown h1:first-child,.markdown h2+p,.markdown h2:first-child,.markdown h3+p,.markdown h3:first-child,.markdown h4+p,.markdown h4:first-child,.markdown h5+p,.markdown h5:first-child,.markdown h6+p,.markdown h6:first-child{margin-top:0}.markdown hr{border:1px solid #ccc}.markdown p{margin:1em 0;word-wrap:break-word}.markdown ol{list-style-type:decimal}.markdown li{display:list-item;line-height:1.4em}.markdown blockquote{margin:1em 20px}.markdown blockquote>:first-child{margin-top:0}.markdown blockquote>:last-child{margin-bottom:0}.markdown blockquote cite:before{content:'\2014 \00A0'}.markdown .code{border-radius:3px;word-wrap:break-word}.markdown pre{border-radius:3px;word-wrap:break-word;border:1px solid #ccc;overflow:auto;padding:.5em}.markdown pre code{border:0;display:block}.markdown pre>code{font-family:Consolas,Inconsolata,Courier,monospace;font-weight:700;white-space:pre;margin:0}.markdown code{border-radius:3px;word-wrap:break-word;border:1px solid #ccc;padding:0 5px;margin:0 2px}.markdown img{max-width:100%}.markdown mark{color:#000;background-color:#fcf8e3}.markdown table{padding:0;border-collapse:collapse;border-spacing:0;margin-bottom:16px}.markdown table tr td,.markdown table tr th{border:1px solid #ccc;margin:0;padding:6px 13px}.markdown table tr th{font-weight:700}.markdown table tr th>:first-child{margin-top:0}.markdown table tr th>:last-child{margin-bottom:0}.markdown table tr td>:first-child{margin-top:0}.markdown table tr td>:last-child{margin-bottom:0}.github{padding:20px;font-family:"Helvetica Neue",Helvetica,"Hiragino Sans GB","Microsoft YaHei",STHeiti,SimSun,"Segoe UI",AppleSDGothicNeo-Medium,'Malgun Gothic',Arial,freesans,sans-serif;font-size:15px;background:#fff;line-height:1.6;-webkit-font-smoothing:antialiased}.github a{color:#3269a0}.github a:hover{color:#4183c4}.github h2{border-bottom:1px solid #e6e6e6;line-height:1.6}.github h6{color:#777}.github hr{border:1px solid #e6e6e6}.github pre>code{font-size:.9em;font-family:Consolas,Inconsolata,Courier,monospace}.github blockquote>code,.github h1>code,.github h2>code,.github h3>code,.github h4>code,.github h5>code,.github h6>code,.github li>code,.github p>code,.github td>code{background-color:rgba(0,0,0,.07);font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:85%;padding:.2em .5em;border:0}.github blockquote{border-left:4px solid #e6e6e6;padding:0 15px;font-style:italic}.github table{background-color:#fafafa}.github table tr td,.github table tr th{border:1px solid #e6e6e6}.github table tr:nth-child(2n){background-color:#f2f2f2}.hljs{display:block;overflow-x:auto;padding:.5em;color:#333;background:#f8f8f8;-webkit-text-size-adjust:none}.diff .hljs-header,.hljs-comment,.hljs-javadoc{color:#998;font-style:italic}.css .rule .hljs-keyword,.hljs-keyword,.hljs-request,.hljs-status,.hljs-subst,.hljs-winutils,.nginx .hljs-title{color:#333;font-weight:700}.hljs-hexcolor,.hljs-number,.ruby .hljs-constant{color:teal}.hljs-dartdoc,.hljs-phpdoc,.hljs-string,.hljs-tag .hljs-value,.tex .hljs-formula{color:#d14}.hljs-id,.hljs-title,.scss .hljs-preprocessor{color:#900;font-weight:700}.hljs-list .hljs-keyword,.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type,.tex .hljs-command,.vhdl .hljs-literal{color:#458;font-weight:700}.django .hljs-tag .hljs-keyword,.hljs-rules .hljs-property,.hljs-tag,.hljs-tag .hljs-title{color:navy;font-weight:400}.hljs-attribute,.hljs-variable,.lisp .hljs-body{color:teal}.hljs-regexp{color:#009926}.clojure .hljs-keyword,.hljs-prompt,.hljs-symbol,.lisp .hljs-keyword,.ruby .hljs-symbol .hljs-string,.scheme .hljs-keyword,.tex .hljs-special{color:#990073}.hljs-built_in{color:#0086b3}.hljs-cdata,.hljs-doctype,.hljs-pi,.hljs-pragma,.hljs-preprocessor,.hljs-shebang{color:#999;font-weight:700}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.diff .hljs-change{background:#0086b3}.hljs-chunk{color:#aaa}.MathJax_Hover_Frame{border-radius:.25em;-webkit-border-radius:.25em;-moz-border-radius:.25em;-khtml-border-radius:.25em;box-shadow:0 0 15px #83A;-webkit-box-shadow:0 0 15px #83A;-moz-box-shadow:0 0 15px #83A;-khtml-box-shadow:0 0 15px #83A;border:1px solid #A6D!important;display:inline-block;position:absolute}.MathJax_Hover_Arrow{position:absolute;width:15px;height:11px;cursor:pointer}#MathJax_About{position:fixed;left:50%;width:auto;text-align:center;border:3px outset;padding:1em 2em;background-color:#DDD;color:#000;cursor:default;font-family:message-box;font-size:120%;font-style:normal;text-indent:0;text-transform:none;line-height:normal;letter-spacing:normal;word-spacing:normal;word-wrap:normal;white-space:nowrap;float:none;z-index:201;border-radius:15px;-webkit-border-radius:15px;-moz-border-radius:15px;-khtml-border-radius:15px;box-shadow:0 10px 20px gray;-webkit-box-shadow:0 10px 20px gray;-moz-box-shadow:0 10px 20px gray;-khtml-box-shadow:0 10px 20px gray;filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}.MathJax_Menu{position:absolute;background-color:#fff;color:#000;width:auto;padding:5px 0;border:1px solid #CCC;margin:0;cursor:default;font:menu;text-align:left;text-indent:0;text-transform:none;line-height:normal;letter-spacing:normal;word-spacing:normal;word-wrap:normal;white-space:nowrap;float:none;z-index:201;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-khtml-border-radius:5px;box-shadow:0 10px 20px gray;-webkit-box-shadow:0 10px 20px gray;-moz-box-shadow:0 10px 20px gray;-khtml-box-shadow:0 10px 20px gray;filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}.MathJax_MenuItem{padding:1px 2em;background:0 0}.MathJax_MenuArrow{position:absolute;right:.5em;color:#666}.MathJax_MenuActive .MathJax_MenuArrow{color:#fff}.MathJax_MenuArrow.RTL{left:.5em;right:auto}.MathJax_MenuCheck{position:absolute;left:.7em}.MathJax_MenuCheck.RTL{right:.7em;left:auto}.MathJax_MenuRadioCheck{position:absolute;left:.7em}.MathJax_MenuRadioCheck.RTL{right:.7em;left:auto}.MathJax_MenuLabel{padding:1px 2em 3px 1.33em;font-style:italic}.MathJax_MenuRule{border-top:1px solid #DDD;margin:4px 3px}.MathJax_MenuDisabled{color:GrayText}.MathJax_MenuActive{background-color:#606872;color:#fff}.MathJax_Menu_Close{position:absolute;width:31px;height:31px;top:-15px;left:-15px}#MathJax_Zoom{position:absolute;background-color:#F0F0F0;overflow:auto;display:block;z-index:301;padding:.5em;border:1px solid #000;margin:0;font-weight:400;font-style:normal;text-align:left;text-indent:0;text-transform:none;line-height:normal;letter-spacing:normal;word-spacing:normal;word-wrap:normal;white-space:nowrap;float:none;box-shadow:5px 5px 15px #AAA;-webkit-box-shadow:5px 5px 15px #AAA;-moz-box-shadow:5px 5px 15px #AAA;-khtml-box-shadow:5px 5px 15px #AAA;filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}#MathJax_ZoomOverlay{position:absolute;left:0;top:0;z-index:300;display:inline-block;width:100%;height:100%;border:0;padding:0;margin:0;background-color:#fff;opacity:0;filter:alpha(opacity=0)}#MathJax_ZoomFrame{position:relative;display:inline-block;height:0;width:0}#MathJax_ZoomEventTrap{position:absolute;left:0;top:0;z-index:302;display:inline-block;border:0;padding:0;margin:0;background-color:#fff;opacity:0;filter:alpha(opacity=0)}.MathJax_Preview{color:#888}#MathJax_Message{position:fixed;left:1px;bottom:2px;background-color:#E6E6E6;border:1px solid #959595;margin:0;padding:2px 8px;z-index:102;color:#000;font-size:80%;width:auto;white-space:nowrap}#MathJax_MSIE_Frame{position:absolute;top:0;left:0;width:0;z-index:101;border:0;margin:0;padding:0}.MathJax_Error{color:#C00;font-style:italic}footer{position:fixed;font-size:.8em;text-align:right;bottom:0;margin-left:-25px;height:20px;width:100%}
-->
Redis-DataType
Redis是一个键值对型的数据库,但是支持多种数据结构。具体如下:
- Binary-safe strings 意义为在进行对二进制的解码和编码时,不具有特殊字符,如转义字符,char数组中的\0,结尾加null等都不是二进制安全的。关键在于读写无格式。
- Lists 基于链表机制的列表,按照插入的顺序排列。
- Sets 内部元素唯一,无序的集合。
- Sorted sets 和Set类似,不过每一个String都关联着一个浮点数,为分数。这也是排序的依据。同时该数据结构和Sets不同,支持范围取元素。
- Hashes 图结构,键值都是String类型。
- Bit arrays 通过特殊的命令,可以将String转化为bit array的形式,可以单独地操作某一位。
- HyperLogLogs 是一种概率结构模型,用来估计集合的基数。(注:基数就是指在一个集合中不同元素的个数)
Strings
主要命令:
Set: 设置键值对的值,最后加可选参数nx是如果不存在,则定义,存在则不覆盖。xx是当存在再设定。ex后面跟int表明key存在的时间,类似于EXPIRE。
Get: 返回键值对的值
INCR: 当value值为整数时,会自增,注意这里的自增是线程安全的。如果不是该种类型就报错。
INCRBY: 后面跟key + int数值,增加多少,同样是线程安全的。(同样由DECR,DECRBY是减少。)
GETSET: 设置键值对的新值,但是返回的是老值,未改变之前的值。
MGET,MSET: 同GET,SET不过是一次针对多个键值对的,类似于对list的赋值。
EXISTS: 存在返回1,不存在返回0
DEL: 删除键值对,记得同样是删除成功返回1,不成功返回0
TYPE: 返回输入的value的类型。对于空的键值对返回none。
EXPIRES: 设置一个键值对的过期时间,在过期之后会自动DEL,和用户操作的效果一致。
(设置可以使用seconds和milliseconds,但是分辨率是milliseconds。并且Redis记录了准确的销毁时间,所以即使在key销毁前server已经shutdown,仍然可以在server重新运行时得到正确的处理。)
EXPIRE可以重入。
PERSIST: 直接持久化,在EXPIRE时期可以打断计时,将键值对持久化。
TTL: 可以查询key还能存活的时间,
PEXPIRE、PTTL:分别是EXPIRE和TTL的milliseconds版本。
Lists
Redis中的Lists是以链表为基础设置的。所以在头尾增减元素十分快,但是在链表中间寻找特定元素会比较慢,如果需要则应该选用Sorted Sets。特别地:Redis中的Lists是左边是头,右边是尾,因此对头操作是LXXX,对尾操作是RXXX。
两种适用场景为:
- 更新数据
- 在进程间通讯,简单的生产-消费者模式。
主要命令:
LPUSH、RPUSH: 分别在头尾添加新元素,可以一次添加多个。
LRANGE: 查找范围内的Lists元素,LRANGE mylists 0 -1 这里的参数中第一个参数是寻找范围的起始地址,后面的是终止地址。而终止元素支持负数,末尾是-1,倒数第二是-2,依次类推。(特别地:不支持逆向寻址,即始终保持从头开始的顺序性,如 LRANGE mylists -1 -2 是error,但是LRANGE mylists -2 -1 就可以得到正确的结果。怀疑是单向链表的实现缘故。)
LPOP、RPOP: 弹出元素,并且在元素list中删除元素。同样左右。对一个空的Lists进行POP得到nil,而每个空List都有一个null元素占位。
LTRIM: 产生有上限的Lists(Capped Lists),只存在最新的N个元素,对一个已经存在的Lists使用,则会对Lists产生截断效果。LTRIM nylists 0 2会保留0到2的元素,其余元素丢弃。
BRPOP、BLPOP: 是BPOP和LPOP的Blocked版本,当取不到元素时会Block,后面跟时间是等待时间 BRPOP mylists 6在6秒内如果还是拿不到元素就返回nil。但是等待时间设置为0,则会无限等待。(特别地:BRPOP支持多个Lists同时操作,所以针对多个Lists时有):
1. Clients会以进入的次序响应:如,第一个client在取元素时被Block,而在第二个client的push操作后,第一个client会首先得到元素,而不是后面的第三,第四。
2. BRPOP、BLPOP的返回值和LPOP、RPOP不同(由于支持多个Lists同时操作),BLOCK版本的返回一个有两个元素的Array,第一个元素代表了取出元素的Lists名。
3. 阻塞时间到则返回nil。
(B)RPOPLPUSH: 将source的List中的尾部元素,放到destination的List的头部,线程安全的,不会出现多个client的冲突。可以实现Block Operation的安全操作。如果source和destination都是同一Lists则是对Lists的旋转,形成Circle Lists。
Hashes
Redis中的Hashes和普通数据结构中的hashmap一样,
主要命令:
HSET、HGET: 单个定义hashmap中元素的一个属性,一次一个。
HMSET、HMSET: 批量定义hashmap中元素的不同属性,一次多个。
HGETALL: 仅给出元素名,得到元素的全部属性。
HINCRBY: 对于元素域中的属性中的数字自增一个int。
Sets
Redis中的Sets是一个无序的String集合,不允许重复。适用于数据间结构关系的表现,比如一个元素可以有多个tags,可以在该元素上有个set,表示同那几个tag相关。也可以每个tag维护一个set,表示都有哪些元素属于这个tag。
主要命令:
SADD: 向一个Set集合中加入元素。
SMEMNERS: 返回当前Set中所有的元素。
SISMENBER: 在Set中返回1,否则返回0。
SINTER: 返回多个Set中相同的部分(交集)。
SPOP: 将集合中的元素弹出。
SUNION、SUNIONSTORE: SUNION返回多个几个的并,而SUNIONSTORE将后面参数中的集合做交集并存储在另一个set中。
SCARD: 返回当前Set中的基数
SRANDMEMBER: 从Redis2.6开始,当附加参数为负数则返回有重复的随机元素,个数是附加参数的绝对值,而当附加参数是正数时,则返回不重复的元素,如果正数大于Sets的size则返回所有的元素。
Sorted Sets
Sorted Sets类似Sets和Hashes的混合,Sorted Sets中的所有元素都是唯一的String Elements,但是每一个元素都维护一个浮点数Score,正是排序的标准。
排序的标准:
- 如果A,B两个元素拥有不同的score,则依据score来判断A > B。
- 如果A,B两个元素的score相同,则依据A,B两个元素的字典顺序判断A > B。
每当新添加一个元素,Sorted Sets都会更新,所以适合于大量更新的排行榜等应用。
主要命令:
ZADD: 同SADD,不过在增加的元素前有一个score值需要添加。
ZRANGE: 同LRANGE,其中0代表第一个元素,-1代表遍历整个集合。加上withscores会同时显示出score。
ZREVRANGE: 同ZRANGE反向的排序结果。
ZRANGEBYSCORE: 可以对排序进行操作,如 ZRANGEBYSCORE hackers -inf 1950 得到score从负的无穷到1950的全部元素。
ZREMRANGEBYSCORE: 可以移除在一个区间内的元素。返回移除的元素的数目。
Z(REV)RANK: 给出制定元素的排序值。正向\反向
Z(REV)RANGEBYLEX: 得到按照字典顺序排序的结果。可以有参数,根据首字母等排序,具体可以查看命令的文档。
ZREMRANGEBYLEX: 按照字典顺序移除元素。
Bitmap
Bitmaps不是一种数据结构,本质上是一系列针对String的Bits操作。最大容量2^32bits。
主要命令:
SETBIT: 对一个String的key中的某一个元素位置位,第一个参数是被置位在该key中的位置,第二位是1或者0,对于超出该key范围的置位,会自动延伸该String。
GETBIT: 参数同SETBIT,得到某一key上的某一位的bit值,默认是0,且超出key的查询同样会自动延长key。
BITOP: 提供AND,OR,XOR,NOT四种位操作的模式,具体的应用规则看文档。长度不一的String就会补零到同等长度。
BITCOUNT: 返回String中设置为1的位的个数。
HYPERLOGLOGS
只知道是估算Sets中的基数的,具体不懂。这里先省略,具体需要使用时再去参考文档。
generated by haroopad
Redis_DataType的更多相关文章
随机推荐
- <<软件测试实战>>读书笔记
软件测试基础 软件的复杂度已经超越了人的理解能力 1. 虽然高抽象的层次语言,程序框架,程序库等提高了人的生产力,但是还是需要开发者深入理解细节,可以减少开发时间,但是无法减少开发者学习整个技术栈的时 ...
- AD域修改组策略
如果我们的计算机加入AD域之后,修改安全策略时不能用本地策略来修改.具体修改方法: .Start(开始)–Programs(程序)–Administrative Tools(管理工具)–Group P ...
- DIJ产品系列
- 评论Final版本发布
1. 新蜂:俄罗斯方块 产品方面:俄罗斯方块在Beta版本基础上新增了许多功能,其中游戏中按A键可以开启瞄准,这个功能在市面上是具有先发优势的,算是一个较大的亮点:在改进了文字ui和方块的贴图以及游 ...
- Struts2基础使用教程:OGNL
取自<JAVAWEB整合开发王者归来> 是一种类似EL的语言,比EL强大的多 能访问对象的方法,例如list.size() 能访问静态属性与静态方法,方法是在类名前.方法前加上@.如@ja ...
- HttpContextBase转换成HttpContext对象
有以下方法: 主要是方式就是通过context获取HttpApplication,然后通过Application获取相应的HttpContext ①HttpContext context=HttpCo ...
- ant批量执行Jmeter脚本
JDK,Jmeter默认已经装了 ANT下载:http://ant.apache.org/bindownload.cgi ant环境变量需要配置 ant_home,你解压之后的地址 然后PATH环境变 ...
- items2 配色
cat ~/.bash_profile #enables colorin the terminal bash shell exportexport CLICOLOR=1 #sets up thecol ...
- Mongodb故障转移
测试环境 四台测试服务器10.151.151.150:27017(主节点),10.151.151.151:27017(从节点),10.151.151.152:27018(从节点),10.151.151 ...
- 1,SFDC 开发篇 - 类对象和SOQL查询
1,类对象 & 接口 & 属性 2, Object & SOQL