Redis五种数据类型以及其应用场景
背景
Redis是nosql数据库中的一种,也是目前市面上广泛被使用的数据库之一,因为Redis也是内存型数据库,数据存储在内存里,因此它的IO非常之高,我们也常常利用他做缓存的设计来解决并发的问题。
在使用Redis进行缓存设计时,很有必要了解下它支持的五种数据类型以及其应用场景。
数据类型
字符串类型(string)
概念
- 简单的key-value类型,value可以为字符串和数字,实际存储时按照字符串类型存储
- Redis中的字符串是一个字节序列。Redis中一个字符串最多能存储高达512MB的内容
常见操作
set key value
设置key对应的值get key
获取key的值incr key 1
自增操作,1为可设置的值,代表自增的值decrby key 1
自减操作,1为可设置的值,代表自减的值
应用场景
- 常规的key-value缓存应用。常规计数:微博数,粉丝数,点赞数,访问量,库存数量等
哈希类型(hash)
概念
- 是一个string类型的field和value的映射表,hash特别适合用于存储对象
常见操作
hmset key field1 value1 field2 value2
设置hash某对象的字段及其映射的值hset key field value
设置单个字段的值hgetall key
获取key对象的所有field及其映射的值hget key field
获取key对象指定field的valuehvals key
获取hash中所有的值hdel key field
删除指定fieldhexists key field
判断指定field是否存在hkeys key
获取hash表对应所有field
应用场景
- 存储部分可能需要变更的数据,比如用户信息、文章信息。这部分通过redis做个缓存。
列表类型(list)
概念
- 有序可重复列表
- 列表本质是是双向链表,可以通过Push或者Pop操作从头部或者尾部增加或删除元素,按照一定的策略可以当做栈或者队列使用
常用操作
llen key
获取列表的长度lpop key
移除并获取列表的第一个元素- ‘lpush key value1 value2…’ 将一个值或多个值插入到列表头部
lrange key start stop
获取列表指定范围内的元素rpop key
移除列表最后一个元素,并返回其值rpush key value1 value2
在列表尾部添加一个或多个值lindex key index
通过索引获取列表指定元素
应用场景
- 关注列表,粉丝列表等可以使用列表实现。
- Redis列表也通常用于消息队列的服务,假如一个应用程序正在执行lpush操作向列表中添加新的元素,我们将这个程序称为“生产者”,与之对应的另外一个程序执行rpop从列表中取出元素,我们称之为“消费者”
集合(set)
概念
- 无序不可重复列表
- 集合成员是唯一的,意味着集合中不能出现重复的数据
- 可以使用集合的交并差等方法进行集合间的计算
- 集合是通过哈希表实现的,所以添加、删除、查找的时间复杂度都是O(1)
常用操作
sadd key value
插入数据smembers key
获取集合的数据scard key
获取集合的成员数sdiff key1 key2
返回给定所有集合的差集sinter key1 key2
返回给定所有集合的交集sunion key1 key2
返回给定所有集合的并集
应用场景
- 存储并计算关系(例如关注人,粉丝等数据通过交集可实现共同关注,共同喜好等功能)
- 利用唯一性,可以对数据进行去重
有序集合(sorted set)
概念
- 每个元素带有分值的集合
- 虽然成员是唯一的,但是分值可以重复
常用操作
zadd key score1 value1
向有序集合添加一个或多个成员,或者更新已存在成员分数zcard key
获取有序集合的成员数zrange key start end
通过索引区间返回有序集合指定区间内的成员
应用场景
- 可应用到排行榜中,再利用分数进行排序,然后可以通过方法获取top10等
- 如果需要一个有序不重复的集合列表,可以使用,例如将文章发表的时间作为分数,可以实现文章发布时间线等功能
注意
- 在设置key的时候需要注意命名空间的规范,以
:
为间隔符,按照项目:模块:id等格式设置key,这样可以在团队协作中起很大作用