(一) Redis学习手册 简介 和 数据初探

Redis 简介


     Redis 是一款 高级键值 ( key-value ) 缓存 ( cache ) 和存储 ( store ) 系统。
 
     Redis 的键包括 string ( 字符串 ) , hash ( 哈希/散列 ) , list ( 列表 ) , set ( 集合 ), sorted set ( 有序集合 ) , bitmap ( 位图 ) 和 hyperloglog ( 超重对数 ) , 所以也被称为数据结构服务器
     你可以在这些类型上面运行原子操作.
     例如:追加字符串,增加哈希中的值,加一个元素到列表,计算集合的交集,并集和差集,或者是从有序集合中获取最高排名的元素.
 
     Redis 采用内存 ( in-memory ) 数据集 ( dataset ).根据使用场景的不同,可以定时转储数据集到磁盘,或最佳每条命令到日志来保持持久化.当然也可以担当网络化的内存缓存
 
     Redis 支持主从异步复制,非常快的非阻塞初次同步,网络断开时自动重连局部重同步.
          特性:
               事务
               订阅/发布
               Lua脚本
               带TTL的键
               LRU回收键
               自动故障转移 ( failover )

 

字符串


     Redis最基本的数据类型. ( Redis字符串是二进制安全的 可以包含图像数据 或者序列化对象数据 )

     一个字符串最大为512M字节
 
     INCR 命令族 ( INCR, DECR, INCRBY ) : 将字符串作为原子计数器
     APPEND 命令 : 可以追加字符串
     GETRANGE 和 SETRANGE 命令 : 使字符串作为随机访问向量 ( vectors )
     编码大量数据到很小的空间,或者使用 GETBIT 和 SETBIT 命令, 创建一个基于 Redis 的布隆 ( Bloom ) 过滤器.

 

列表


 

      列表仅仅是按照插入顺序排序的字符串列表. 可以添加一个元素到 Redis 列表的头部或者尾部.

 
     LPUSH : 插入一个元素到列表的头部, RPUSH 插入一个元素到列表的尾部. 如若插入中对应要操作的键值不存在,则创建一个新的列表. 反之如若一个操作会清空列表,那么该列表对应键也会从键空间(key space)移除.

 

     特性:
          访问列表两端的元素会非常快速,但是访问中间的是非常慢的 ( O(N) 时间复杂度 ).

 

集合


 

     集合是没有顺序的字符串集合 ( collection ).可以在 O(1) 的时间复杂度添加/删除和测试元素存在与否 (不管集合中有多少元素都是常量时间)

     集合具有你需要的不允许重复成员的性质.
 
     集合支持很多服务器端的命令,可以在很短的时间内和其它集合一起计算并集/交集/差集.

 

哈希/散列 ( Hashes )


 

     Redis 哈希是字符串字段 ( filed ) 与字符串之间的映射,所以是表示对象的理想数据类型 ( 例如 : 一个用户对象有多个字段,像用户名,姓名,年龄等等) :  

     
     拥有少量字段 ( 少量指的是大约100 ) 的哈希会以占用很少存储空间的方式存储,所以我们可以在一个很小的Redis实例里存储数百万对象.
 
     由于哈希主要用来表示对象,对象能存储很多元素,所以你可以用哈希来做很多其他的事情.
 
     每个哈希可以存储多达 223-1 个字段值对 ( field-value pair ) ( 多于40亿个 )

 

有序集合 ( Sorted sets )


 

      有序集合和Redis集合类似,是非重复字符串集合 ( collection ).但每一个有序集合的成员都有一个关联的分数 ( score ) ,用于按照分数高低排序.虽然成员是唯一的,但是分数是可以重复的.

     有序集合可以通过很快速的方式添加/删除/更新元素 ( 在和元素数量的对数成正比的时间内 ).又因元素是有序的而无需事后排序,所以可以通过分数或者排名 ( 位置 ) 很快地来获取一个范围内的元素.并且访问有序集合的中间元素也是很快的,所以你可以使用有序集合合作为一个无重复元素,快速访问你想要的一切的聪明列表:有序的元素,快速的存在性测试,快速的访问中间元素!
 
     有序集合的一些适用情况:
 
     多人在线游戏排行榜.
          每次提交一个新的分数,就使用 ZADD 命令更新~
          可以使用 ZRANGE 命令获取前几名用户.
          可以使用 ZRANK 命令, 通过给定用户名返回其排行》
          同时使用 ZRANK 和 ZRANGE 命令可以暂时与给定用户相似的用户及其分数.
 
     有序集合常用来索引存储在 Redis 内的数据.
 
          例如,假设我有很多表示用户的哈希,我可以使用有序集合,用年龄作为元素的分数,用用户ID作为元素值,于是我就可以使用 ZRANGEBYSCORE 命令很快且轻而易举地检索出给定年龄区间的所有用户了.
 
     有序集合或许是最高级的 Redis 数据类型.~'

 

位图 ( BitMaps ) 和超重对数 ( HyperLogLogs )


 

     Redis 还支持位图和超重对数这两种基于字符串基本类型,但有自己语义的数据类型.

 

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