Redis学习笔记1-Redis数据类型

Redis数据类型

Redis支持5种数据类型,它们描述如下:

Redis学习笔记1-Redis数据类型

 

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 setdemo

1) "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:1

1) "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 1000

1) "name1"
2) "name2"