Strings - 字符串
Redis的字符串是字节序列。在Redis中字符串是二进制安全的,这意味着他们有一个已知的长度,是没有任何特殊字符终止决定的,所以可以存储任何东西,最大长度可达512兆。
例子
redis 127.0.0.1:6379> SET name "yiibai"OKredis 127.0.0.1:6379> GET name"yiibai"
在上面的例子使用Redis命令set和get,Redis的名称是yiibai的键存储在Redis的字符串值。
注:字符串值可以存储最大512兆字节的长度。
String类型支持的命令
set key value | 设置key对应String类型的值,返回1表示成功,返回0表示失败 |
setnx key value | 如果key不存在,设置key对应String类型的值。如果key已经存在,返回0 |
get key | 获取key对应String值,如果key不存在则返回nil。 |
getset key value | 先获取key对应String值,再设置key的值,如果key不存在,则返回nil |
mget key1 key2....keyN | 一次获取多个key的值,如果对应key不存在,则对应返回nil |
mset key1 value1..keyN vlaueN | 一次设置多个key的值,成功返回1。失败返回0,表示没有任何值被设置 |
msetnx key1 value1..keyN vlaueN | 一次设置多个key的值,但是不会覆盖已经存在的key |
incr key | 向key对应的值加1,并返回新值。如果key的值不是int,则返回错误,incr一个不存在的key时,则设置key的值1 |
decr key | 向key对应的值减1,并返回新值。如果key的值不是int,则返回错误,incr一个不存在的key时,则设置key的值-1 |
incrby key integer | 向key对应的值增加一个指定的整数integer,如果key的值不是int,则返回错误,如果key不存在,则默认之前key为0 |
decrby key integer | 向key对应的值减一个指定的整数integer,如果key的值不是int,则返回错误,如果key不存在,则默认之前key为0 |
Hashes - 哈希值
Redis的哈希键值对的集合。 Redis的哈希值是字符串字段和字符串值之间的映射,所以它们被用来表示对象
例子
redis 127.0.0.1:6379> HMSET user:1 username yiibai password yiibai points 200OKredis 127.0.0.1:6379> HGETALL user:11) "username"2) "yiibai"3) "password"4) "yiibai"5) "points"6) "200"
在上面的例子中的哈希数据类型,用于存储包含用户的基本信息用户的对象。这里HMSET,HEXTALL对于Redis 命令 user:1 是键。
每个哈希可存储多达232 - 1个 字段 - 值对(超过4十亿)。
Hash类型支持的命令
hset key field value | 设置key对应的Hash对象中指定域的值。如果key对应的hash对象不存在,则创建此hash对象。如果指定的对象已经存在,则其值重写。 |
hget key field | 返回与field域关联的值,如果该域不存在或者key对应的hash对象不存在则返回nil |
hmget key field1 field2 ...fieldN | 返回存储在key对应的hash对象中各个指定域相关的值,如果不存在则,对应返回nil |
hmset key field1 value1...fieldN valueN | 设置多个存储在key对应的hash对象中指定域的值,该命令会复写已经存在的值,如果key对应的对象不存在,则创建此hash对象 |
hincrby key field integer | 将储存在key的hash对象field域相关联的值加上integer,如果key对应的hash对象不存在,则创建此对象。如果field域不存在或者为一个不能表示整型的字符串值,则在执行该操作前设置为0 |
hexists key field | 查看指定field域是否已经存在,存在返回1,不存在返回0 |
hdel key field | 删除指定field域的,返回1。如果指定的域或key不存在,返回值为0 |
hlen key | 返回key对应的hash对象中field数,如果key不存在,则返回0 |
hkeys key | 返回key对应的hash对象中所有的field名称 |
hvals key | 返回key对应的hash对象中所有的值 |
hgetall key | 返回key对应的hash对象中所有域和相关的值,在返回值中,每个域名称后面跟着相关联的值 |
Lists - 列表
Redis的列表是简单的字符串列表,排序插入顺序。可以添加元素到Redis列表的头部或尾部。
例子
redis 127.0.0.1:6379> lpush tutoriallist redis(integer) 1redis 127.0.0.1:6379> lpush tutoriallist mongodb(integer) 2redis 127.0.0.1:6379> lpush tutoriallist rabitmq(integer) 3redis 127.0.0.1:6379> lrange tutoriallist 0 101) "rabitmq"2) "mongodb"3) "redis"
列表的最大长度为232- 1元素(4294967295,每个列表中的元素超过4十亿)。
List类型支持的命令
lpush key string | 向key对应List头部增加一个字符串元素,成功返回1,失败返回0 |
rpush key string | 向key对应List尾部增加一个字符串元素,成功返回1,失败返回0 |
llen key | 返回key对应List的长度,如果key不存在则返回0,如果key对应类型不是list则返回错误 |
lrange key start end | 返回指定区间(start~end)的元素,下表从0开始,负值表示从尾部开始计算,key不存在返回空列表 |
ltrim key start end | 截取List指定区间内(start~end)的元素,成功返回1,key不存在返回错误.截取是指将除截取外的元素删除。如果end小于start则删除全部。 |
lset key index value | 设置List指定下表为index元素的值,如果key或者index不存在,则返回错误 |
lrem key count value | 删除一定数量(count绝对值)的匹配value的元素,count为正数时,从头部删除,count为负数时从尾部删除,count为0时,删除全部 |
lpop key | 从list的头部删除并返回删除元素,如果key对应的list不存在或者为空,则返回nil,如果key的类型不为list则返回错误 |
rpop key | 从list的尾部删除并返回删除元素,同lpop |
blpop key [key1 [key2]..] timeout | 从左到右扫描key-keyN,返回第一个非空List进行pop操作并返回操作的key以及lpop出的值。如果所有的list都是空或者不存 在,阻塞timeout秒,timeout为0时表示一直阻塞。阻塞时如果其他客户端对key-keyN中进行了push操作,阻塞解除并返回。如 果设置了timeout不为0,超时发生时返回nil |
brpop key [key1 [key2]..] timeou | 与blpop类似,不过是从右到左扫描 |
Sets - 集合
Redis集合是字符串的无序集合。在Redis中可以添加,删除和测试文件是否存在在O(1)的时间复杂度的成员。Set数据类型的优点是快速查找元素是否存在,用于记录一些不能重复的数据。
Set类型命令
sadd key member | 增加一个String元素到key对应的set集合中,成功返回1,如果元素已经在集合中则返回0,如果key对应的set不存在则返回错误。 |
srem key member | 从key对应的set集合中删除指定的member,成功则返回1,如果member不存在或者key不存在,则返回0,如果key对应的set不存在则返回错误。 |
spop key | 删除并返回key对应set集合中随机一个元素,如果set为空或者key对应的set集合不存在则返回nil |
srandmember key | 同spop,随机取set中的一个元素,但不删除元素 |
smove srckey dstkey member | 从srckey对应set中移除member并添加到dstkey对应的set中,整个操作是原子的。成功返回1,如果member在srckey中不存在返回0,如果key对应的值不是set类型,则返回错误 |
scard key | 返回set的元素的个数,如果set是空或者key不存在返回0 |
sismember key member | 判断member是否在set中,存在返回1,不存在或者key对应的set集合不存在返回0 |
sinter key1 key2...keyN | 返回所有给定key的交集 |
sinterstore dstkey key1...keyN | 同sinter,同时将交集存到dstkey对应的set集合中 |
sunion key1...keyN | 返回所有给定key的并集 |
sunionstore dstkey key1...keyN | 同sunion,同时将并集存到dstkey对应的set集合中 |
sdiff key1...keyN | 返回所有给定key的差集 |
sdiffstore dstkey key1....keyN | 同sdiff,同时将差集存到dstkey对应的set集合中 |
smembers key | 返回key对应set的所有元素,结果是无序的 |
例子
redis 127.0.0.1:6379> sadd tutoriallist redis(integer) 1redis 127.0.0.1:6379> sadd tutoriallist mongodb(integer) 1redis 127.0.0.1:6379> sadd tutoriallist rabitmq(integer) 1redis 127.0.0.1:6379> sadd tutoriallist rabitmq(integer) 0redis 127.0.0.1:6379> smembers tutoriallist1) "rabitmq"2) "mongodb"3) "redis"
注意:在上面的例子中rabitmq设置属性加两次,但由于唯一性只加一次。
成员中集最大数量为232 - 1(4294967295,集合成员超过4十亿)。
Sorted Set类型
Sorted Set类型与Set类型类似。不同的是,Set是无序的,而Sorted Set是有序的集合,Sorted Set通过一个double类型的整数score进行排序。Sorted Set通过SkipList(跳跃表)和HashTable组合而成,SkipList负责排序功能,而HashTable负责保存数据
zadd key score member | 添加元素member到集合,元素在集合中存在则更新对应的score |
zrem key member | 删除指定元素,1表示成功,如果元素不存在返回0 |
zincrby key incr member | 增加对应member的score值,并且重新排序,返回更新后的score值 |
zrank key member | 返回指定元素在集合中的排名(下标),集合中元素按score从小到大排序 |
zrevrank key member | 同zrank,但是集合中的元素按score从大到小排序 |
zrange key start end | 从集合中指定区间的元素。返回结果按score顺序排序 |
zrevrange key start end | 同zrange,返回结果按score逆序排序 |
zrangebyscore key min max | 返回集合中score在给定区间的元素 |
zcount key min max | 返回集合中score在给定区间的数量 |
zcard key | 返回集合中元素的个数 |
zscore key element | 返回给定元素的score值 |
zremrangebyrank key min max | 删除集合中排名在给定区间的元素 |
zremrangebyscore key min max | 删除集合中score在给定区间的元素 |
例子
redis 127.0.0.1:6379> zadd tutoriallist 0 redis(integer) 1redis 127.0.0.1:6379> zadd tutoriallist 0 mongodb(integer) 1redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq(integer) 1redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq(integer) 0redis 127.0.0.1:6379> ZRANGEBYSCORE tutoriallist 0 10001) "redis"2) "mongodb"3) "rabitmq"