Redis数据类型
Redis支持5种数据类型,它们描述如下:
Strings - 字符串
字符串是 Redis 最基本的数据类型。Redis 字符串是二进制安全的,也就是说,一个 Redis 字符串可以包含任意类型的数据,一个字符串最大为 512M 字节。
1 redis 127.0.0.1:6379> SET name "hello" 2 OK 3 redis 127.0.0.1:6379> GET name 4 "hello"
列表 (Lists)
Redis 列表仅仅是按照插入顺序排序的字符串列表。可以添加一个元素到 Redis 列表的头部 (左边) 或者尾部 (右边)。
LPUSH 命令用于插入一个元素到列表的头部,RPUSH 命令用于插入一个元素到列表的尾部。当这两个命令操作在一个不存在的键时,将会创建一个新的列表。同样,如果一个操作会清空列表,那么该键将会从键空间 (key space) 移除。这些是非常方便的语义,因为列表命令如果使用不存在的键作为参数,就会表现得像命令运行在一个空列表上一样。
1 redis 127.0.0.1:6379> lpush listtest test1 2 (integer) 1 3 redis 127.0.0.1:6379> lpush listtest test2 4 (integer) 2 5 redis 127.0.0.1:6379> lpush listtest test3 6 (integer) 3 7 redis 127.0.0.1:6379> lrange listtest 0 -1 8 9 1 "test1" 10 2 "test2" 11 3 "test3"
集合 (Sets)
Redis 集合是没有顺序的字符串集合 (collection)。可以在 O(1) 的时间复杂度添加、删除和测试元素存在与否 (不管集合中有多少元素都是常量时间)。
Redis 集合具有你需要的不允许重复成员的性质。多次加入同一个元素到集合也只会有一个拷贝在其中。实际上,这意味着加入一个元素到集合中并不需要检查元素是否已存在。
Redis 集合非常有意思的是,支持很多服务器端的命令,可以在很短的时间内和已经存在的集合一起计算并集,交集和差集。
redis 127.0.0.1:6379> sadd setdemo set1 (integer) 1 redis 127.0.0.1:6379> sadd setdemo set2 (integer) 1 redis 127.0.0.1:6379> smembers setdemo1) "set1" 2) "set2"
Hashes - 哈希值
Redis的哈希键值对的集合。 Redis的哈希值是字符串字段和字符串值之间的映射,所以它们被用来表示对象。
redis 127.0.0.1:6379> HMSET user:1 username testname password 123456 OK redis 127.0.0.1:6379> HGETALL user:11) "testname" 2) "123456"
有序集合 (Sorted sets)
Redis 有序集合和 Redis 集合类似,是非重复字符串集合 (collection)。不同的是,每一个有序集合的成员都有一个关联的分数 (score),用于按照分数高低排序。尽管成员是唯一的,但是分数是可以重复的。
对有序集合我们可以通过很快速的方式添加,删除和更新元素 (在和元素数量的对数成正比的时间内)。由于元素是有序的而无需事后排序,你可以通过分数或者排名 (位置) 很快地来获取一个范围内的元素。访问有序集合的中间元素也是很快的,所以你可以使用有序集合作为一个无重复元素,快速访问你想要的一切的聪明列表:有序的元素,快速的存在性测试,快速的访问中间元素!
总之,有序集合可以在很好的性能下,做很多别的数据库无法模拟的事情。
redis 127.0.0.1:6379> zadd list 0 name1 (integer) 1 redis 127.0.0.1:6379> zadd list 0 name2 (integer) 1 redis 127.0.0.1:6379> ZRANGEBYSCORE list 0 10001) "name1" 2) "name2"