Redis是什么、使用场景、五大基本数据结构

文章目录

Redis是什么、使用场景

Redis是一种开源的高性能键值数据库,也是常说的 NOSQL 它通常被用来作为内存中的数据结构存储,支持多种类型的数据结构,如字符串(Strings)、哈希表(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)以及位图(Bitmaps)、Redis FEO等等。

因为 Redis 是将数据存储在内存中的,而 MySQL 数据库是将数据存储在磁盘中,所以 Redis 的性能 QPS(每秒处理请求时间)是MySQL 的十倍。

由于其高速的读写能力,Redis通常用于以下场景:

  1. 缓存(Caching):Redis是一个高性能的内存数据存储系统,经常被用作缓存解决方案,可以显著减少后端数据库的读取压力,提高应用的响应速度。

  2. 会话存储(Session Store):Redis可以用来存储用户会话信息,比如存储 Session 实现登录态的存储。

  3. 消息队列(Message Broker):Redis的发布/订阅(pub/sub)模式和列表(Lists)数据结构使其可以作为消息队列系统使用,进行消息的发送和异步处理。

  4. 实时分析:例如,用有序集合(Sorted Sets)来存储排行榜数据

  5. 地理空间数据存储:Redis GEO 具备地理空间数据支持,可以用来构建地理位置服务。

  6. 持久化存储:虽然Redis是基于内存的,但它支持持久化功能,可以将内存中的数据保存到磁盘中,保证数据的持久性。

  7. 分布式锁:Redis 可以提供分布式锁的机制,保证分布式系统中进程与线程之间的同步、常见的分布式锁有 Redisson。

由于Redis的这些特性,它被广泛应用在小到个人项目,大到企业级应用中,帮助提升系统性能,提供更加快速的数据访问体验。

redis的常见的五个数据类型

redis的常见的五个数据类型:String,Lists,sets,sorted sets,hashes。

  1. String(字符串)

    • String是Redis中最基本的数据类型,一个 key 对应一个 value,value 可以是字符串

    常用场景: 缓存用户个人信息或者存储临时性的信息,比如验证码,登录 session。

  2. Lists(列表)

    • Lists是简单的字符串列表,按插入顺序排序,你可以添加一个元素到头部(左边)或者尾部(右边)。

    常用场景:实现最新消息排行等功能(将最新的内容推入列表)。任务队列,如消息队列(先进先出)。

  3. Sets(集合)

    • Sets是字符串的无序集合。它是通过HashTable实现的,所以添加、删除、查找的复杂度都是O(1)。

    常用场景:计算点赞数、共同关注等等,因为集合可以快速地进行交集、并集、差集等操作。

  4. Sorted Sets(有序集合)

    • Sorted Sets是将 Set 中的元素增加一个权重参数 score,使集合中的元素能够按 score 进行有序排列。score 跟元素本身就类似与key、Value 的状态。

    常用场景: 排行榜应用,如游戏排行榜。

  5. Hashes(哈希)

    • Hashes是键值对集合,是一个string类型的field和value的映射表,适合存储对象
  6. 常用场景:存储对象数据,如用户信息、配置信息等。还有购物车应用,其中field是商品ID,value是商品信息。

总结

这些数据类型各有特点,可以根据不同的应用场景选择适合的数据结构。例如,如果需要简单的存储临时的数据,可以使用 String 。如果需要保持元素的插入顺序,则选择List类型;如果需要唯一元素且不需要排序,就选择Set类型;如果需要全局排序,可以选择 Sorted Set类型;而如果需要存储对象,则Hash类型可能是更合适的选择。在实际应用中,这些数据类型往往可以相互结合,为复杂的应用场景提供强大的数据支持。


有启发点个赞 🌹

预计下篇分享:Redis 线程模型或 Redis 持久化

本篇参考:小林coding ,JavaGuide

我是小辉,正在进行 Java 实习的 24 届应届毕业生。欢迎关注,持续分享,包括但不限于技术文章。全网同名...

相关推荐
代码配咖啡7 分钟前
《Navicat之外的新选择:实测支持国产数据库的SQLynx核心功能解析》
数据库
懒大王爱吃狼29 分钟前
怎么使用python进行PostgreSQL 数据库连接?
数据库·python·postgresql
时序数据说30 分钟前
IoTDB集群的一键启停功能详解
大数据·数据库·开源·时序数据库·iotdb
小叶子来了啊1 小时前
信息系统运行管理员:临阵磨枪版
运维·服务器·数据库
冠位观测者1 小时前
【Leetcode 每日一题】2900. 最长相邻不相等子序列 I
数据结构·算法·leetcode
努力写代码的熊大1 小时前
链表的中间结点数据结构oj题(力扣876)
数据结构·leetcode·链表
数据库幼崽1 小时前
MySQL 8.0 OCP 1Z0-908 131-140题
数据库·mysql·ocp
y102121041 小时前
Pyhton训练营打卡Day27
java·开发语言·数据结构
daiwoliyunshang1 小时前
哈希表实现(1):
数据结构·c++
北漂老男孩2 小时前
主流数据库运维故障排查卡片式速查表与视觉图谱
运维·数据库