所有分类
  • 所有分类
  • 未分类

Redis-数据类型及其使用场景

简介

本文介绍Redis的所有数据类型,包括:含义、应用场景、最大存储量。

string(字符串)

简介

字符串类型是redis最基础的数据结构,其他几种结构都是在字符串类型基础上构建的。String数据结构是简单的key-value类型,key是String,value不仅可以是String,也可以是数字。

使用场景

  1. 缓存功能
    1. 对于比较费时的、访问比较频繁的查询接口,可以将数据缓存到Redis
  2. 计数器
    1. 视频播放次数。
    2. 全局ID
  3. 共享session
    1. 实现分布式session。
  4. 限速
    1. 限制用户访问接口次数。
    2. 限制短信等需要付费的接口的频率:比如通过短信验证码登录。

hash(哈希)

简介

Hash是一个String类型的field和value之间的映射表,即Redis的hash数据类型key(hash表名称)对应的value实际的内部存储结构为一个HashMap。

使用场景

用一个对象来存储用户信息,商品信息,订单信息等等。

key=JavaUser293847
value={
  "id": 1,
  "name": "SnailClimb",
  "age": 22,
  "location": "Wuhan, Hubei"
}

list(列表)

简介

list 就是链表,Redis list 的实现为一个双向链表。可以对列表两端插入(pubsh)和弹出(pop),还可以获取指定范围的元素 列表、获取指定索引下表的元素等,列表是一种比较灵活的数据结构,它可以充当栈和队列的角色,

key=sss
value={ hah, sonw, wek}

使用场景

  1. 用户的url权限
    1. 将一个用户拥有的所有url权限存到Redis。
  2. 缓存请求的数据支持高并发
    1. 对于并发量高的接口,可以先将数据缓存到Redis(List结构),后期可以通过定时任务之类的进行异步处理与落库
  3. 组合成其他数据结构
    1. lpush+lpop=Stack(栈) 
    2. lpush+rpop=Queue(队列) 
    3. lpush+ltrim=Capped Collection(有限集合) 
    4. lpush+brpop=Message Queue(消息阻塞队列)

set(集合)

简介

  1. 与列表类似,不同的是集合中不允许有重复的元素。
    1. Set内部用HashMap实的,只用了HashMap的key列来存储对象。
  2. Set中的元素是无序的,不能通过索引下标获取元素。
  3. Set支持集合内的增删改查,同时还支持多个集合取交集、并集、差集。
  4. Set是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
  5. Set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。

使用场景

  1. sadd=tagging(标签)
    1. 标签(tag):如一个用户对娱乐、体育感兴趣,另一个对新闻感兴趣,这些兴趣就是标签,可获得共同爱好(取交集)的标签(用户和标签的关系维护应该放在一个事物内执行,防止部分命令失败造成数据不一致)
  2. spop/srandmember=random item(生成随机数,比如抽奖)
  3. sadd+sinter=social Graph(社交需求)
  4. sinterstore key1 key2 key3   (求交集,将交集存在key1内)

zset(有序集合)

简介

zset是sorted set的缩写,和Set相比,zset增加了一个权重参数score,使得集合中的元素能够按score进行有序排列。这个参数在添加/修改元素时可以指定,每次指定后,SortSet会自动重新按新的值来排序。

使用场景

适用于需要排序的场景,例如: 排行榜(按照时间、按照播放量、按照获得的赞数等排序)

bitmap (位图)

简介

很节约内存的一种数据类型。

使用场景

高效地统计大量数据(例如亿级)。例如:

  1. 给一个 userId ,判断用户登陆状态;
  2. 显示用户某个月的签到次数和首次签到时间;
  3. 两亿用户最近 7 天的签到情况,统计 7 天内连续签到的用户总数;

数据类型最大存储量

官网网址

https://redis.io/topics/data-types

概述

Strings类型:一个String类型的value最大可以存储512M

Lists类型:list的元素个数最多为2^32-1个,也就是4294967295个。

Sets类型:元素个数最多为2^32-1个,也就是4294967295个。

Hashes类型:键值对个数最多为2^32-1个,也就是4294967295个。

Zset类型:跟Sets类型相似。 ​

9

评论3

请先

  1. “Set是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)”,哈希表只是平均复杂度是常数,但也可能是O(logN)或者O(N)
    流年 2024-07-09 0
  2. 虽然每一个知识点有具体的使用举例,但都没有讲述具体项目中的场景,这样的话包装简历或者面试的时候别人问项目中哪些地方用到了的时候,我还是不知道哪里用了,只知道用了,用于干什么,为什么这么干还是不知道怎么办
    x929802458 2023-11-13 3
    • 这个就需要自己进行联想了,比如此文里的缓存功能:接口比较慢,而且这个接口实时性要求不高,就通过redis缓存了一下。 具体是什么接口,自己完全可以自己编出来啦
      自学精灵 2023-11-13 2
显示验证码
没有账号?注册  忘记密码?

社交账号快速登录