redis的五种数据类型基本用法总结

简言之:redis

redis 是一个开源的,高性能的,基于键值对的缓存存储系统。经过提供多种键值数据类型来适应不一样的场景下的缓存存储需求。同时redis的诸多高级功能使其能够胜任消息队列,任务队列等不一样的角色。缓存

数据类型和基本命令

字符串类型(String)

是redis最基本的类型,能存任何形式的字符串,包括二进制数据。一个string类型的key容许存储的最大容量是512MB,但劝你别这么干(存很大的数据),毕竟redis会把数据都加载到内存。post

在这个键foo存一个bar值,或者更新foo里面的存的值为bar:性能

SET foo bar网站

获取这个foo里面的值, 你将获得字符串bar:索引

GET foo队列

当键值里面存的是数字,可使用命令递增数字:内存

INCR foorem

它返回的是递增之后的值。若是里面存的不是数字,会报错。字符串

String类型应用场景示例:

  1. 访问量统计
  2. 生成自增id
  3. 存储其余你想存的字符串

其余命令:

增长指定的整数(返回增长后的值)

INCRBY key increment

减小指定的整数 && 减1(返回减小后的值)

DECRBY key decrement
DECR key

DECRBY key 5 和 INCRBY key -5的效果是同样的。

增长指定的浮点数(返回增长后的值)

INCRBYFLOAT key increment\

在键值尾部追加字符串(返回追加后的总长度)

APPEND key value

获取键值字符串长度

STRLEN key

同时设置 || 得到多个键值

MSET key1 value1 key2 value2
MGET key1 key2

散列类型(Hash)

若是咱们存的数据有多个部分组成,好比标题,做者,正文。这时候用散列比较合适了。散列类型的键值是一种字典结构,其存储了字段和字段值的映射。一个散列类型键最多能够包含2^32-1个字段。技术上并不要求每一个key存的字段都是一致的,如:key0里面存的字段是title,author; key1里面存的字段是content,title。

赋值&&取值

HSET key field1 value1
HGET key field1

同时设置 && 获取多个字段的值 && 获取全部字段和它们的值

HMSET key field1 value1 field2 value2
HMGET key field1 field2
HGETALL key

字段是否存在(不存在返回0,不然1):

HEXISTS key field

字段不存在时赋值(返回值与HEXISTS相反):

HSETNX key field value

增长数字(返回增长后的值):

HINCRBY key field increment

删除字段(返回被删的字段个数):

HDEL key field1 field2 ...

Hash应用场景示例

  1. 存储文章数据,或者别的多组成数据

其余命令:

只获取字段名 || 字段值

HKEYS key
HVALS key

得到字段数量

HLEN key

列表类型(List)

列表类型能够存储有序的字符串列表,常见的操做是向列表两端添加元素,或者获取列表的某个片断。它是由双向链表实现的,因此向两端添加元素的时间复杂度是O(1),获取越近两端的元素速度越快。这种特性使它能快速完成下面场景:如社交网站的新鲜事,咱们只关心最新的内容,即便里面的数据几千万个,咱们要找最新的100条也是很快的。一个列表类型的键最多能容纳2^32-1个元素。命令:

  1. 向列表两端增长元素:(返回增长后列表的长度)

LPUSH key value1 value2
RPUSH key value1 value2

  1. 从两端弹出元素:(返回弹出的元素)

LPOP key
RPOP key

  1. 获取列表中的元素的个数:(当key不存在返回0)

LLEN key

  1. 得到列表中的片断:(start,stop的全闭区间)

LRANGE key start stop

LRANGE支持负索引,-1表示最右边的元素,以此类推。

  1. 删除列表中指定的值:(返回删除元素的个数)

LREM key count value

将会删除列表中前count个值为value的元素。

  • 当count>0,将会删除列表中从左边开始,前count个值为value的元素
  • 当count<0,将会删除列表中从右边开始,前abs(count)个值为value的元素
  • 当count==0,将会删除列表中全部的,值为value的元素

List使用场景示例

  1. 文章id列表
  2. 评论列表
  3. 各类列表...

其余命令

  1. 获取 || 设置指定索引的元素值

LINDEX key index
LSET key index value

  1. 只保留列表的指定片断

LTRIM key start stop

  1. 向列表中插入元素

LINSERT key BEFORE|AFTER value1 value2

在列表中从左到右查找值为value1的元素,而后根据第二个参数before仍是after来肯定value2插在前面仍是后面。

  1. 将元素从一个列表转到另外一个列表

RPOPLPUSH source destination

从名字就能够看出它的功能:先从source列表类型键的右边弹出一个元素,而后将其加入到destination列表类型键的左边,并返回这个元素的值,整个过程是原子的。

集合类型(Set)

行为很像高中数学课教过的集合。它每一个元素是不一样的,且没有顺序,一个集合类型的键最多能够存2^32-1个字符串。redis集合内部是使用值为空的散列表实现的,因此向集合中加入元素,删除元素,判断元素是否存在,这些操做的时间复杂度都是O(1)。最方便的是多个集合之间能够取交集,并集,差集。

命令:

  1. 增长 && 删除元素(返回增长了多少个,删除了多少个)

SADD key value1 value2 ...
SREM key value1 value2 ...

  1. 得到集合中的全部元素

SMEMBERS key

  1. 判断元素是否在集合中(存在返回1,不然0)

SISMEMBER key value

  1. 取多个集合的差集

SDIFF key0 key1 key2 ...

这个例子的意思是:先求key0有而key1没有的元素集合keyTmp,而后再求keyTmp有而key2没有的元素集合。

  1. 取集合间的交集

SINTER key0 key1 key2 ...

求在三个几个都存在的元素集合。

  1. 取集合间的并集

SUNION key0 key1 key2 ...

Set使用场景示例

  1. 存储文章标签: 好比,使用键名为post:id:tags的键存储该篇文章的标签。但并无使用到集合的优点,这儿也可使用简单的字符串来存储标签。
  2. 经过标签搜索文章: 好比,使用键名为tag:标签名:postIds的集合类型的键存储文章id。 当咱们须要找标签同时知足‘MySQL’和‘Java’, 那咱们就能够用交集命令,飞快选出文章的id了。

其余命令

  1. 得到集合中元素的个数

SCARD key

  1. 进行集合运算并将结果存储

SDIFFSTORE destination key0 key1 key2 ...

将key0 key1 key2的差集存到destination键中。

SINTERSTORE destination key0 key1 key2 ...

将key0 key1 key2的交集存到destination键中。

SUNIONSTORE destination key0 key1 key2 ...

将key0 key1 key2的并集存到destination键中。

  1. 随机得到集合中的元素

SRANDMEMBER key [count]

  • 当count>0, 随机从集合中得到count个不一样元素
  • 当count<0, 随机从集合中得到abs(count)个可能有重复的元素
  1. 从集合中随机弹出一个元素

SPOP key

有序集合类型(ZSet)

与Set的区别就是‘有序’二字。 在集合的基础上,有序集合为每一个元素都关联了一个分数,这使得咱们不只能够完成插入删除,判断元素是否存在等操做,还能够得到分数最高(或最低)的前N个元素,得到指定分数范围内的元素等。元素是不一样的,可是它们分数能够相同。

命令:

  1. 增长元素(返回增长的元素个数)

ZADD key score1 value1 score2 value2 ...

若是元素已经存在则会替换元素的分数。分数是整数或者浮点数。

  1. 得到元素的分数

ZSCORE key value

  1. 得到排名在某个范围的元素列表(全闭区间)

ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]

ZRANGE 命令会按照元素从小到大的顺序返回索引从start到stop之间的元素,加上WITHSCORES会返回分数。ZREVRANGE则是从大到小的顺序。

  1. 得到指定分数范围的元素列表(全闭区间)

ZRANGEBYSCORE key min max [WITHSCORES] [limit offset count]
ZREVRANGEBYSCORE key min max [WITHSCORES] [limit offset count]

按照分数从小到大的顺序,返回分数在min到max之间的元素。若是但愿分数范围不包含端点值,能够这样:

ZRANGEBYSCORE key 80 (100

limit,offset的用法与SQL相同。即,在得到的元素基础上向后偏移offset个元素,而且只获取前count个。好比:

ZRANGEBYSCORE key 80 100 limit 1 3

ZREVRANGEBYSCORE则是从大到小的顺序。

  1. 增长某个元素的分数(返回更改后的分数)

ZINCRBY key increment value

ZSet使用场景示例

  1. 各类排行榜

其余命令

  1. 得到集合中元素的个数

ZCARD key

  1. 得到指定分数范围内的元素个数(全闭区间)

ZCOUNT key min max

要用开区间就用'('

  1. 删除一个或者多个元素(返回删除成功的数量)

ZREM key value1 value2 ...

  1. 按照排名范围删除元素(全闭区间,返回删除成功的数量)

ZREMRANGEBYRANK key start stop

按照从小到大的顺序,删除排名在start stop之间的元素,索引从0开始。

  1. 按照分数范围删除元素(全闭区间,返回删除成功的数量)

ZREMRANGEBYSCORE key min max

要开区间,则用'(',好比

ZREMRANGEBYSCORE key 80 (100

  1. 得到元素的排名

ZRANK key value
ZREVRANK key value

ZRANK从小到大,ZREVRANK从大到小,排名从0开始。

相关文章
相关标签/搜索