(一) 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 还支持位图和超重对数这两种基于字符串基本类型,但有自己语义的数据类型.
把握好方向,踏着脚下的路.做一个傻子 - 终会有一个终点.