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

【Redis】为什么选择 Redis 做缓存?

近期文章:

【Redis】Redis 底层的数据结构(结合源码)

【MySQL】索引底层的数据结构 B+Tree

 在系统开发中,我们经常会使用 Redis 作为缓存系统,但你知道为什么要使用缓存吗?为什么是使用 Redis 作为缓存呢?下面我就简单说说我的看法

Q1:为什么要使用缓存?

这个问题其实很简单。

对于数据库中的热点数据,用户的访问频率很高,如果每次都是去数据库中重复的获取,会给数据库造成很大的压力,特别是用户基数大的系统。

此时如果加入缓存,那么就只有在用户第一次访问时才会去数据库获取数据,后续的访问,只要缓存中存在的数据就不需要去数据库获取了,进而大大减轻了数据库的压力。

Q2:为什么是使用 Redis 作为缓存呢?

高并发:直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以可以把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。

高性能:用户第一次访问数据库中的数据,因为是从硬盘上读取的,所以这个过程会比较慢。将该用户访问的数据存在缓存中,下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据。

这里也会产生另一个问题:Memcached 也可以做缓存,为什么不适用 Memcached 而选择使用 Redis?

 要回答这个问题,只需要分析两者之间的共同点以及不同点答案自然明朗了

共同点:

1)都是基于内存的数据库,一般都用来做缓存使用

2)都有过期策略

3)两者的性能都非常高

不同点:

1)Redis 支持的数据结构更加丰富(String、Hash、List、Set、ZSet、Bitmaps、HyperLogLog、GEO、Stream),而 Memcached 只支持最简单的 key-value 数据类型

2)Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启后数据依然存在;而 Memcached 没有持久化功能,一旦重启,数据也就丢失了

3)Redis 支持原生集群模式,Memcached 没有原生集群模式,需要依靠客户端实现往集群中分片写入数据

4)Redis 支持发布订阅模型、Lua 脚本、事务等功能,而 Memcached 不支持

现在是否就很清晰了

一  叶  知  秋,奥  妙  玄  心

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【ShuQiHere】初识 Node.js:服务器端 JavaScript 的强大之处
  • Spring1~~~
  • ONU测试需要那些协议的学习
  • 第三章 Mybatis 常用工具
  • 【学习笔记】手写 Tomcat -- 预备知识
  • freemarker模板学习笔记
  • 【C#编程技术总结】魔法包唤醒同一局域网设备
  • Unity解析XML开发随机名字生成模块
  • 联想泄露显示本月推出更便宜的Copilot Plus电脑
  • 虚幻引擎VR游戏开发02 | 性能优化设置
  • 不小心删除丢失了所有短信?如何在 iPhone 上查找和恢复误删除的短信
  • vue实现评论滚动效果
  • 网络编程day02(字节序、TCP编程)
  • 600 条最强 Linux 命令总结
  • 都2024年了还不明白Redis持久化?RDB文件、AOF文件、AOF重写
  • [LeetCode] Wiggle Sort
  • C++11: atomic 头文件
  • HTTP--网络协议分层,http历史(二)
  • IDEA 插件开发入门教程
  • leetcode386. Lexicographical Numbers
  • PaddlePaddle-GitHub的正确打开姿势
  • python_bomb----数据类型总结
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • 编写高质量JavaScript代码之并发
  • 订阅Forge Viewer所有的事件
  • 基于HAProxy的高性能缓存服务器nuster
  • 世界上最简单的无等待算法(getAndIncrement)
  • 数据可视化之 Sankey 桑基图的实现
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 学习笔记:对象,原型和继承(1)
  • 积累各种好的链接
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • # Redis 入门到精通(九)-- 主从复制(1)
  • #### golang中【堆】的使用及底层 ####
  • #{}和${}的区别?
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (~_~)
  • (12)Linux 常见的三种进程状态
  • (规划)24届春招和25届暑假实习路线准备规划
  • (九)One-Wire总线-DS18B20
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (全注解开发)学习Spring-MVC的第三天
  • (一)u-boot-nand.bin的下载
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)Windows2003安全设置/维护
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转载)(官方)UE4--图像编程----着色器开发
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .Family_物联网
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net 反编译_.net反编译的相关问题
  • .NET 命令行参数包含应用程序路径吗?