素材牛VIP会员
在实际工作中,缓存好像一般都用redis,memcache,而不ORM或者数据库自带的缓存,为何?
 海***人  分类:SQL代码  人气:1102  回帖:7  发布于6年前 收藏

在实际工作中,缓存好像一般都用redis,memcache,而不用Hibernate或者mybatis等ORM自带的缓存或者数据库本身自带缓存,为何?

讨论这个帖子(7)垃圾回帖将一律封号处理……

Lv3 码奴
gu***di 软件测试工程师 6年前#1

首先,对大部分分布式系统来说,缓存不适合用程序实现,比如Java访问数据库时,可以自建HashMap/LinkedHashMap用作缓存,可以用开源缓存类库如EHCache,也可以用Hibernate自带的缓存,但由于负载均衡的关系,多台机器上的这些缓存不便于共享,所以不如Redis、Memcached等集中式的缓存来得方便合高效。

其次,很多大型互联网公司的经验表明,数据库缓存带来的效率提升并不明显。因为更新频繁的表,缓存命中率很低;而指定数据库对哪些表用缓存、哪些表不用缓存,可能难度很大。

Lv6 码匠
遗***迹 学生 6年前#2

你这个问题就好像在问。为什么cpu不在硬盘直接读取,偏偏要的内存

Lv7 码师
负***丶 页面重构设计 6年前#3

我估计认为 你想问的是为啥不用数据库mysql等自带的缓存,而使用redis,memcache之类

首先你需要知道 mysql之类的数据库是存放在哪里。。。。redis 和memcache之类缓存存放在哪里

mysql是存在磁盘中,而redis和memcache是存放在内存,哪个的运行速度快,我想不言而喻了

我们做缓存本身就是为了快速响应用户请求。

Lv6 码匠
爱***粉 移动开发工程师 6年前#4

首先说明一下:

1、mysql、oracle这些关系数据库自带的缓存都是对热数据进行自动存储及替换,也是用的内存空间
2、redis、memcache这类缓存系统是由开发人员自由选择数据对象,全部采用内存,也有些带持久化到磁盘存储机制

然后说说各自优缺点:

mysql这类缓存是完全凭借数据库自行运作,没有开发量,但是也完全基于数据库服务器资源处理连接请求,极其消耗cpu和内存甚至线程资源,对一个中大型业务系统来说,高并发请求全部放在数据库对业务系统是致命的,除非你有无限量的硬件资源支持横向扩展,而这更加需要极高的成本,这无疑是极其浪费资源的。
而redis这类专门的缓存数据库都是基于快速响应、业务灵活变更的需求诞生的,主从或者集群模式也非常成熟,对于几千数万甚至更高并发的处理都不在话下,当然这也要看使用方法。针对业务特性使用不同的缓存方法才是最重要的,比如对实时性更新要求不高、静态数据这一类,所以总的来说要根据业务找最适用的系统!
Lv6 码匠
迁***3 Web前端工程师 6年前#5

使用缓存,最主要的目的是提升系统的响应速度和对高负载的承受能力,因此各个层面缓存有不同的应用场景:
1、数据库的缓存,是数据库软件自身进行更新、判断是否能从缓存取数据,不需要开发人员关心,因此绝大部分情况下已经使用了数据库的缓存。
mysql中是查询结果缓存,根据query_cache_type的设置是否使用缓存,query_cache_size设置缓存大小。
oracle中的中缓存有两种,数据块缓存buffer cache,查询结果缓存SQL Result Cache。
2、ORM的缓存要看实现类型,比较简单的是存储在服务器本机的内存中,不能满足集群部署的场景,强行使用会出现访问数据不一致的现象。优点是使用简单,且本机缓存的性能更好。
3、redis和memcache都是分布式缓存,使用场景比较广,缺点是是需要开发的人工更新、查询缓存,不像ORM的缓存是自动更新的,开发起来比较繁琐。有些开发框架会对缓存支持比较好,通过配置可以控制缓存使用、更新方法。

Lv5 码农
qw***23 JAVA开发工程师 6年前#6

为了分布式缓存

Lv5 码农
la***gt JS工程师 6年前#7

单独缓存系统 是考虑到分布式和热增备的好处。数据库缓存性能和扩展都不方便了啊。

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取