
数据缓存中间件
文章平均质量分 91
数据缓存中间件、layering-cache、caffeine
xiaolyuh123
凡是过去,皆为序幕
展开
-
Redis 序列化方式StringRedisSerializer、FastJsonRedisSerializer和KryoRedisSerializer
当我们的数据存储到Redis的时候,我们的键(key)和值(value)都是通过Spring提供的Serializer序列化到数据库的。RedisTemplate默认使用的是JdkSerializationRedisSerializer,StringRedisTemplate默认使用的是StringRedisSerializer。Spring Data JPA为我们提供了下面的Serializ...原创 2017-11-30 23:14:43 · 48734 阅读 · 9 评论 -
Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存,时间支持在配置文件中配置
问题描述Spring Cache提供的@Cacheable注解不支持配置过期时间,还有缓存的自动刷新。我们可以通过配置CacheManneg来配置默认的过期时间和针对每个缓存容器(value)单独配置过期时间,但是总是感觉不太灵活。下面是一个示例:@Beanpublic CacheManager cacheManager(RedisTemplate redisTemplate) {...原创 2017-11-23 23:36:38 · 31956 阅读 · 6 评论 -
缓存设计要点-缓存穿透、缓存击穿和缓存雪崩实践
我们使用缓存的主要目是提升查询速度和保护数据库等稀缺资源不被占满。而缓存最常见的问题是缓存穿透、击穿和雪崩,在高并发下这三种情况都会有大量请求落到数据库,导致数据库资源占满,引起数据库故障。今天我主要分享一下layering-cache缓存框架在这个三个问题上的实践方案。概念缓存穿透在高并发下,查询一个不存在的值时,缓存不会被命中,导致大量请求直接落到数据库上,如活动系统里面查询一个不存在的......原创 2018-12-29 10:27:03 · 1691 阅读 · 0 评论 -
为监控而生的多级缓存框架 layering-cache
简介layering-cache是在Spring Cache基础上扩展而来的一个缓存框架,主要目的是在使用注解的时候支持配置过期时间。layering-cache其实是一个两级缓存,一级缓存使用Caffeine作为本地缓存,二级缓存使用redis作为集中式缓存。并且基于redis的Pub/Sub做缓存的删除,所以它是一个适用于分布式环境下的一个缓存系统。支持支持缓存监控统计支持缓存过期时...原创 2018-10-15 10:06:17 · 2376 阅读 · 5 评论 -
Caffeine 缓存
简介在本文中,我们来看看Caffeine— 一个高性能的 Java 缓存库。缓存和 Map 之间的一个根本区别在于缓存可以回收存储的 item。回收策略为在指定时间删除哪些对象。此策略直接影响缓存的命中率 — 缓存库的一个重要特征。Caffeine 因使用 Window TinyLfu 回收策略,提供了一个近乎最佳的命中率。填充策略(Population)Caffein...原创 2017-12-13 17:07:05 · 33684 阅读 · 4 评论 -
Spring Boot缓存实战 Redis + Caffeine 实现多级缓存
在前文我们介绍了如何使用Redis或者Caffeine来做缓存。Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存-2 Spring Boot缓存实战 Caffeine问题描述:通过使用redis和Caffeine来做缓存,我们会发现一些问题。如果只使用redis来做缓存我们会有大量的请求到redis,但是每次请求的数据都是一样的,假如这一部分数据就放在应用服务...原创 2017-12-21 17:50:03 · 14173 阅读 · 7 评论 -
Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存-2
问题上一篇Spring Boot Cache + redis 设置有效时间和自动刷新缓存,时间支持在配置文件中配置,说了一种时间方式,直接扩展注解的Value值,如:@Override@Cacheable(value = "people#${select.cache.timeout:1800}#${select.cache.refresh:600}", key = "#person.i...原创 2017-12-16 14:51:11 · 33283 阅读 · 6 评论 -
Spring Boot缓存实战 Caffeine
Caffeine和Spring Boot集成Caffeine是使用Java8对Guava缓存的重写版本,在Spring Boot 2.0中将取代Guava。如果出现Caffeine,CaffeineCacheManager将会自动配置。使用spring.cache.cache-names属性可以在启动时创建缓存,并可以通过以下配置进行自定义(按顺序):spring.cache.caffei...原创 2017-12-13 17:14:27 · 17523 阅读 · 3 评论 -
Spring Boot 数据缓存 Cache
我们知道一个程序的瓶颈在于数据库,我们也知道内存的速度是大大快于硬盘的速度的。当我们需要重复地获取相同的数据的时候,我们一次又一次的请求数据库或者远程服务,导致大量的时间耗费在数据库查询或者远程方法调用上,导致程序性能的恶化,这便是数据缓存要解决的问题。Spring缓存支持Spring定义了org.springframework.cache.CacheManager和org.springf...原创 2017-08-10 16:15:09 · 1773 阅读 · 0 评论 -
Spring Boot缓存实战 默认Cache(ConcurrentMapCacheManager)
Spring boot默认使用的是SimpleCacheConfiguration,即使用ConcurrentMapCacheManager来实现缓存。pom文件<dependencies> <dependency> <groupId>org.springframework.boot</groupId> ...原创 2017-08-11 13:53:46 · 15646 阅读 · 4 评论 -
Spring Boot缓存实战 EhCache
Spring boot默认使用的是SimpleCacheConfiguration,即使用ConcurrentMapCacheManager来实现缓存。但是要切换到其他缓存实现也很简单pom文件在pom中引入相应的jar包<dependencies> <dependency> <groupId>org.springframework.boot...原创 2017-08-14 14:20:19 · 26213 阅读 · 4 评论 -
Spring Boot缓存实战 Redis
Spring boot默认使用的是SimpleCacheConfiguration,即使用ConcurrentMapCacheManager来实现缓存。但是要切换到其他缓存实现也很简单。下面是使用redis来作为缓存:pom文件在pom中引入相应的jar包<dependencies> <dependency> <groupId>org.spr...原创 2017-08-15 10:26:33 · 4360 阅读 · 0 评论 -
Spring Redis Cache @Cacheable 大并发下返回null
问题描述最近我们用Spring Cache + redis来做缓存。在高并发下@Cacheable 注解返回的内容是null。查看了一下源代码,在使用注解获取缓存的时候,RedisCache的get方法会先去判断key是否存在,然后再去获取值。这了就有一个漏铜,当线程1判断了key是存在的,紧接着这个时候这个key过期了,这时线程1再去获取值的时候返回的是null。RedisCache的g...原创 2017-11-23 11:55:21 · 6574 阅读 · 5 评论 -
Java 7之基础 - 强引用、弱引用、软引用、虚引用
1、强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下:[java] view plain copyObject o=new Object(); // 强引用 当内存空间不足,Java虚拟机宁愿抛出OutOfMemo转载 2017-12-12 10:06:24 · 1232 阅读 · 0 评论