Redis五种数据类型以及其应用场景


Redis五种数据类型以及其应用场景

背景

Redis是nosql数据库中的一种,也是目前市面上广泛被使用的数据库之一,因为Redis也是内存型数据库,数据存储在内存里,因此它的IO非常之高,我们也常常利用他做缓存的设计来解决并发的问题。

在使用Redis进行缓存设计时,很有必要了解下它支持的五种数据类型以及其应用场景。

数据类型

字符串类型(string)

概念

  1. 简单的key-value类型,value可以为字符串和数字,实际存储时按照字符串类型存储
  2. Redis中的字符串是一个字节序列。Redis中一个字符串最多能存储高达512MB的内容

常见操作

  1. set key value 设置key对应的值
  2. get key 获取key的值
  3. incr key 1 自增操作,1为可设置的值,代表自增的值
  4. decrby key 1 自减操作,1为可设置的值,代表自减的值

应用场景

  1. 常规的key-value缓存应用。常规计数:微博数,粉丝数,点赞数,访问量,库存数量等

哈希类型(hash)

概念

  1. 是一个string类型的field和value的映射表,hash特别适合用于存储对象

常见操作

  1. hmset key field1 value1 field2 value2 设置hash某对象的字段及其映射的值
  2. hset key field value 设置单个字段的值
  3. hgetall key 获取key对象的所有field及其映射的值
  4. hget key field 获取key对象指定field的value
  5. hvals key 获取hash中所有的值
  6. hdel key field 删除指定field
  7. hexists key field 判断指定field是否存在
  8. hkeys key 获取hash表对应所有field

应用场景

  1. 存储部分可能需要变更的数据,比如用户信息、文章信息。这部分通过redis做个缓存。

列表类型(list)

概念

  1. 有序可重复列表
  2. 列表本质是是双向链表,可以通过Push或者Pop操作从头部或者尾部增加或删除元素,按照一定的策略可以当做栈或者队列使用

常用操作

  1. llen key 获取列表的长度
  2. lpop key 移除并获取列表的第一个元素
  3. ‘lpush key value1 value2…’ 将一个值或多个值插入到列表头部
  4. lrange key start stop 获取列表指定范围内的元素
  5. rpop key 移除列表最后一个元素,并返回其值
  6. rpush key value1 value2 在列表尾部添加一个或多个值
  7. lindex key index 通过索引获取列表指定元素

应用场景

  1. 关注列表,粉丝列表等可以使用列表实现。
  2. Redis列表也通常用于消息队列的服务,假如一个应用程序正在执行lpush操作向列表中添加新的元素,我们将这个程序称为“生产者”,与之对应的另外一个程序执行rpop从列表中取出元素,我们称之为“消费者”

集合(set)

概念

  1. 无序不可重复列表
  2. 集合成员是唯一的,意味着集合中不能出现重复的数据
  3. 可以使用集合的交并差等方法进行集合间的计算
  4. 集合是通过哈希表实现的,所以添加、删除、查找的时间复杂度都是O(1)

常用操作

  1. sadd key value 插入数据
  2. smembers key 获取集合的数据
  3. scard key 获取集合的成员数
  4. sdiff key1 key2 返回给定所有集合的差集
  5. sinter key1 key2 返回给定所有集合的交集
  6. sunion key1 key2 返回给定所有集合的并集

应用场景

  1. 存储并计算关系(例如关注人,粉丝等数据通过交集可实现共同关注,共同喜好等功能)
  2. 利用唯一性,可以对数据进行去重

有序集合(sorted set)

概念

  1. 每个元素带有分值的集合
  2. 虽然成员是唯一的,但是分值可以重复

常用操作

  1. zadd key score1 value1 向有序集合添加一个或多个成员,或者更新已存在成员分数
  2. zcard key 获取有序集合的成员数
  3. zrange key start end 通过索引区间返回有序集合指定区间内的成员

应用场景

  1. 可应用到排行榜中,再利用分数进行排序,然后可以通过方法获取top10等
  2. 如果需要一个有序不重复的集合列表,可以使用,例如将文章发表的时间作为分数,可以实现文章发布时间线等功能

注意

  1. 在设置key的时候需要注意命名空间的规范,以:为间隔符,按照项目:模块:id等格式设置key,这样可以在团队协作中起很大作用

文章作者: 我若为侠
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 我若为侠 !
 上一篇
SQL 优化之 Explain 命令 SQL 优化之 Explain 命令
SQL 优化之 Explain 命令背景在SQL优化的时候我们都会使用Explain命令去查看该条SQL的执行计划信息。 使用 Explain 关键字可以模拟优化器执行SQL语句,分析查询语句或是结构的性能瓶颈。在select语句之前增加E
下一篇 
Mysql 多列字段索引 最左匹配原则理解 Mysql 多列字段索引 最左匹配原则理解
Mysql 多列字段索引 最左匹配原则理解背景在理解Mysql 索引的时候,有看到一篇关于 最左匹配原则的博客,感觉写的挺有意思的,因此做下记录 多列字段索引他数据结构是什么样的?索引的底层数据就是一颗BTree,那么联合索引(多列字段索引
  目录