String类型
String是最基本的类型,而且string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象。从内部实现来看其实 string 可以看作 byte 数组,最大上限是 1G 字节。
string类型数据操作指令简介
操作 | 作用 |
set key value | 设置key对应string类型的值,返回1表示成功,0失败。 |
setnx key value | 如果key不存在,设置key对应string类型的值。如果key已经存在,返回0。 |
get key | 获取key对应的string值,如果key不存在返回nil |
get set key value | 先获取key的值,再设置key的值。如果key不存在返回nil。 |
mget key1 key2 …… keyN | 一次获取多个key的值,如果对应key不存在,则对应返回nil |
mset key1 value1 …… keyN valueN | 一次设置多个key的值,成功返回1表示所有的值都设置了,失败返回0表示没有任何值被设置。 |
msetnx key1 value1 …… keyN valueN | 一次设置多个key的值,但是不会覆盖已经存在的key incr key 对key的值做++操作,并返回新的值。注意incr一个不是int的value会返回错误,incr一个不存在的key,则设置key值为1。 |
decr key | 对key的值做–操作,decr一个不存在key,则设置key值为-1。 |
incrby key integer | 对key加上指定值,key不存在时候会设置key,并认为原来的value 是0。 |
decrby key integer | 对key减去指定值。decrby完全是为了可读性,我们完全可以通过incrby一个负值来实现同样效果,反之一样。 |
hash类型
hash是一个string类型的field和value的映射表。添加,删除操作都是O(1)(平均)。 hash特别适合用于存储对象。相对于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。省内存的原因是新建一个hash对象时开始是用 zipmap(又称为 small hash)来存储的。这个 zipmap 其实并不是hashtable,但是zipmap相比正常的hash实现可以节省不少hash本身需要的一些元数据存储开销。尽管zipmap的添加,删除,查找都是 O(n),但是由于一般对象的field 数量都不太多。所以使用zipmap也是很快的,也就是说添加删除平均还是O(1)。如果field 或者 value的大小超出一定限制后,redis会在内部自动将zipmap替换成正常的hash实现.这个限制可以在配置文件中指定。
hash类型数据操作指令简介
操作 | 作用 |
hset key field value | 设置hash field为指定值,如果key不存在,则创建。 |
hget key field | 获取指定的hash field。 |
hmget key filed1….fieldN | 获取全部指定的hash filed。 |
hmset key filed1 value1 …… filedN valueN | 同时设置hash的多个field。 |
hincrby key field integer | 将指定的hashfiled 加上指定值。成功返回hashfiled变更后的值。 |
hexists key field | 检测指定field是否存在。 |
hdel key field | 删除指定的hash field。 |
hlen key | 返回指定hash的field数量。 |
hkeys key | 返回hash的所有field。 |
hvals key | 返回hash的所有value。 |
hgetall key | 返回hash的所有filed和value。 |
List类型
list是一个链表结构,可以理解为一个每个子元素都是 string 类型的双向链表。主要功
能是push、pop、获取一个范围的所有值等。操作中key理解为链表的名字。
List类型数据操作指令简介
操作 | 作用 |
lpush key string | 在key对应list的头部添加字符串元素,返回1表示成功,0表示key存在且不是list类型。 |
rpush key string | 在key对应list的尾部添加字符串元素。 |
llen key | 返回key对应list的长度,如果key不存在返回0,如果key对应类型不是list 返回错误。 |
lrange key start end | 返回指定区间内的元素,下标从0开始,负值表示从后面计算,-1表示倒数第一个元素 ,key不存在返回空列表。 |
ltrim key start end | 截取list指定区间内元素,成功返回1,key不存在返回错误。 |
lset key index value | 设置list中指定下标的元素值,成功返回1,key或者下标不存在返回错误。 |
lrem key count value | 从 List 的头部(count正数)或尾部(count负数)删除一定数量(count)匹配value的元素,返回删除的元素数量。count为0时候删除全部。 |
lpop key | 从list的头部删除并返回删除元素。如果key对应list不存在或者是空返回nil,如果key对应值不是list返回错误。 |
rpop key | 从list的尾部删除并返回删除元素。 |
blpop key1 …… keyN timeout | 从左到右扫描,返回对第一个非空list进行lpop操作并返回,比如blpop list1 list2 list3 0 ,如果list不存在list2,list3都是非空则对list2做 lpop并返回从list2中删除的元素。如果所有的list都是空或不存在,则会阻塞timeout秒,timeout为0表示一直阻塞。当阻塞时,如果有client对key1…keyN中的任意key 进行push操作,则第一在这个key上被阻塞的client会立即返回。如果超时发生,则返回 nil。有点像unix的select或者poll。 |
brpop | 同blpop,一个是从头部删除一个是从尾部删除。 |
3.1.4 Set类型
set是无序集合,最大可以包含(2的 32 次方-1)个元素。set 的是通过 hash table 实现的,所以添加,删除,查找的复杂度都是 O(1)。hash table 会随着添加或者删除自动的调整大小。需要注意的是调整 hash table 大小时候需要同步(获取写锁)会阻塞其他读写操作。可能不久后就会改用跳表(skip list)来实现。跳表已经在 sorted sets 中使用了。关于 set 集合类型除了基本的添加删除操作,其它有用的操作还包含集合的取并集(union),交集(intersection),差集(difference)。通过这些操作可以很容易的实现 SNS 中的好友推荐和 blog 的 tag 功能。
set类型数据操作指令简介
操作 | 作用 |
sadd key member | 添加一个string元素到key对应set集合中,成功返回1,如果元素以及在集合中则返回0,key对应的set不存在则返回错误。 |
srem keymember | 从key对应set中移除指定元素,成功返回1,如果member在集合中不存在或者key不存在返回0,如果key对应的不是set类型的值返回错误。 |
spop key | 删除并返回key对应set中随机的一个元素,如果set是空或者key不存在返回 nil。 |
srand member key | 同spop,随机取set中的一个元素,但是不删除元素。 |
smove srckey dstkey member | 从srckey对应set中移除member并添加到dstkey对应set中,整个操作是原子的。成功返回1,如果member在srckey中不存在返回0,如果key不是set 类型返回错误。 |
scard key | 返回set的元素个数,如果set是空或者key不存在返回0。 |
sis memberkey member | 判断member是否在set中,存在返回1,0表示不存在或者key不存在。 |
sinter key1 key2 …… keyN | 返回所有给定key的交集。 |
sinter store dstkey key1 ……. keyN | 返回所有给定key的交集,并保存交集存到dstkey下。 |
sunion key1 key2 …… keyN | 返回所有给定key的并集。 |
sunion store dstkey key1 …… keyN | 返回所有给定key的并集,并保存并集到dstkey下。 |
sdiff key1 key2 …… keyN | 返回所有给定key的差集。 |
sdiff store dstkey key1 …… keyN | 返回所有给定key的差集,并保存差集到dstkey下。 |
smembers key | 返回key对应set的所有元素,结果是无序的。 |
Sorted Set(跳跃表实现)
sorted set是有序集合,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,会自动重新按新的值调整顺序。可以理解了有两列的 mysql表,一列存value,一列存顺序。操作中key理解为sorted set的名字。
Sorted Set类型数据操作指令简介
操作 | 作用 |
add keyscore member | 添加元素到集合,元素在集合中存在则更新对应score。 |
zrem key member | 删除指定元素,1 表示成功,如果元素不存在返回 0。 |
zincrby key incr member | 增加对应 member 的 score 值,然后移动元素并保持skip list 保持有序。返回更新后的 score 值。 |
zrank key member | 返回指定元素在集合中的排名(下标),集合中元素是按 score 从小到大排序的。 |
zrevrank key member | 同上,但是集合中元素是按score 从大到小排序。 |
zrange key start end | 类似 lrange 操作从集合中去指定区间的元素。返回的是有序结果 |
zrevrange key start end | 同上,返回结果是按 score 逆序的。 |
zrangeby score key min max | 返回集合中 score 在给定区间的元素。 |
zcountkey min max | 返回集合中 score 在给定区间的数量。 |
zcard key | 返回集合中元素个数。 |
zscorekey element | 返回给定元素对应的 score。 |
zremrangebyrank key min max | 删除集合中排名在给定区间的元素。 |
zremrangebyscore key min max | 删除集合中 score 在给定区间的元素。 |