传统的key-value是指支持使用一个key字符串来索引value字符串的存储,而Redis中的value不仅仅支持字符串,还支持更多的复杂结构,包括列表,集合,哈希表等。
字符串是一种最基本的Redis值类型。一个Redis字符串能包含任意类型的数据,例如: 一张JPEG格式的图片或者一个序列化的Ruby对象。一个字符串类型的值最多能存储512M字节的内容。
$ sudo service redis-server start
$ redis-cli
> set mykey somevalue
> get mykey
可以SET
和GET
命令来创建和检索strings,SET
命令将取代现有的任何已经存在的key。
SET
命令还提供附加参数的选项.
> set mykey newval nx //只有在没有相同key的情况下成功
> set mykey newval xx //只有在有相同key的情况下成功
其他操作:
> set counter 100 //设置初始值
>
> incr counter //让value成为整数,并自增
> incrby counter 50 //加法
>
> decr counter //让value成为整数,并自减
>
> mset a 10 b 20 c 30 //一次性的完成多个key-value的对应关系
> mget a b c //返回一个value数组
Redis列表是简单的字符串列表,按照插入顺序排序。
LPUSH
命令插入一个新的元素到头部,RPUSH
插入一个新元素到尾部。
当一个这两个操作在一个空的Key上被执行的时候一个新的列表被创建。
如果清空一个列表那么对应的key将被从key空间删除。
> rpush mylist A
> rpush mylist B
> lpush mylist first
> lrange mylist 0 -1
1)"first"
2)"A"
3)"B"
注意:LRANGE
利用了两个检索值,0表示list的开头第一个,-1表示list的倒数第一个。
POP
命令可以选择不同的方向取出元素,POP
命令返回值为取出的元素。
Redis Hashes是字符串字段和字符串值之间的映射。可以存储数以百万计的对象在一个小的Redis实例中。
> hmset user:1000 username antirez birthyear 1977
> hget user:1000 username
"antirez"
> hget user:1000 birthyear
"1977"
> hgetall user:1000
1)"username "
2)"antirez"
3)"birthyear"
4)"1977"
HMSET
命令设置一个多域的hash表,HGET
命令获取指定的单域,HGETALL
命令获取指定key的所有信息。HMGET
类似于HGET,只是返回一个value数组。
> hmget user:1000 username birthyear no-such-field
1)"antirez"
2)"1977"
3)(nil)
可以根据需要对hash表的表项进行单独的操作,例如 HINCRBY
> hincrby user:1000 birthyear 10
(integer) 1987
Set是一个无序的字符串集合,可以以O(1)的时间复杂度完成添加,删除,以及测试元素是否存在。
Redis 集合不允许包含相同成员的属性,多次添加相同的元素,最终在集合里只会有一个元素。
可以在非常短的时间内进行合并(unions), 求交集(intersections),找出不同的元素(differences of sets)。
> sadd myset 1 2 3 //创建一个无序集合,返回集合元素个数
(integer) 3
> smembers myset //查看集合
1)"1"
2)"2"
3)"3"
> sismember myset 3
(integer) 1
> sismember myset 30
(integer) 0
//`SISMEMBER`用于查看集合是否存在,匹配项包括集合名和元素个数。匹配成功返回1,匹配失败返回0
Redis有序集合是一个没有重复元素的字符串集合。
有序集合的每一个成员都关联了一个评分,并按照从低到高的方式排序集合中的成员。
集合的成员是唯一的,但是评分可以是重复的。
有序集合可以以非常快的速度(O(log(N)))添加,删除和更新元素,也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。
ZADD
创建有序集合,同时给定评分。
ZRANGE
是查看正序的集合,ZREVRANGE
是查看反序的集合,使用WITHSCORES
参数返回记录值。
> zadd hackers 1 "A"
> zadd hackers 3 "C"
> zadd hackers 2 "B"
> zrange hackers 0 -1
1)"A"
2)"B"
3)"C"
> zrange hackers 0 -1 withscores
1)"A"
2)"1"
3)"B"
4)"2"
5)"C"
6)"3"