https://github.com/antirez/redis
安装很简单的。
key
EXISTS key
检查给定key是否存在,存在返回1,否则返回0
KEYS pattern
pattern是正则匹配模式。
查找所有符合给定模式pattern的key。
KEYS *匹配数据库中所有key 。
KEYS h?llo 匹配hello , hallo和 hxllo 等。
KEYS h*llo 匹配 hllo和heeeeello等。
KEYS h[ae]llo匹配 hello和hallo,但不匹配hillo 。
MOVE key db
将当前数据库的key移动到给定的数据库db当中。如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key,或者key不存在于当前数据库,那么MOVE没有任何效果。因此,可以利用这一特性,将MOVE当作锁(locking)原语(primitive)。移动成功返回1,失败则返回0。
# key 存在于当前数据库
redis> SELECT 0 # redis默认使用数据库 0,为了清晰起见,这里再显式指定一次。
OK
redis> SET song "secret base - Zone"
OK
redis> MOVE song 1 # 将 song 移动到数据库 1
(integer) 1
redis> EXISTS song # song 已经被移走
(integer) 0
redis> SELECT 1 # 使用数据库 1
OK
redis:1> EXISTS song # 证实 song 被移到了数据库 1 (注意命令提示符变成了"redis:1",表明正在使用数据库 1)
(integer) 1
# 当 key 不存在的时候
redis:1> EXISTS fake_key
(integer) 0
redis:1> MOVE fake_key 0 # 试图从数据库 1 移动一个不存在的 key 到数据库 0,失败
(integer) 0
redis:1> select 0 # 使用数据库0
OK
redis> EXISTS fake_key # 证实 fake_key 不存在
(integer) 0
# 当源数据库和目标数据库有相同的 key 时
redis> SELECT 0 # 使用数据库0
OK
redis> SET favorite_fruit "banana"
OK
redis> SELECT 1 # 使用数据库1
OK
redis:1> SET favorite_fruit "apple"
OK
redis:1> SELECT 0 # 使用数据库0,并试图将 favorite_fruit 移动到数据库 1
OK
redis> MOVE favorite_fruit 1 # 因为两个数据库有相同的 key,MOVE 失败
(integer) 0
redis> GET favorite_fruit # 数据库 0 的 favorite_fruit 没变
"banana"
redis> SELECT 1
OK
redis:1> GET favorite_fruit # 数据库 1 的 favorite_fruit 也是
"apple"
EXPIRE key seconds、PERSIST key、TTL key
EXPIRE为给定key设置/更新生存时间,当key过期时(生存时间为0),它会被自动删除。
redis> SET cache_page "www.google.com"
OK
redis> EXPIRE cache_page 30 # 设置过期时间为 30 秒
(integer) 1
redis> TTL cache_page # 查看剩余生存时间
(integer) 23
redis> EXPIRE cache_page 30000 # 更新过期时间
(integer) 1
redis> TTL cache_page
(integer) 29996
PERSIST移除给定key的生存时间,使得key永久有效。
TTL查看给定key的生存时间。
DEL key [key …]
删除给定的一个或多个key。不存在的key会被忽略,返回被删除key的数量。
# 删除单个 key
redis> SET name huangz
OK
redis> DEL name
(integer) 1
# 删除一个不存在的 key
redis> EXISTS phone
(integer) 0
redis> DEL phone # 失败,没有 key 被删除
(integer) 0
# 同时删除多个 key
redis> SET name "redis"
OK
redis> SET type "key-value store"
OK
redis> SET website "redis.com"
OK
redis> DEL name type website
(integer) 3
TYPE key
返回key所储存的值的类型。返回值为none (key不存在)、string (字符串)、list (列表)、set (集合)、zset (有序集)、hash (哈希表)。
String字符串
String(字符串),string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value,string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象,string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M。是一个key单Value。
set、get、del、append、strlen、mset、mget、msetnx
1、SET key value [EX seconds] [PX milliseconds] [NX|XX]
将字符串值value关联到key。如果key已经持有其他值,SET就全部覆写旧值包括属性(过期时间等),
EX过期时间为second秒。PX设置键的过期时间为millisecond毫秒。
NX :只在键不存在时,才对键进行设置操作。
XX :只在键已经存在时,才对键进行设置操作。
2、GET key
返回key所关联的字符串值。如果key不存在那么返回特殊值nil。假如key储存的值不是字符串类型,返回一个错误,因为GET只能用于处理字符串值。
3、APPEND key value
如果key已经存在并且是一个字符串, APPEND命令将value追加到key原来的值的末尾。如果key不存在,APPEND就简单地将给定key设为value,就像执行SET key value一样。
4、strlen
返回key所储存的字符串值的长度。当key储存的不是字符串值时,返回一个错误。
5、MSET key value [key value …]
同时设置一个或多个key-value对。
如果某个给定key已经存在,那么MSET会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用MSETNX命令:它只会在所有给定key都不存在的情况下进行设置操作。
MSET是一个原子性(atomic)操作,所有给定key都会在同一时间内被设置,某些给定 key被更新而另一些给定key没有改变的情况,不可能发生。
redis> MSET date "2012.3.30" time "11:00 a.m." weather "sunny"
OK
redis> MGET date time weather
1) "2012.3.30"
2) "11:00 a.m."
3) "sunny"
# MSET 覆盖旧值例子
redis> SET google "google.hk"
OK
redis> MSET google "google.com"
OK
redis> GET google
"google.com"
6、MGET key [key …]
返回所有(一个或多个)给定key的值。如果给定的key里面,有某个key不存在,那么这个key返回特殊值nil 。因此,该命令永不失败。
redis> SET redis redis.com
OK
redis> SET mongodb mongodb.org
OK
redis> MGET redis mongodb
1) "redis.com"
2) "mongodb.org"
redis> MGET redis mongodb mysql #不存在的 mysql 返回 nil
1) "redis.com"
2) "mongodb.org"
3) (nil)
setrange、getrange
1、SETRANGE key offset value
用value参数覆写(overwrite)给定key所储存的字符串值,从偏移量offset开始。不存在的key当作空白字符串处理。该命令会确保字符串足够长以便将value设置在指定的偏移量上,如果给定key原来储存的字符串长度比偏移量小(比如字符串只有5个字符长,但你设置的offset是10),那么原字符和偏移量之间的空白将用零字节(zerobytes, “\x00” )来填充。
注意你能使用的最大偏移量是 2^29-1(536870911) ,因为Redis字符串的大小被限制在512兆(megabytes)以内。如果你需要使用比这更大的空间,你可以使用多个key。
# 对非空字符串进行 SETRANGE
redis> SET greeting "hello world"
OK
redis> SETRANGE greeting 6 "Redis"
(integer) 11
redis> GET greeting
"hello Redis"
# 对空字符串/不存在的 key 进行 SETRANGE
redis> EXISTS empty_string
(integer) 0
redis> SETRANGE empty_string 5 "Redis!" # 对不存在的 key 使用 SETRANGE
(integer) 11
redis> GET empty_string # 空白处被"\x00"填充
"\x00\x00\x00\x00\x00Redis!"
2、GETRANGE key start end
返回key中字符串值的子字符串,字符串的截取范围由start和end两个偏移量决定(包括start和end在内)。负数偏移量表示从字符串最后开始计数, -1表示最后一个字符, -2表示倒数第二个,以此类推。
GETRANGE通过保证子字符串的值域(range)不超过实际字符串的值域来处理超出范围的值域请求。
redis> SET greeting "hello, my friend"
OK
redis> GETRANGE greeting 0 4 # 返回索引0-4的字符,包括4。
"hello"
redis> GETRANGE greeting -1 -5 # 不支持回绕操作
""
redis> GETRANGE greeting -3 -1 # 负数索引
"end"
redis> GETRANGE greeting 0 -1 # 从第一个到最后一个
"hello, my friend"
redis> GETRANGE greeting 0 1008611 # 值域范围不超过实际字符串,超过部分自动被符略
"hello, my friend"
incr、decr、incr by、decr by
将key对应的值增加或减少。
list(列表)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。单key多value。
lpush、rpush、lrange
1、LPUSH key value [value …]
将一个或多个值value插入到列表key的表头。如果有多个value值,那么各个value值按从左到右的顺序依次插入到表头:比如说,对空列表mylist执行命令LPUSH mylist a b c ,列表的值将是 c b a ,这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令。
如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。
当 key 存在但不是列表类型时,返回一个错误。
LPUSHX key value:将值value插入到列表key的表头,当且仅当 key 存在并且是一个列表。和 LPUSH 命令相反,当 key 不存在时, LPUSHX命令什么也不做。
# 加入单个元素
redis> LPUSH languages python
(integer) 1
# 加入重复元素
redis> LPUSH languages python
(integer) 2
redis> LRANGE languages 0 -1 # 列表允许重复元素
1) "python"
2) "python"
# 加入多个元素
redis> LPUSH mylist a b c
(integer) 3
redis> LRANGE mylist 0 -1
1) "c"
2) "b"
3) "a"
hash
Redis hash 是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Set(集合)
Redis的Set是string类型的无序集合。它是通过HashTable实现实现的,
Zset(有序集合)
zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。