016 进程内缓存和进程外缓存的对比

对比redis缓存和本地内存

这两者是什么,

在java应用中,对于访问频率比较高,又不怎么变化的数据,常用的解决方案是把这些数据加入缓存。相比DB,缓存的读取效率快好不少。java应用缓存一般分两种,一是进程内缓存,就是使用java应用虚拟机内存的缓存;另一个是进程外缓存,现在我们常用的各种分布式缓存。相比较而言,进程内缓存比进程外缓存快很多,而且编码也简单;但是,进程内缓存的存储量有限,使用的是java应用虚拟机的内存,而且每个应用都要存储一份,有一定的资源浪费。进程外缓存相比进程内缓存,会慢些,但是,存储空间可以横向扩展,不受限制。

进程内缓存和进程外缓存,各有优缺点,针对不同场景,可以分别采用不同的缓存方案。对于数据量不大的,我们可以采用进程内缓存。或者只要内存足够富裕,都可以采用,但是不要盲目以为自己富裕,不然可能会导致系统内存不够。

数据访问时间的数量级别

事件 时间
1 从数据库中读取一条数据(有索引) 十几毫秒
2 从远程分布式缓存读取一条数据 0.5毫秒
3 从内存中读取1MB数据 十几微妙

插入一组数据做位参考

平均单次请求的时间,机器配置相关(i5 8GB的pc)

使用的缓存 t=某次的数据,测试的共次数,av=平均数 ns
本地缓存 t=285907391ns,times=2500,av=468464138
redis缓存 t=465590284ns,times=2653,av=961629872
结论 单次请求的时间 本地缓存小于redis 缓存

测试的方法:

50个线程,每个线程中连续请求10次

使用的缓存
本地缓存 请求500,返回500,时间9748ms
redis缓存 请求500,返回437,时间 12000ms
结论 支持的并发请求数 本地缓存大于 使用redis缓存

参考链接

  1. java应用本地缓存
  2. Java学习之ConcurrentHashMap实现一个本地缓存
  3. 高效的找出两个List中的不同元素
  4. SqlServer基础之(触发器)

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 154,658评论 23 678
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 118,155评论 14 132
  • 是世界,还是你
    暖汐湪夕阅读 27评论 0 0
  • 链表与顺序表的逻辑结构一致, 除了首尾节点/元素, 有一个直接前驱和后继, 两者物理结构不同, 链表由一个节点来存...
    chensifang阅读 188评论 0 3
  • 在所有物是人非的景色里, 只有你是最好。 无动于衷的绚烂多姿, 无与伦比的缤纷飞跃。 沙色的极致爱恋, 注定得不到...
    阿俊xi阅读 138评论 0 1