Redis 是一种以键值对(key-value)存储数据的NoSQL数据库。redis
键值对存储数据的本质是以某个键存储某个值。以后你能够用这个键把存储的值取出来。能够用SET
命令以键‘servername’存储值‘fido’:数据库
SET servername 'fido'
这样,数据就被存储了,以后可使用GET
取出刚刚存储的数据:数据结构
GET servername // 返回 "fido"
对于数据的操做,还有一些基本的命令,好比INCR
和DEL
。flex
INCR
用于原子地递增一个数值数据。而DEL
则是删除一个值。翻译
SET connections 10 INCR connections // 返回 11 INCR connections // 返回 12 DEL connections INCR connections // 返回 1
能够经过EXPIRE
设置一个值的存活时间,过了这个时间,该值就会被删除。经过TTL
能够查看值的存活时间。code
对于TTL
,server
若是一个值没有设置存活时间,那么TTL
会返回-1
,表示这个值不会过时(这是值的默认寿命:长生);对象
若是一个值设置了存活时间,在存活时间内,对值使用TTL
会返回相应的生命剩余时间;排序
若是对一个不存在的值或是已经超过存活时间(会被删除)的值使用TTL
,会返回-2
。教程
注意,每使用SET
设置一个值时,该值的TTL
都会被重置为默认。
例子:
SET resource:lock 'Redis Demo 1' TTL resource:lock // 返回 -1 EXPIRE resource:lock 120 //设置存活时间为120秒 // 7秒后 TTL resource:lock // 返回 113 // 120秒之后 TTL resource:lock // 返回 -2 SET resource:lock 'Redis Demo 2' TTL resource:lock // 返回 -1
Redis也支持一些复杂的/复合的(complex)数据结构。这里第一个要说的是列表。列表是一系列有序的值的集合。
与列表交互的几个重要方法有:RPUSH
, LPUSH
, LLEN
, LRANGE
, LPOP
和RPOP
。
RPUSH
和LPUSH
用于在列表的右端和左端插入数据。
LLEN
返回列表的长度。
LRANGE
返回一个子列表,它接收两个参数,它们标识你所要的子序列的首尾元素在原序列的位置。
若是第二个元素是-1,则表示到序列的末尾。
LPOP
和RPOP
删除并返回左右两端的第一个元素(跟栈的pop同样)。
例子(不用显式的建立列表,在向一个不存在的列表中插入值时,列表会被自动建立,当列表中的最后一个元素被pop后,列表会被自动删除):
RPUSH friends "Alice" // 建立一个列表friends并对其添加一个元素"Alice" RPUSH friends "Bob" // 向friends添加元素"Bob" LPUSH friends "Sam" // 向friends添加元素"Sam" LRANGE friends 0 -1 // 返回 1) "Sam", 2) "Alice", 3) "Bob" LRANGE friends 0 1 // 返回 1) "Sam", 2) "Alice" LRANGE friends 1 2 // 返回 1) "Alice", 2) "Bob" LLEN friends // 返回 3 LPOP friends // 返回 "Sam" RPOP friends // 返回 "Bob" LLEN friends // 返回 1 LRANGE friends 0 -1 // 返回 1) "Alice"
集合跟列表相似,可是集合是无序的,且集合内元素惟一。
集合的几个经常使用命令为:SADD
, SREM
, SISMEMBER
, SMEMBERS
和SUNION
。
SADD
向集合中添加值。
SREM
从集合中删除给定的值。
SISMEMBER
接收一个参数,用以判断该参数的值是否在集合中,若在集合中返回1,不然返回0。
若是不给参数,则返回整个列表。
SMEMBERS
返回集合中全部元素。
SUNION
合并两个集合。
例子(跟列表同样,集合也不用显式建立):
SADD superpowers "flight" SADD superpowers "x-ray vision" SADD superpowers "reflexes" SREM superpowers "reflexes" SISMEMBER superpowers "flight" // 返回 1 SISMEMBER superpowers "reflexes" // 返回 0 SMEMBERS superpowers // 返回 1) "flight", 2) "x-ray vision" SADD birdpowers "pecking" SADD birdpowers "flight" SUNION superpowers birdpowers // 返回 1) "pecking", 2) "x-ray vision", 3) "flight"
集合是个很好用的数据结构,可是由于它是无序的,在某些状况下使用会不太方便。因此Redis 1.2 引入了有序集合。
有序集合的命令是Z
开头,好比:有序集合的数据插入用的是ZADD
而不是SADD
。
有序集合跟常规集合相似,不过有序集合的每一个值都有一个与其关联的分数(associated score),这个分数用于排序集合内元素。
来一个例子:
ZADD hackers 1940 "Alan Kay" ZADD hackers 1906 "Grace Hopper" ZADD hackers 1953 "Richard Stallman" ZADD hackers 1965 "Yukihiro Matsumoto" ZADD hackers 1916 "Claude Shannon" ZADD hackers 1969 "Linus Torvalds" ZADD hackers 1957 "Sophie Wilson" ZADD hackers 1912 "Alan Turing"
在例子中,第一个参数(出生年)是排序的分数,下面获取索引值2到4的元素(从0开始):
ZRANGE hackers 2 4 // 返回 1) "Claude Shannon", 2) "Alan Kay", 3) "Richard Stallman"
Hashes
是字符串字段和字符串值之间的映射。因此它是表示对象的最佳数据类型:
HSET user:1000 name "John Smith" HSET user:1000 email "john.smith@example.com" HSET user:1000 password "s3cret"
使用HGETALL
得到存储的数据(返回全部的字段名和字段值):
HGETALL user:1000
也能够把对象的属性一次设置完:
HMSET user:1001 name "Mary Jones" password "hidden" email "mjones@example.com"
获取某个特定字段:
HGET user:1001 name // 返回 "Mary Jones"
数值类型在hash字段中也是很好用的,好比原子地步进一个数啥的都是能够的:
HSET user:1000 visits 10 HINCRBY user:1000 visits 1 // 返回 11 HINCRBY user:1000 visits 10 // 返回 21 HDEL user:1000 visits HINCRBY user:1000 visits 1 // 返回 1
本文翻译自 Try Redis。
到此为止,try redis教程结束。更多内容,请看下面连接: