项目中的传统架构在服务启动时 读取数据库的大部分数据到本地内存,在看到redis的作用时发出疑问,到底有什么样的区别以及怎么选择呢,下面是别人的回答

使用本地缓存快还是使用redis缓存好?

Redis早已家喻户晓,其性能自不必多说。

但是总有些时候,我们想把性能再提升一点,想着redis是个远程服务,性能也许不够,于是想用本地缓存试试!想法是不错的。那么就让我们来比较下二者的差别吧!

  1. 读写速度,不考虑并发问题,本地缓存自然是最快的。但是如果本地缓存不加锁,那应并发了咋办呢?所以,我们以加锁方式再比较一次。
  2. 场景使用,同一数据,从数据库取出来,放到redis只要一次,而放到本地缓存,则需要n个集群次
  3. 本地缓存无法用于重复点击,重复点击会分发请求到多台服务器,而用本地缓存只能防止本机重复点击,redis则可以防止,但是时间间隔也需要在redis的读写差之外。
  4. redis内存可能n多扩充,而本地扩大堆内存代价是很大的。
  5. 本地缓存需要自己实现过期功能,实现不好可能导致极其严重的后果,而redis经过大量的流量验证,许多漏洞无需考试,安全。
  6. 本地缓存无法提供丰富的数据结构,redis可以。
  7. redis可以写磁盘,持久化,本地缓存不可以或者说很麻烦要考虑的东西太多。
  8. 各位开发同学水平差别大,使用本地缓存极有可能导致严重的线程安全问题,并发考虑严重。
  9. 加本地缓存后,代码复杂度急剧上升,后面进来的开发很难一下领会原有开发想法。间接提升维护成本。
  10. 其实在map和redis取值这里省的时间,可能在我们写得乱七八糟的代码里,早都不算啥了,所有有时候咱们真的没必要较那几毫秒的真!

个人感觉就是,框架是尽量选择最优的方式进行处理,本地缓存胜。业务代码尽量以最稳的方式进行处理,redis胜。

选择什么样的方式,还得看用于什么样的场景!

本地缓存和redis的更多相关文章

  1. 本地缓存,Redis缓存,数据库DB查询(结合代码分析)

    问题背景 为什么要使用缓存?本地缓存/Redis缓存/数据库查询优先级? 一.为什么要使用缓存 原因:CPU的速度远远高于磁盘IO的速度问题:很多信息存在数据库当中的,每次查询数据库就是一次IO操作所 ...

  2. C#中Fun简单介绍及运用到项目中与缓存(本地缓存,Redis)结合使用

     1.简单介绍Fun C#中Fun和Action有点类似,都是一个委托方法,不同的是Func是有返回值的,而Action没有. (T)此委托封装的方法的参数类型. 备注:详情了解Fun到(https: ...

  3. redis订阅发布消息操作本地缓存

    Redis 本地缓存+远程缓存方案 使用纯java的ehcache作为本地缓存 Reids 作为远程分布式缓存 解决redis缓存压力过大,提高缓存速度,以及缓存性能. Redis和ehcache缓存 ...

  4. spring boot: 用redis的消息订阅功能更新应用内的caffeine本地缓存(spring boot 2.3.2)

    一,为什么要更新caffeine缓存? 1,caffeine缓存的优点和缺点 生产环境中,caffeine缓存是我们在应用中使用的本地缓存, 它的优势在于存在于应用内,访问速度最快,通常都不到1ms就 ...

  5. C#自由组合本地缓存、分布式缓存和数据库的数据

    一.背景介绍: 我们在进行数据存储的时候,有时候会加入本地缓存.分布式缓存以及数据库存储三级的结构,当我们取值的时候经常是像下面这样的流程: 1.先取本地缓存,如果值存在直接返回 2.本地缓存不存在, ...

  6. 使用本地缓存快还是使用redis缓存好?

    使用本地缓存快还是使用redis缓存好? Redis早已家喻户晓,其性能自不必多说. 但是总有些时候,我们想把性能再提升一点,想着redis是个远程服务,性能也许不够,于是想用本地缓存试试!想法是不错 ...

  7. lua模块demo(redis,http,mysql,cjson,本地缓存)

    1. lua模块demo(redis,http,mysql,cjson,本地缓存) 1.1. 配置 在nginx.conf中设置lua_shared_dict my_cache 128m; 开启ngi ...

  8. 缓存子系统如何设计(Cachable tag, Memcache/redis support, xml config support, LRU/LFU/本地缓存命中率)

    大家对这段代码肯定很熟悉吧: public List<UserInfo> SearchUsers(string userName) { string cacheKey=string.For ...

  9. 缓存方案:本地guavaCache, 远程redis?

    线程内部缓存:a. 局部变量HashMap, 方法间传递  b. 使用ThreadLocal 本地缓存:单jvm内共享 可以使用(Concurrent)HashMap自己实现,也可以使用GuavaCa ...

随机推荐

  1. springmvc与html之间的Json交互

    1.配置pom.xml 错误信息:The container 'Maven Dependencies' references non existing library 解决方案:下图的checkbox ...

  2. MySQL---7、常用操作

    1.表列的添加.修改和删除 2.视图 3.字符集和校对集 4.触发器相关知识

  3. NET 知识体系结构

    以下是我根据自身的情况来总结的ASP.NET 知识体系 ASP.NET 知识体系 1.语言C#——C#-知识梳理 2.ASP.NET 3.WinForm 4.ASP.NET MVC 5.EF

  4. word转pdf(使用office)

    1.安装office软件 2.在vs中写代码 注意需要引入 Microsoft.Office.Interop.Word插件 /// <summary> /// 将word转换成pdf文件 ...

  5. 面向对象(基础oop)之属性与构造函数

    大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开 ...

  6. 十二、curator recipes之双重屏障DoubleBarrier

    简介 curator实现了单个屏障barrier和双重屏障DoubleBarrier,单个屏障就是在一个进程里面设置了屏障,并等待其它进程去移除这个屏障,否则一直阻塞.双重屏障就是设置了两道屏障,两个 ...

  7. 解决:IDEA springmvc maven 项目搭建完后没有生成 webcontent 目录

    前言:发现项目创建好,配置好,写好测试代码,一看没有 webcontent 目录. 问题: 解决方案: ctrl + alt + Shift + S

  8. Shared——The best front-end hacking cheatsheets — all in one place.

    原文地址:https://medium.freecodecamp.org/modern-frontend-hacking-cheatsheets-df9c2566c72a The best front ...

  9. BZOJ1149 [CTSC2007]风玲

    Description Input Output 输出仅包含一个整数.表示最少需要多少次交换能使风铃满足Ike的条件.如果不可能满足,输出-1. Sample Input 6 2 3 -1 4 5 6 ...

  10. 关于beginPath()和closePath()的关系>>canvas的beginPath和closePath分析总结,包括多段弧的情况

    今天查了一下beginPath()和closePath()关于区域的划分问题,发现到一篇解释得很明白的文章,我就直接转载到这里了. 原文请看:canvas的beginPath和closePath分析总 ...