Redis是一个开源的的键值存储或缓存,它提供了丰富的数据类型。主要包括字符串,散列,列表,集合和有序集合,不同的数据类型有不同的适用场景。本文对Redis各个数据类型做简单的介绍以便新接触redis的童鞋能够尽快的熟悉和使用。
1.字符串类型
定义该类型的数据能够存储任何形式的字符串,甚至包括图片,JSON对象等。但是存储大小有一定的限制,如每个键值最大为512M,但是这足以满足绝大部分的应用。字符串类型是Redis存储的基本类型,从某种意义上来说其它集中数据类型也是对字符串类型的组合。
简单的客户端使用命令如下图:
2.HASH类型
散列类型类似于字典的结构,适合存储某一实体的具体属性。如book,有作者、出版社、出版日期等信息。实际上其存储的是字段和相应值的映射。
简单使用如下图:
3.列表类型
列表类型实际上存储的是一个有序的字符串列表,这与下面的集合类型对应。常用的列表操作就是在两端添加元素,或者获得列表中某一段的数据。列表实际上是使用双向链表来实现的,所以在表两端添加元素是很快的。但是当查列表中间的某些元素时,效率并不太高。
列表的简单用法如下:
其实列表的使用场景还是比较广的,如队列的实现,日志的存储等,上图中可以利用LPUSH和LPOP实现栈的应用,利用LPUSH和RPOP实现队列的用法(LRANGE命令显示列表中的数据,0和-1分别代表左右边界)。
4.集合类型
这里的集合实际上类似于数学中的集合,常用与判断某元素是否存在,如微博中好友关系的缓存。集合在Redis内部是使用值为空的散列表实现的。所以这些操作的时间复杂度为O(1)。使用集合可以方便的做集合运算,如交并差等,例如微博中可以轻易的显示出两个帐号的共同好友。
简单的集合命令使用如下:
也可以将2个集合的运算结果存到另一个集合类型中:
5.有序集合类型
在集合类型上,有序集合为集合中的每个元素都关联一个分数。可以基于分数对有序集合值进行范围内获取,排序等操作。具体使用情况如下:
6.应用场景
笔者供职于一家游戏公司,就目前的应用来看,Redis被广泛的应用在数据的缓存上。基本上是配置MySQL或者MongoDB作为DB层的数据存储使用。简单的分析下其各个类型的应用场景。
字符串:一般用于帐号的映射。
散列:主要用户帐号角色信息及其附属的装备道具的存储。
列表:队列的应用,DB数据的缓写等
集合:用户单属性记录如好友等信息
有序集合:如全局排行等
过期时间:常用于定期活动礼包的发放
关于Redis的数据类型就先介绍到这儿,后续将进一步介绍Redis的高级特性。