当前位置: 首页 > news >正文

redis一些概念知识

一、redis是什么

Redis是一种非关系型数据库(NoSQL),它主要以键值对存储数据。与传统的关系型数据库相比,Redis更注重内存操作和高性能,常被用作缓存系统或分布式存储系统。

以简单的比喻来解释Redis,可以将其看作是一个巨大的字典。这个字典里面包含了很多键值对,你可以根据给定的键快速查找到对应的值。不同于传统的数据库系统,Redis将所有数据都存储在内存中,因此访问速度非常快。

Redis通常用作应用程序架构中的数据存储层或缓存层。它可以位于应用程序和后端数据库之间,作为一个快速、高性能的中间层来加速数据访问和减轻后端数据库的负载。

二、什么样的数据适合存到redis

Redis适合存储那些需要快速读写访问、频繁读取的数据,以下是几种常见的适合存储在Redis中的数据类型:

  1. 缓存数据:将频繁读取但计算成本较高的数据,如数据库查询结果、API响应等,存储到Redis中作为缓存,可以加速系统访问速度。

  2. 计数器和排行榜:使用Redis提供的原子操作(Atomic Operations)实现增加或减少计数器的功能,并可以根据计数值生成排行榜。

  3. 会话管理:存储用户会话信息,如登录状态、用户权限等,便于快速获取和验证用户身份。

  4. 队列和消息发布/订阅:利用Redis的列表数据类型,可以创建队列,实现任务分发和消息传递机制。同时也可以使用发布/订阅模式进行实时通信。

  5. 地理位置信息:通过Redis提供的地理空间索引功能(Geospatial Indexing),可以方便地存储和查询地理位置相关信息。

总之,适合存放到 Redis 中的数据是那些需要快速读写、具备一定时效性、不要求强一致性和持久性的数据。同时,Redis也可以作为其他数据库(如MySQL)的辅助存储,提升系统整体性能。

需要注意的是,由于Redis将所有数据都存储在内存中,因此对于占用内存较大或者需要长期保留的大型数据集来说并不适合。

三、redis的五种数据类型及应用场景

Redis支持以下五种主要的数据类型:

  1. 字符串(String):字符串是最基本的数据类型,可以存储任意类型的数据,比如文本、图片、JSON等。常用于缓存、计数器、分布式锁等场景。

  2. 列表(List):列表是一个有序的字符串集合,可以进行插入、删除和查询操作。常用于消息队列、任务队列、最新消息推送等场景。

  3. 哈希(Hash):哈希是一种键值对集合,每个键对应一个值。适合存储对象或者实体属性信息,方便快速查找和更新指定字段。

  4. 集合(Set):集合是一个无序且唯一的字符串集合,支持添加、删除和求交集、并集等操作。常用于标签系统、社交关系处理等场景。

  5. 有序集合(Sorted Set):有序集合在普通集合的基础上加上了一个分数字段,使得元素可以按照分数排序。适用于排行榜、热门文章列表等需要排序功能的场景。

四、了解redis雪崩机制、缓存击穿、缓存穿透

当我们使用缓存来提升系统性能时,有时候可能会遇到一些问题:

  1. Redis雪崩机制:在某个时间点,大量的缓存数据同时失效或发生故障,导致大量请求直接访问数据库。这会给数据库带来巨大的压力,甚至导致系统崩溃。

  2. 缓存击穿:是指在高并发环境下,一个热点数据过期或被删除时,恰好有大量请求同时访问该数据。这样的情况下,请求直接绕过缓存去查询数据库。由于多个请求都需要查询相同的数据,会给数据库造成很大压力,并且降低系统性能。

  3. 缓存穿透:是指恶意或非法的请求查询一个既不存在于缓存中又不存在于数据库中的数据。每次请求都会绕过缓存层直接访问数据库。由于数据库也没有相应的数据,所以每次请求都会返回空结果。这种情况下,频繁地无效查询会浪费服务器资源。

相关文章:

  • PostgreSQL对已有表增加自增序列
  • WPF应用程序使用MVVM模式
  • etcd入门-(1)安装篇
  • Android 11.0 内置google tts语音包功能实现
  • win环境nginx实战配置详解
  • kubeadm部署K8S
  • 2024年【N1叉车司机】考试试卷及N1叉车司机证考试
  • [技巧]Arcgis之图斑四至点批量计算
  • TSINGSEE青犀AI智能分析网关V4智慧油田安全生产监管方案
  • Unity(第九部)物体类
  • CNN中的伯努利分布与二项式分布
  • AAAI2024-分享若干篇有代码的优秀论文-图神经网络、时间序列预测、知识图谱、大模型等
  • 【如何像网吧一样弄个游戏菜单在家里】
  • C语言 快速排序——qsort函数的介绍
  • Linux中断实验-如何在设备树中描述中断信息
  • Centos6.8 使用rpm安装mysql5.7
  • Git的一些常用操作
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Java精华积累:初学者都应该搞懂的问题
  • mysql外键的使用
  • PHP 小技巧
  • python 学习笔记 - Queue Pipes,进程间通讯
  • vue.js框架原理浅析
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 力扣(LeetCode)22
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 盘点那些不知名却常用的 Git 操作
  • 前端性能优化--懒加载和预加载
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 无服务器化是企业 IT 架构的未来吗?
  • #考研#计算机文化知识1(局域网及网络互联)
  • %@ page import=%的用法
  • (33)STM32——485实验笔记
  • (Note)C++中的继承方式
  • (笔试题)分解质因式
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)http-server应用
  • (转)母版页和相对路径
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • //解决validator验证插件多个name相同只验证第一的问题
  • ::前边啥也没有
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [android] 练习PopupWindow实现对话框
  • [Angular] 笔记 18:Angular Router
  • [Apio2012]dispatching 左偏树