(二) Redis基础类型

Redis 数据结构


     Redis 不是一个无格式 ( plain ) 的键值存储 而是一个支持各种不同类型值的数据结构服务器.传统键值存储是关联字符串值到字符串键,但是Redis的值不仅仅局限于简单的字符串,它可以持有跟复杂的数据结构.
     Redis 支持的所有数据结构:
          二进制安全 ( binary-safe ) 的字符串
          列表: 按照插入顺序排序的字符串元素 ( element ) 的集合 ( collection ). 通常是链表
          集合: 唯一的,无需的字符串元素集合
          有序集合: 和集合类似,但是每个字符串元素关联了一个称为分数 ( score ) 的浮点数.元素总是按照分数排序,所以可以检索一个范围的元素.
          哈希: 由字段 ( field ) 及其关联的值组成的映射.字段和值都是字符串类型.这非常类似于 Ruby 或 Python中的哈希 / 散列.
          位数组 ( 位图 ): 使用特殊的命令,把字符串当作位数组来处理: 你可以设置或者清除单个位值,统计全部置位为1的位个数,寻找第一个复位或者置位的位,等操作.
          超重对数 ( HyperLogLog ): 这是一个用于估算集合的基数 ( cardinality, 也称势 ) 的概率性数据结构.
 
     以上为Redis的所有数据结构. 

 

Redis 键 ( Keys )


 

     Redis 键是二进制安全的.这意味着你可以使用任何二进制作为键,从像 "foo" 这样的字符串到一个 JPEG 文件的内容.空字符串也是合法的键.
     一些关于键的规则:
          不要使用太长的键,如:不要使用一个1024字节的键,不仅是因为内存占用,而且在数据集中查找键时需要多次耗时的键比较.即使手头需要匹配一个很大值的存在性,对其进行哈希 ( 例如使用 SHA1 ) 是个不错的注意,尤其是从内存和贷款的角度考虑.
          不要使用太短的键.用 "u1000flw" 取代 "user:1000:followers" 作为键并没有什么实际意义, 后者更具有可读性,相对于键对象本身以及值对象来说, 增加的空间微乎其微. 然而不可否认,短的键会消耗少的内存,当然我们找到平衡点就好了.
          坚持一种模式 ( schema ). 例如: "object-type:id" 就不错, 就像 "user:1000". 点或者横线常用来连接多单词字段,如 "comment:1234:reply.to", 或者 "comment:1234:reply-to".
          键的最大大小是512MB.

 

Redis 字符串 ( Strings )


 

Redis 字符串是可以关联给 redis 键的最简单值类型.
     由于 Redis 的键也是字符串,但我们使用字符串作为值的时候,我们是将一个字符串映射给另一个字符串.字符串数据类型适用与很多场景, 例如, 缓存 HTML 片段或者页面.
     
     尽管字符串是 Redis 最基本的值类型,你人可以执行很多有趣的操作.
     例如:原子性增长
     
     INCR 命令将字符串值解析为整数,并增加一,最后赋值后作为新值.
     当然还有一些类似的命令 INCRBY DECR 和 DECRBY. 它们以略微不同的方式执行,但其内部机制相同.
 
     INCR 命令是原子的.因为即使多个客户端对同一个键发送 INCR 命令也不会造成竞争条件 ( race condition ).
     有许多操作字符串的命令.例如 GETSET 命令给键设置一个新值,同时返回旧值.你可以使用这个命令,例如,如果你有一个系统,每当收到一个访问请求就用 INRC 来增加一个键.你想每隔一个小时收集一次这个信息,而不想漏掉任何一个增长.你可以使用 GETSET ,将新值赋值为 0, 然后读取其旧值.
 
     在一个命令中一次设置或者检索多个键有利于减少延迟.为此有了 MSET 和 MGET 命令:
     
     但使用 MGET 时, Redis 返回一值数组.

 

改变和查询键空间 ( key space )


 

     一些命令并不在定义的特定类型上,但是对键空间的交互很有用,因此他们能作用在任意键上.
     EXISTS 和 DEL
     例如, EXISTS 命令 它的返回值为 1 或者 0, 来表示键在数据库中是否存在. DEL 命令删除键和其关联的值.
     
     TYPE
     TYPE命令返回某个键值的类型
     

 

Redis 过期 ( expires ): 有限生存时间的键


 

     Redis过期 是一个与类型无关的特性. 我可以用它给键设置超时,也就是一个有限的生存时间.但生存时间到了,键就会自动被销毁,就像用户调用 DEL 命令一样.
     Redis过期的信息:
          过期时间可以设置为秒或者毫秒精度.
          过期时间分辨率总是 1 毫秒
          过期信息被复制和持久化到磁盘, 当 Redis 停止时时间仍然在计算 ( 也就是说Redis保存了过期时间 ).
     
     设置过期:
          
     键在两次 GET 调用期间消失了,因为设置了键超时后的第二次调用推迟了5秒.
     
     EXPIRE 命令可以设置过期 ( 也可以改变一个键的过期时间 )
     PERSISY 命令可以删除过期时间使键永远存在.
 
     当然我们也可以使用其它 Redis 命令来创建带过期时间的键.
     例如使用 SET 选项:
          

     上面例子中设置10秒过期的键,值为字符串100.然后使用 TTL 命令检查键的生存剩余时间.

     如果要使用毫秒来设置和检查过期,可以查看 PEXPIRE 和 PTTL 命令, 以及 SET 命令的全部选项.

 

posted @ 2017-08-18 15:51  问号是我  阅读(169)  评论(0编辑  收藏  举报