文档章节

实际项目中是选用Map还是选用Redis作为缓存?为什么?

k
 karma123
发布于 2018/06/27 19:31
字数 680
阅读 105
收藏 4

参考网页

https://segmentfault.com/q/1010000009106416

实际项目中是选用Map还是选用Redis作为缓存?为什么?

具体选择Map还是Redis作为缓存,要看具体的需求,具体的应用场景

本地缓存和分布式缓存

★本地缓存(如map和guava)轻量快速简单,但是各个应用实例不可共享

缓存分为本地缓存和分布式缓存。以java为例,使用自带的map或者guava实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着jvm的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。

★分布式缓存结构复杂,但是可以实现多个应用实例共享缓存

使用redis或memcached之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。缺点是需要保持redis或memcached服务的高可用,整个程序架构上较为复杂。

★实际应用

项目小而简单、缓存数据量不大时,可以应用map或者guava作为缓存。

分布式系统中,多个应用实例共享缓存的场景下,则需要采用对分布式缓存支持较好的redis等。

Redis和map作为缓存的比较

缓存数据量--redis几十G,map则要看jvm限制(几个G就够大了)

 Redis 可以用几十 G 内存来做缓存,Map 不行,一般 JVM 也就分几个 G 数据就够大了

生命周期--redis可持久化,map跟随程序进程(jvm)    

Redis 的缓存可以持久化,Map 是内存对象,程序一重启数据就没了

对分布式的支持

Redis 可以实现分布式的缓存,Map 只能存在创建它的程序里

并发量--redis是专业的缓存服务,可处理每秒百万级的并发

Redis 可以处理每秒百万级的并发,是专业的缓存服务,Map 只是一个普通的对象

功能性--redis有丰富的API和缓存过期机制,map只是java中的一个对象

Redis 缓存有过期机制,Map 本身无此功能

Redis 有丰富的 API,Map 就简单太多了

© 著作权归作者所有

k
粉丝 7
博文 94
码字总数 68903
作品 0
丰台
私信 提问
加载中

评论(4)

tengyz
tengyz
能到百万并发每秒吗
哎呦呦哟
哎呦呦哟

引用来自“OSC_GRRaAz”的评论

这两个做比较合适吗

确实没可比性,一个是软件,一个是Java类库,
k
karma123

引用来自“OSC_GRRaAz”的评论

这两个做比较合适吗
只是学习的笔记,不用那么较真。一切以项目实际和需求为准
OSC_GRRaAz
OSC_GRRaAz
这两个做比较合适吗
springboot中使用自定义两级缓存

  工作中用到了springboot的缓存,使用起来挺方便的,直接引入redis或者ehcache这些缓存依赖包和相关缓存的starter依赖包,然后在启动类中加入@EnableCaching注解,然后在需要的地方就可以...

泪o滴
2018/05/23
0
0
作为一名架构师,我们应该掌握的技术是什么?

作为一名架构师,我们应该掌握哪些技术呢? 占占简单来谈一下: 面向对象OOP的理解,我是说理解,我不希望你告诉我百度里的概念! 常用的数据结构,对于常见的数据结构,算法,应该知道一些!...

mcy247
2017/12/05
0
0
YouYaX/了了社区liaoliao

了了社区liaoliao 项目介绍 这是一个基于Bootstrap和其他优秀开源插件搭建的开源的PHP轻论坛 官网地址:http://www.youyax.com/liaoliao/ 软件架构 PHP框架结构开发,层次清晰 安装教程 下载...

YouYaX
2018/05/02
0
0
基于 Bootstrap 开源的 PHP 轻论坛 - 了了社区liaoliao

了了社区liaoliao 项目介绍 这是一个基于Bootstrap和其他优秀开源插件搭建的开源的PHP轻论坛 官网地址:http://www.youyax.com/liaoliao/ 软件架构 PHP框架结构开发,层次清晰 安装教程 下载...

超文本预处理器工程师
2018/05/02
0
0
阿里巴巴在线笔试题

1,写一个单例(延迟加载,高性能) 2,下面这个题目是答案 /** * * @param pattern * aabb * @param str * 北京 中国 北京 中国 * @return */ public boolean match(String pattern, String...

weiliu007
2016/09/21
26
0

没有更多内容

加载失败,请刷新页面

加载更多

IT兄弟连 Java语法教程 Java语言的跨平台特性

什么是平台 Java是可以跨平台的编程语言,那么首先我们需要知道什么是平台,通常我们把CPU与操作系统的整体称为平台。 CPU大家都知道,是计算机的大脑,它既负责思维运算,又负责计算机中各种...

老码农的一亩三分地
16分钟前
0
0
http传值问题

这两天遇到一个问题 ,与一个渠道联调接口,http请求,展示ptf 的需求,服务方以一个二进制的方式返回。 当时我们在一开始开发的时候,我们按照读取文件的方式处理,本地存一个ptf 的方式 ,...

鬼才王
24分钟前
1
0
【面试】如果你这样回答“什么是线程安全”,面试官都会对你刮目相看

不是线程的安全 面试官问:“什么是线程安全”,如果你不能很好的回答,那就请往下看吧。 论语中有句话叫“学而优则仕”,相信很多人都觉得是“学习好了可以做官”。然而,这样理解却是错的。...

中关村的老男孩
25分钟前
4
0
5.01- Druid数据源配置

1、配置项 配置 缺省值 说明 name 无 配置这个属性的意义在于,如果存在多个数据源,监控的时候 可以通过名字来区分开来。如果没有配置,将会生成一个名字, 格式是:"DataSource-" + Syste...

静以修身2025
29分钟前
2
0
itop4412开发板-Linux内核的编译

本篇文章基于itop4412开发板 5.3.2.1源码目录 Linux 内核源码在光盘“06_源码_uboot 和 kernel”目录下,如下图所示。 5.3.2.2 编译器 内核的编译器和 uboot 的编译器一样,参考“5.3.1.2 编...

书白
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部