我们为什么要用Redis

我们为什么要用Redis最近阅读了 Redis 开发与运维 非常不错 这里对书中的知识整理一下 方便自己回顾 Redis 的整个体系 来对相关知识点查漏补缺 按照五点把书中的内容进行一下整理 1 为什么要选择 Redis 介绍 Redis 的使用场景与使用 Redis 的原因 2 Redis 常用命令总结 包括时间复杂度总结与具体数据类型在 Redis 内部使用的数据结构 3 Redis 的高级功能 包括持久化 复制 哨兵 集群介绍

最近阅读了《Redis开发与运维》,非常不错。这里对书中的知识整理一下,方便自己回顾Redis的整个体系,来对相关知识点查漏补缺。

在这里插入图片描述

按照五点把书中的内容进行一下整理:

1、为什么要选择Redis:介绍Redis的使用场景与使用Redis的原因;

2、Redis常用命令总结:包括时间复杂度总结与具体数据类型在Redis内部使用的数据结构;

3、Redis的高级功能:包括持久化、复制、哨兵、集群介绍;

4、理解Redis:理解内存、阻塞,这部分是非常重要的,前面介绍的都可以成为术,这里应该属于道的部分;

5、开发技巧:主要是一些开发实战的总结,包括缓存设计与常见坑点。

先来开启第一部分的内容,对Redis来一次重新打量。

Redis不是万金油

在面试的时候,常被问比较下Redis与Memcache的优缺点,个人觉得这二者并不适合一起比较,一个是非关系型数据库不仅可以做缓存还能干其他事情,一个是仅用做缓存。常常让我们对这二者进行比较,主要也是由于Redis最广泛的应用场景就是Cache,那么Redis到底能干什么?又不能干什么呢?

在这里插入图片描述

Redis都可以干什么事儿

缓存,毫无疑问这是Redis当今最为人熟知的使用场景,再提升服务器性能方面非常有效。

1.排行榜,如果使用传统的关系型数据库来做,非常麻烦,而利用Redis的SortSet数据结构能够非常方便搞定;

2.计算器/限速器,利用Redis中原子性的自增操作,我们可以统计类似用户点赞数、用户访问数等,这类操作如果用MySQL,频繁的读写会带来相当大的压力;限速器比较典型的使用场景是限制某个用户访问某个API的频率,常用的有抢购时,防止用户疯狂点击带来不必要的压力;

3.好友关系,利用集合的一些命令,比如求交集、并集、差集等,可以方便搞定一些共同好友、共同爱好之类的功能;

4.简单消息队列,除了Redis自身的发布/订阅模式,我们也可以利用List来实现一个队列机制,比如到货通知、邮件发送之类的需求,不需要高可靠,但是会带来非常大的DB压力,完全可以用List来完成异步解耦;

5.Session共享,以PHP为例,默认Session是保存在服务器的文件中,如果是集群服务,同一个用户过来可能落在不同机器上,这就会导致用户频繁登陆;采用Redis保存Session后,无论用户落在那台机器上都能够获取到对应的Session信息。

Redis不能干什么事儿

Redis感觉能干的事情特别多,但它不是万能的,合适的地方用它事半功倍,如果滥用可能导致系统的不稳定、成本增高等问题。

1.比如,用Redis去保存用户的基本信息,虽然它能够支持持久化,但是它的持久化方案并不能保证数据绝对的落地,并且还可能带来Redis性能下降,因为持久化太过频繁会增大Redis服务的压力。

2.简单总结就是数据量太大、数据访问频率非常低的业务都不适合使用Redis,数据太大会增加成本,访问频率太低,保存在内存中纯属浪费资源。

选择总需要找个理由

上面说了Redis的一些使用场景,那么这些场景的解决方案也有很多其它选择,比如缓存可以用Memcache,Session共享还能用MySql来实现,消息队列可以用RabbitMQ,我们为什么一定要用Redis呢?

速度快,完全基于内存,使用C语言实现,网络层使用epoll解决高并发问题,单线程模型避免了不必要的上下文切换及竞争条件;

注意:单线程仅仅是说在网络请求这一模块上用一个请求处理客户端的请求,像持久化它就会重开一个线程/进程去进行处理。

丰富的数据类型,Redis有8种数据类型,当然常用的主要是 String、Hash、List、Set、 SortSet 这5种类型,他们都是基于键值的方式组织数据。每一种数据类型提供了非常丰富的操作命令,可以满足绝大部分需求,如果有特殊需求还能自己通过 lua 脚本自己创建新的命令(具备原子性);

在这里插入图片描述

除了提供的丰富的数据类型,Redis还提供了像慢查询分析、性能测试、Pipeline、事务、Lua自定义命令、Bitmaps、HyperLogLog、发布/订阅、Geo等个性化功能。

Redis的代码开源在GitHub,代码非常简单优雅,任何人都能够吃透它的源码;它的编译安装也是非常的简单,没有任何的系统依赖;有非常活跃的社区,各种客户端的语言支持也是非常完善。另外它还支持事务(没用过)、持久化、主从复制让高可用、分布式成为可能。

在这里插入图片描述

做为一个开发者,对于我们使用的东西不能让它成为一个黑盒子,我们应该深入进去,对它更了解、更熟悉,今天简单说了下Redis的使用场景,以及为什么选择了Redis而不是其他。

原文出处:http://mp.toutiao.com/preview_article/?pgc_id=

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/198212.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午3:33
下一篇 2026年3月26日 下午3:34


相关推荐

  • 服务熔断降级

    服务熔断降级之前给大家讲了很多服务之前的关系 今天主要给大家介绍 当服务出现问题时 我们该如何解决 首先我们先进行一些场景分析 场景一服务提供端提供了 A B C D4 个服务 服务调用方调用服务时 D 服务出现了问题 导致调用服务 D 的请求都出现了超时或者错误 从而进一步影响了整个请求队列的性能 场景二我们根据 client1 和 client2 的请求压力确定了我们 serverA 的负载情况 但是当 client2 的请求从 1500 增加到 15000 时 会远远大于 ServerA 的性能瓶颈 这个时候也会导致 C

    2026年3月26日
    1
  • Timer类中的 scheduleAtFixedRate与schedule

    Timer类中的 scheduleAtFixedRate与scheduleTimer 是 jdk 中提供的一个定时器工具 使用的时候会在主线程之外起一个单独的线程执行指定的计划任务 可以指定执行一次或者反复执行多次 定义了主要有以下 6 个方法 顾名思义 schedule 与 scheduleAtFi 的区别就是 是否按固定速率执行安排指定的任务 一般情况下 timer 的 schedule 和 scheduleAtFi 方法没有区别 只在某个情况出

    2026年3月17日
    1
  • java和基岩版区别_我的世界基岩版与Java版有什么区别?「建议收藏」

    java和基岩版区别_我的世界基岩版与Java版有什么区别?「建议收藏」我的世界是一款受到非常多玩家喜爱的沙盒建造游戏,玩家可以在三维世界里做任何自己想做的事情。很多小白玩家分不清基岩版和Java版的区别。为此,小编特意收集了资料给大家分享一下本篇教程,希望能够帮助到大家。本质区别java版Java版顾名思义是使用Java语言编程的,是minecraft的最初版本,一般称之为Java版JE版。基岩版基岩版英文名称为BedrockEdition,使用C++语言编程,…

    2022年7月7日
    31
  • 网易蜂巢 mysql镜像_在网易蜂巢的容器中创建自定义镜像和推送本地镜像的教程…

    网易蜂巢 mysql镜像_在网易蜂巢的容器中创建自定义镜像和推送本地镜像的教程…Dockerfile 创建自定义镜像 1 登录蜂巢控制台 https c 163 com dashboard2 点击左侧导航菜单的 镜像仓库 标签 3 点击镜像仓库列表左上角的 创建镜像仓库 按钮 仓库名称 必填 命名规则如下 使用小写字母 数字 中划线 下划线 英文句号 以字母或数字开头结尾 不少于 2 个字符 不包含连续的特殊字符 的总长度不能超过 255 个字符 其中 u

    2026年3月20日
    2
  • 雅虎十四条性能优化原则「建议收藏」

    雅虎十四条性能优化原则「建议收藏」雅虎十四条性能优化原则欢迎访问我的博客https://qqqww.com/,祝所有码农同胞们早日走上人生巅峰,迎娶白富美~~首先我去看了《雅虎十四条性能优化原则》,当然是看大佬博客翻译过来的,纯英文的我看不懂Web应用性能优化黄金法则:先优化前端程序(front-end)的性能,因为这是80%或以上的最终用户响应时间的花费所在减少HTTP请求使用CDN添加Expire…

    2022年7月15日
    34
  • 测试用例_因果图_测试用例图

    测试用例_因果图_测试用例图因果图法一、应用场合​ 界面中有多个控件,控件之间有组合或者限制关系,为了弄清楚不同的输入组合会对应怎样不同的输出结果,可以使用因果图或判定表法。【说明】因果图/判定表法比较适合测试组合数量少(一般指20种以下)的情况(如果组合数量大可以选择使用正交排列法效率会更高)二、因果图法2.1解析因果图法​ 因(原因):输入条件​ 果(结果):输出结果​ 因果图:通过画图的方式说明输入条件和输出结果之间的关系。2.2图形符号(1)基本图形符合——表达的是因和果之间的关系恒等如果

    2022年8月14日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号