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

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

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

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

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

6849 次点击
所在节点    程序员
60 条回复
yuelang85
2023-05-09 04:36:18 +08:00
你可以自己写一个内存数据库,事实上各种语言也都有这样的工具。可是有两个问题:

1 ,功能,速度,是否能达到你的需求,如果要达到,需要多少工作量?

2 ,单进程应用还好,多个进程需要共享数据怎么办?
TuringHero
2023-05-09 04:44:14 +08:00
你也可以看作多节点下的共享内存方案。而且还实现了像集群、持久化、消息队列、地理搜索、Lua 等一些功能,缓存单独部署可靠性也高一些。项目想不到哪里有用的话就不要用,本地缓存可以实现的话就没必要增加复杂度引入 Redis
Jhon11
2023-05-09 07:11:28 +08:00
作用类似数据库,本地内存替代不了的
tulongtou
2023-05-09 07:14:01 +08:00
1. redis 开始流行的时候,PHP 还大行其道,而 php 是单进程模式,没有办法自己写内存缓存。
2. 大型缓存服务可能不止在一台机器上,假设有 10 台机器用作缓存,直接用 redis 会比自己开发节省时间的。
Akitora
2023-05-09 07:54:37 +08:00
分布式锁
crysislinux
2023-05-09 08:05:09 +08:00
单进程当然可以进程缓存了。但是多进程甚至多机器进程缓存就会有不一致的问题了。另外单独的缓存服务器可以加大内存,但是你给每个应用服务器搞很大的缓存就比较浪费了。
Yeen
2023-05-09 08:10:47 +08:00
那么楼主 memcache 可以了解一下,
这些技术无非就是数据库上层做更特殊需求用的(性能、非持久化 /半持久化等等),而且也不止 redis 一种技术,轮子太多了
hhjswf
2023-05-09 08:12:03 +08:00
啊这,如果你一个应用有两个实例呢,你能保证这两个实例各自内存数据一致性吗
chaleaochexist
2023-05-09 08:13:27 +08:00
单体应用问题不大.
考虑分布式场景.
clusterRedis 是一方面
还有分布式应用依赖 redis 场景.
darkengine
2023-05-09 08:23:57 +08:00
除了楼上说的多进程共享数据问题。如果你用 HashMap 解决缓存问题,每次重启进程都所有“缓存”都会丢失。
matrix1010
2023-05-09 08:41:35 +08:00
Redis 没有刚需,但这类远程缓存服务有一个刚需场景是 serverless. 其实 Redis 作为纯缓存相比 memcache/keydb/dragonflydb 这些支持多线程的没有优势,Redis 流行是因为数据结构 /功能多。Redis 自己也认识到纯缓存性能问题所以加了 Client-side caching 的功能,但 Client-side caching 是 Redis server 辅助 client ,需要 client 自己实现内存缓存,所以现在用的还不多
xiaowowo
2023-05-09 08:45:48 +08:00
1.支持多种数据结构和数据查询方式
2.多进程多实例共享同步
3.业务和缓存隔离,更新业务不会导致缓存丢失
4.支持持久化
5.很多语言无法实现内存缓存或实现性能不佳
6.支持横向扩容,支持分布式
Maboroshii
2023-05-09 08:48:19 +08:00
稳定性。 没那么容易挂
fox0001
2023-05-09 08:54:28 +08:00
楼上都讲清楚了。我觉得是:高性能、数据共享、集群
lower
2023-05-09 08:58:40 +08:00
这类缓存工具核心肯定是给数据库“减负”……
具体到各种缓存工具的使用,肯定要看实际场景啊,比如虽然我是单体应用,但是只要把会话信息存 redis 里,单体应用就是无状态啦,可以很方便部署多个实例
性能的话,走网络的 redis 肯定不如进程内缓存

我甚至觉得 redis 可以作为好多种工具的底层 kv 存储,提供一套统一的插件开发接口,上层开发各种各样工具,除了它已经搞的分布式锁、发布订阅;还可以把服务注册、配置管理、分布式事务之类这种功能全在它上面开发插件实现,搞一个真正的大一统超级缝合怪😂
wanguorui123
2023-05-09 09:00:52 +08:00
分布式下作为共享内存用
dayeye2006199
2023-05-09 09:06:47 +08:00
缓存很多时候都不是必须的
mineralsalt
2023-05-09 09:13:49 +08:00
单实例软件确实没必要用, 你以后用到分布式部署就知道了
dif
2023-05-09 09:17:25 +08:00
第一、免费。
第二、好用,能适用与绝大部分场景,因为用的公司多也比较成熟,很难遇到 bug 。
第三、专业的事情由专业的团队去做。我只需要调用 api 就行。节约成本
第四、可以找借口优化拿钱,其实很多项目做 1-2 期基本上就很难迭代下去了,然后就会进入维护期,维护期很难有成果,那么就可以把一个接口从 5 秒逐渐优化到 100ms (中间会经历 sleep(300),sleep(200),sleep(60)。。。。 上 redis )。搞完了还能写一篇公众号《通过这个小技巧,我把接口的响应时间降低了 3000 倍》,double win -> win win
raysonlu
2023-05-09 09:24:56 +08:00
有生之年我会不会见到类似《我想询问 Mysql 的刚需在哪里呢?》的帖子?

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

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

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

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

© 2021 V2EX