【学习笔记】reids的数据类型

文章目录

  • 数据类型区分
    • [1. String(字符串)](#1. String(字符串))
    • [2. Hash(哈希)](#2. Hash(哈希))
    • [3. List(列表)](#3. List(列表))
    • [4. Set(集合)](#4. Set(集合))
    • [5. Zset(有序集合)--SortedSet](#5. Zset(有序集合)--SortedSet)
    • [6. 队列、集合、有序集合区别示意图](#6. 队列、集合、有序集合区别示意图)

数据类型区分

1. String(字符串)

String是redis最基本的类型,一个key对应一个value,string类型是二进制安全的,可以包含任何数据,一个键最大能存储512MB

  • value值

    string:普通字符串

    int:整数类型,可以做自增、自减操作

    float:浮点类型,可以做自增、自减操作

  • 业务场景

    1. 缓存:通过将数据存储在Redis中的字符串中,可以快速地读取和写入数据,从而提高应用程序的性能。常见的缓存场景包括数据库查询结果、API响应等

    2. 计数器:使用Redis中的字符串来实现计数器功能。可以通过递增(INCR)或递减(DECR)指定键的值来实现计数器的增加或减少

    3. 分布式锁:利用Redis中的setnx来实现分布式锁。通过将一个唯一标识作为键,将值设置为某个特定的标识符,从而实现对资源的互斥访问

    4. 会话管理:在Web应用程序中,可以使用Redis中的字符串来存储用户会话信息,例如用户的登录状态、用户的购物车内容等

    5. 消息队列:通过将消息以字符串的形式存储在Redis中,可以实现简单的消息队列功能。生产者将消息写入Redis的列表(List)中,消费者则从列表中读取并处理消息

  • 实例

    redis 127.0.0.1:6379> SET name "redis.net.cn"

    OK

    redis 127.0.0.1:6379> GET name

    "redis.net.cn"

  • 结构解析

2. Hash(哈希)

Hash类型,也叫散列,其value是一个无序字典hash是一个string类型的field和value的映射表

  • 业务场景

    1. 缓存对象信息

    2. 购物车场景的使用

    3. 缓存配置信息

  • 实例

    redis 127.0.0.1:6379> HMSET user:1 username redis.net.cn password redis.net.cn points 200

    OK

    redis 127.0.0.1:6379> HGETALL user:1

    1. "username" //key

    2. "redis.net.cn" //value

    3. "password" //key

    4. "redis.net.cn" //value

    5. "points" //key

    6. "200" //value

  • 结构解析

3. List(列表)

list是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,可以在链表的左右两边分别操作(反向查找和遍历等),所以也称为双向链表

  • 存入形式

  • 业务场景

    1. 秒杀活动抢购:list 是线程安全的,所有的pop操作是原子性的,适用于抽奖,抢票等场景,用来防止超卖问题

    2. 实时聊天室:Redis的List可以作为聊天室中消息的缓存区域。每当有用户发送一条新消息时,就将该消息添加到聊天室对于的List中,并通过订阅/发布机制将该信息广播给所有在线用户(确保消息的顺序没有发生错乱)

  • 特点

    1. 有序集合:List中的元素是有序的,按照插入的顺序排列。你可以根据索引来访问列表中的元素。

    2. 允许重复元素:List中的元素可以重复。

    3. 支持从两端插入和删除元素:可以从列表的头部(左边)或尾部(右边)插入和删除元素。

  • 实例

    redis 127.0.0.1:6379> lpush redis.net.cn redis

    (integer) 1

    redis 127.0.0.1:6379> lpush redis.net.cn mongodb

    (integer) 2

    redis 127.0.0.1:6379> lpush redis.net.cn rabitmq

    (integer) 3

    redis 127.0.0.1:6379> lrange redis.net.cn 0 10

    1. "rabitmq"

    2. "mongodb"

    3. "redis"

    redis 127.0.0.1:6379>

  • 结构解析

4. Set(集合)

Set集合是一种无序不重复的数据结构,查询效率高,具备去重功能,支持集合的交集、并集、差集运算,其应用场景丰富

  • 使用场景

    1. 点赞、踩、收藏:Set 类型可以保证一个用户只能点一个赞;

    2. 共同关注、标签:Set 类型支持交集运算,所以可以用来计算共同关注的好友、公众号等;

    3. 抽奖活动:存储某活动中中奖的用户名 ,Set 类型因为有去重功能,可以保证同一个用户不会中奖两次

  • 特点

    1. 无序

    2. 元素不可重复

    3. 查找快

    4. 支持交集、并集、差集等功能

  • 实例

    redis 127.0.0.1:6379> sadd redis.net.cn redis

    (integer) 1

    redis 127.0.0.1:6379> sadd redis.net.cn mongodb

    (integer) 1

    redis 127.0.0.1:6379> sadd redis.net.cn rabitmq

    (integer) 1

    redis 127.0.0.1:6379> sadd redis.net.cn rabitmq

    (integer) 0

    redis 127.0.0.1:6379> smembers redis.net.cn

    1. "rabitmq"

    2. "mongodb"

    3. "redis"

  • 结构解析

5. Zset(有序集合)--SortedSet

ZSet集合是一种有序不重复的数据结构,对比Set集合多了一个排序属性(分数:score),集合的元素按分数递增的顺序排序,分数相同则按字典顺序排序,这里的不重复指的是成员不重复,分数可以重复

  • 特点

    1. 可排序

    2. 元素不重复

    3. 查询速度快

  • 业务场景

    1. 排行榜:score作为浏览次数,自动进行排序,但要注意冷数据

    2. 滑动窗口限流:score作为时间戳,可统计最近一段时间内内的成员数量,实现滑动窗口限流

  • 实例

    redis 127.0.0.1:6379> zadd redis.net.cn 0 redis

    (integer) 1

    redis 127.0.0.1:6379> zadd redis.net.cn 0 mongodb

    (integer) 1

    redis 127.0.0.1:6379> zadd redis.net.cn 0 rabitmq

    (integer) 1

    redis 127.0.0.1:6379> zadd redis.net.cn 0 rabitmq

    (integer) 0

    redis 127.0.0.1:6379> ZRANGEBYSCORE redis.net.cn 0 1000

    1. "redis"

    2. "mongodb"

    3. "rabitmq"

  • 结构解析

6. 队列、集合、有序集合区别示意图

集合VS有序集合
  • 集合为无序,有序集合以score为基准进行排序

  • 集合为普通的键值对v:k,有序集合为s+v:k,多了一个值用于排序

列表VS有序集合
  • 列表元素可以重复,有序集合元素不能重复

  • 列表为普通的键值对v:k,有序集合为s+v:k,多了一个值用于排序

相关推荐
老猿讲编程1 小时前
【Eclipse OpenSOVD学习之五】拓扑引擎(Topology)
学习·rust·eclipse·sovd
励志不掉头发的内向程序员1 小时前
【LibreCAD 2D架构】RS_Line创建之后发生了什么?从图形容器到屏幕渲染
开发语言·c++·qt·学习·系统架构
hanlin032 小时前
刷题笔记:力扣第84题-柱状图中最大的矩形
笔记·算法·leetcode
三84410 小时前
redis防御加固与安全基线
数据库·redis·安全·应急响应·防御
SendTomo10 小时前
【技术交流】从0到1构建一个汉字学习平台:汉字吧(hanzi8.com)的技术架构猜想
redis·mysql·nginx·php·个人开发
一米阳光866111 小时前
软考高级【信息系统项目管理师】高项重要考点(3)高级项目管理-下 助你顺利上岸!
笔记·职场发展·软考·信息系统项目管理师·高级职称
微功夫信息技术11 小时前
分层多智能体强化学习驱动的非急救转运公平 - 效率统一调度系统研究与实践
人工智能·学习·算法·动态规划
dianziyao_11 小时前
第 4.1 篇:让 Codex 理解你的双链——AI 辅助发现笔记间的关联
人工智能·笔记
dadaobusi12 小时前
学习:开源项目Cheshire
学习