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。
两种适用场景为:

  1. 更新数据
  2. 在进程间通讯,简单的生产-消费者模式。

主要命令:
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,正是排序的标准。

排序的标准:

  1. 如果A,B两个元素拥有不同的score,则依据score来判断A > B。
  2. 如果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. MySQL使用说明

    一.概述 什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 什么是 MySQL.Oracle.SQLite.Access.MS SQL Server等 ? ...

  2. [git]rebase和merge

    转自:http://blog.csdn.net/wh_19910525/article/details/7554489 Git merge是用来合并两个分支的. git merge b # 将b分支合 ...

  3. SQL起别名

    select列的时候取别名有三种方法,这三种方法并不是所有数据库都适用. 方法一.直接在字段名称后面加上别名,中间以空格隔开. 方法二.以as关键字指定字段别名,as在select的字段和别名之间. ...

  4. vuejs,router

    接下来我们要做的是vue的路由处理,首先当然是安装: npm install vue-router 接下打开我们的main.js,引入我们vue-router,然后在告诉vue我们要使用我们的vue- ...

  5. AttributeError: type object '_io.StringIO' has no attribute 'StringIO'

    python2导入StringIO模块,直接: from StringIO import StringIO 对于python3,StringIO和cStringIO模块已经没了,如果要使用的话,需要导 ...

  6. 服务器ssh登录提示“Permission denied, please try

    原因:不用怀疑,一般情况下,就是你密码输入错误了. 解决:找到正确的密码输入. 当然,也有可能是下面的情况: 在Windows中使用ssh客户端连接,提示"ssh服务器拒绝了密码,请再试一次 ...

  7. .NET 中关于 TypeCode 和枚举类型的问题

    因为C#中没有提供 Switch on Type 的功能,因此要判断类型通常会用一长串的if else,当然这种写法的问题是不够高效,且不够美观.因此 C# 中对常见类型提供了一组枚举值,也就是 Ty ...

  8. include 问题

    http://blog.sina.com.cn/s/blog_573a052b0100kq1w.html

  9. Nhibernate对应关系参数介绍

    一.多对一关联映配置介绍 <many-to-one name="PropertyName" 属性名 column="column_name" 数据库字段名 ...

  10. 在Excel中将数字转换为大写

    123.09 = 壹佰贰拾叁元零玖分 =SUBSTITUTE(SUBSTITUTE(IF(G10<0,"負","")&TEXT(TRUNC(ABS ...