缓存中间件
晓寒风骤
这个作者很懒,什么都没留下…
展开
-
Redis(十):redis的I/O多路复用
引出IO多路复用为什么 Redis 中要使用 I/O 多路复用这种技术呢?首先,Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务,而I/O 多路复用就是为了解决这个问题而出现的。要弄清问题先要知道问题的出现原因由于进程的执行过程是线性的(也就是顺序执行),当我们调用低速系统I/O(read,write,acce..原创 2020-06-03 15:45:23 · 417 阅读 · 1 评论 -
Redis(九):redis为何单线程,为何使用跳表
CPU在切换线程的时候,有一个上下文切换时间,而这个上下文切换时间是非常耗时的!打个比方,一个CPU主频是 2.6GHz,这意味着每秒可以执行:2.6*10^9 个指令,那么每个指令的时间大概是0.38ns!而一次上下文切换,将近需要耗时2000ns!而这个时间内,CPU什么都干不了,只是做了保存上下文都动作!""OK,就是在I/O操作都时候,例如磁盘I/O,网络I/O等!为什么一...原创 2020-03-10 10:41:43 · 169 阅读 · 0 评论 -
本地缓存(三):使用Guava cache构建本地缓存
前言最近在一个项目中需要用到本地缓存,在网上调研后,发现谷歌的Guva提供的cache模块非常的不错。简单易上手的api;灵活强大的功能,再加上谷歌这块金字招牌,让我毫不犹豫的选择了它。仅以此博客记录我在使用过程中的点滴。什么是本地缓存在我们的应用中,大部分的计算是昂贵的,而且是可复用的,并且计算结果不会经常发生改变。这时候我们就可以将这些昂贵的计算结果缓存到内存中,下次使用的时候直接...原创 2019-09-17 10:09:24 · 272 阅读 · 0 评论 -
本地缓存(二):Java 本地缓存的实现
在java web 项目中对频繁读取且相对稳定的数据一般都是用了缓存,这样可以极大地减少数据库的压力且提高的响应的速度。 一般都是,通过key 从缓存中读取value 如果value 为空则读取DB,将DB读取的数据再放入缓存这样的一个过程。一个简易的本地缓存实现。首先数据一般都是有时效性的,不是放入缓存就一直存在,如果超过一定时间没有被使用则应当被清空,使其系统中不会使用到...原创 2019-09-17 10:08:02 · 453 阅读 · 0 评论 -
本地缓存(一):本地缓存的原理及技术选型参考
互联网架构设计的五大要素:高性能、高可用、可伸缩性、可扩展性、安全。如何做到高性能、高可用,缓存是一大助力。我们知道,绝大部分的时候,读数据写数据符合二八定律。并且读数据中,百分之二十是数据被经常读取(热数据)。那么我们解决这百分之二十的数据的方法就可以取得很好的一个性能。缓存分类从很多互联网架构设计中可以看到,从用户在浏览器上输入网址开始,经历了太多的缓存。我大概列举...原创 2019-09-17 10:06:32 · 1103 阅读 · 0 评论 -
Redis(八):redis的分布式解决方案--codis
codis是豌豆荚开源的分布式服务器,目前处于稳定阶段。原文地址:https://github.com/wandoulabs/codis/blob/master/doc/tutorial_zh.mdCodis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可...原创 2019-09-09 14:06:27 · 163 阅读 · 0 评论 -
Redis(七):数据异构的武器-BINLOG+MQ 以及阿里cannal的使用
1、定义何谓数据异构,比如我们将DB里面的数据持久化到REDIS里面去,就是一种数据异构的方式。如果要下个定义的话:把数据按需(数据结构、存取方式、存取形式)异地构建存储。2、常见应用场景分库分表中有一个最为常见的场景,为了提升数据库的查询能力,我们都会对数据库做分库分表操作。比如订单库,开始的时候我们是按照订单ID维度去分库分表,那么后来的业务需求想按照商家维度去查询,比如我想查询某...原创 2019-09-09 11:22:25 · 973 阅读 · 0 评论 -
Redis(六):数据库和缓存双写一致性方案解析
一般来说,对于一个新的业务,一般会经历这几个阶段:阶段1:单库阶段读写流量都比较小,这个时候所有的读写操作都在主库就ok了这个时候,从库可能只是用来灾备风险分析:从数据一致性角度来说没有风险,全走主库美滋滋~阶段2:多库阶段阶段2.1:单库扛不住了,这个时候就会考虑到分库分表了,通过增加数据库的方式,把单库的QPS降下来风险分析:从数据一致性角度来说没有风险,全走主库依然美...原创 2019-08-28 16:45:58 · 1233 阅读 · 0 评论 -
Redis(五):由Redis客户端连接数大小说开去
缘起:redis.clients.jedis.exceptions.JedisConnectionException:Could not get a resource from the pool生产环境的业务服务器报了大量上面的错误。Jedis无法从连接池中获取一个可用的连接,所有客户端与Redis服务端保持通信的连接都在工作中,没有闲置的连接可以使用。 目前生产环境每...原创 2019-08-27 15:39:40 · 641 阅读 · 0 评论 -
Redis(四):自定义注解实现 redis缓存操作
一、注解的基础1.注解的定义:Java文件叫做Annotation,用@interface表示。2.元注解:@interface上面按需要注解上一些东西,包括@Retention、@Target、@Document、@Inherited四种。3.注解的保留策略: @Retention(RetentionPolicy.SOURCE)// 注解仅存在于源码中,在class字...原创 2019-08-19 17:38:41 · 1596 阅读 · 0 评论 -
Redis(三):缓存删除策略
redis 存储结构redis的存储结构从外层往内层依次是redisDb、dict、dictht、dictEntry。 redis的Db默认情况下有15个,每个redisDb内部包含一个dict的数据结构。 redis的dict内部包含dictht的数组,数组个数为2,主要用于hash扩容使用。 dictht内部包含dictEntry的数组,可以理解就是hash的桶,然后如果冲突通过挂链...原创 2019-07-19 13:44:51 · 1049 阅读 · 0 评论 -
Spring Boot缓存注解@Cacheable、@CacheEvict、@CachePut使用
从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。所以在使用Spring Cache的时候我们要保证我们缓存的方法对...原创 2019-06-05 21:59:58 · 230 阅读 · 0 评论 -
Redis(二):数据库和缓存双写一致性方案解析
为什么写这篇文章?首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库,其实大家存在很大的争议。目前没有一篇全面的博客,对这几种方案进行解析。于是写了这篇文章。文章结构本文由以下三个部分组成1、讲解缓存更新策略...原创 2019-06-05 21:32:10 · 264 阅读 · 0 评论 -
Redis(一):redis的应用场景
会员服务venus作为最底层应用,接口qps,tps性能对整条调用链路的性能起到至关重要的作用。目前相关查询接口压测结果不甚理想,基本稳定在100-200之间。平均sql占用时间100ms左右。为了提升接口性能。目前思考了较为全面的方案。双管齐下。1.缩短cpu计算时间:能用异步的尽量走异步;减少不必要的日志输出;接口的重构;2.缩短sql查询时间:经分析发现,所有...原创 2019-06-05 21:29:35 · 149 阅读 · 0 评论