我想询问 Redis 的刚需在哪里呢?

2023-05-09 04:10:48 +08:00
 nnegier

我对 Redis 的看法,它是一个运行在内存中的数据结构数据库服务器,也因此我不知道在什么时候应该用 Redis ,因为既然是数据结构既然是内存,我完全可以自己写一个数据结构如 HashMap 存在自己的进程内部,而我也是这样干的。

也有人拿它来做磁盘关系型数据库的缓存,但我个人也想过,不过我用了 MyBatis 来做 MySQL 的访问中间层,二级缓存 MyBatis 本身也能做,配置上加个 cache 就好了,甚至还可以自定义缓存实现。

所以,我比较想知道这个知名工具 Redis 解决的核心痛点是什么?

6416 次点击
所在节点    程序员
60 条回复
wxw752
2023-05-09 09:26:56 +08:00
你能问出这样的问题,那么说明你接触到的项目小了
chunworkhard
2023-05-09 09:28:42 +08:00
学习一下
c3de3f21
2023-05-09 09:31:08 +08:00
- 无状态服务好像没法儿用 session?
- 大概会出现 cookie 里的 sessionID 拿到后台找不到 session 的情况?
- 那我们用 sessionID 做 Key ,值做 value 是不是就能解决一部分问题?
当然我接触的项目有些小,不足以体现 redis 的优势。。。
RedisMasterNode
2023-05-09 09:40:34 +08:00
https://github.com/alibaba/canal
canal v1.1.5 版本的管理后台组件就是直接使用内存来缓存登录后的 session 的,猜猜会有什么问题?

对,当部署了多台机器(容器)的时候管理后台登录之后就无法访问了,提示重新登录
yalin
2023-05-09 09:41:46 +08:00
集中会话管理
brader
2023-05-09 09:46:14 +08:00
为了自己无需重复造轮子,难道我今天需要 k-v 结构数据,我自己可以简单撸一个增删改查,然后明天需要列表,我又自己撸一个增删改查?后天呢?这不管是对于使用的自己,还是接手的同事,带来多少麻烦?
brader
2023-05-09 09:48:45 +08:00
而且你只简单的想到了单应用的使用,如果多应用或者多项目之间合作交互呢?比如你前台有个 redis-key ,有时候需要在管理后台对它提前生成、刷新、删除,你自己写的 HashMap 的话,你另一个后台项目怎么操作它?难道你闲的自己再开个端口服务来操作它?
gbw1992
2023-05-09 09:49:26 +08:00
如果是单例应用,那的确是。能使用 redis 的场景,几乎都能编码实现。
业务平台时间长了都会分开
大部分公司控制不住项目代码腐烂进度,时间长了就分开了
缓存共享只是基础用法,还有分布式事件订阅推送等
自己写?当然可以。最后谁写的谁维护就行了。
你也不想被领导知道,你写的状态维护模块崩了的事情吧😏
plutome
2023-05-09 09:50:10 +08:00
举一个例子:
每天有一亿条流水,里面会有重复,需要根据 id 去重后入库。

a )每次入库之前查询数据库,判断记录是否存在?
b )维护一个 map 在内存里面,判断 key 是否存在?
c) 其他方案,redis 等...


可以简单思考一下这个场景的代码怎么设计。
Imindzzz
2023-05-09 09:52:00 +08:00
先 hash map 也行,当你需要缓存的数据多了,你会想着封装一套操作 api(自动过期,批量过期等)。
然后就会想着怎么重启服务不丢失,多机器共享等问题,就可以用 redis 了,
whh945atsyzx
2023-05-09 09:54:01 +08:00
单体应用可以 hashmap ,分布式呢?你可以说你专门开一个服务来做缓存,恭喜你,这就是 redis
Imindzzz
2023-05-09 09:54:44 +08:00
为什么都是项目开始就直接引入 redis ?因为引入成本非常低
as5739
2023-05-09 10:13:33 +08:00
因为写内存里 重启会丢,而 redis 作为中间件一般不重启,而且也有持久化机制
ShuWei
2023-05-09 10:14:45 +08:00
我个人理解,有几个比较明显的理由
1 、性能,尤其是数据量较大时
2 、跨应用共享
3 、部分依赖数据可靠性的场景
4 、部分编程语言,比如 php

如果是单体部署的应用,大部份时候可能对 redis 的依赖确实不强
jaylee4869
2023-05-09 10:28:54 +08:00
尽可能保障服务无状态能让服务本身可以大胆地水平扩缩容。
cohen121
2023-05-09 10:56:03 +08:00
分布式场景。还有你有没有考虑过用 hashmap 存在进程内存,如何在扩容时(多进程 /多机器)同步状态。
zzzmh
2023-05-09 11:00:59 +08:00
java 发现爬虫 ip 存 redis ,下次请求 lua+nginx 直接从最前端拦截,以此类推
另外我个人感觉是相比 java 用 redis 效率更高更省内存
bugmakerxs
2023-05-09 11:08:21 +08:00
多实例数据共享
cyningxu
2023-05-09 11:30:22 +08:00
所以楼主一直开发的都是单机单实例?
liuxu
2023-05-09 11:36:33 +08:00
1. 多进程模型语言
2. 需要超过应用生命周期的缓存

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/938442

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX