Cache Travel-09-从零开始手写缓存框架(二)redis expire 过期原理及实现
手写 Redis 系列
java从零手写实现redis(一)如何实现固定大小的缓存?
java从零手写实现redis(三)redis expire 过期原理
java从零手写实现redis(三)内存数据如何重启不丢失?
java从零手写实现redis(四)添加监听器
java从零手写实现redis(五)过期策略的另一种实现思路
java从零手写实现redis(六)AOF 持久化原...
2018-09-01 04:24:42 |
Cache
Cache Travel-09-从零手写 redis(一)FIFO 淘汰策略原理详解及实现
手写 Redis 系列
java从零手写实现redis(一)如何实现固定大小的缓存?
java从零手写实现redis(三)redis expire 过期原理
java从零手写实现redis(三)内存数据如何重启不丢失?
java从零手写实现redis(四)添加监听器
java从零手写实现redis(五)过期策略的另一种实现思路
java从零手写实现redis(六)AOF 持久化原...
2018-09-01 04:24:42 |
Cache
Cache Travel-09-从零手写 redis(零)为什么手写 redis
redis 的重要性
做 java 的,天天喊着高性能,高并发,高可用。
高性能之中,基本上都离不开 redis。
特别是在当今对于性能要求越来越高的时代,mysql 等传统数据库越来越需要与 redis 结合,这样才能更好的适应我们的业务。
以前手写过一次 hades,觉得不满意,就废弃了。
本次重新再写一次。
开源地址:
https://github.com/houb...
2018-09-01 04:24:42 |
Cache
Cache Travel-08-更好的使用缓存
基本概念
在合理应用缓存前,需要了解缓存领域里相关的几个常用术语:
1)缓存命中:表示数据能够从缓存中获取,不需要回源;
2)Cache miss:表示没有命中缓存,如果缓存内存中还有内存空间的话,会将数据加入到缓存中;
3)存储成本:当没有命中缓存时,回源获取后会将数据放置到存储中,整个将数据放置到存储空间所需要的时间以及空间称之为存储成本;
4)缓存失效:当源数据发生变更后,意...
2018-09-01 04:24:42 |
Cache
Cache Travel-07-如何正确的缓存
业务场景
本文讨论的是对于按需创建的数据库记录,如何实现缓存?
获取 id
例如,考察一个按需创建Account并返回其ID的函数:
@Transactional
public Long getAccount(Long userId, String currency) {
String key = buildCacheKey(userId, currency);
Lo...
2018-09-01 04:24:42 |
Cache
Cache Travel-06-Tair
Tair
Tair 是快速访问内存(MDB)/持久性(LDB)存储服务。
Tair采用高性能、高可用的分布式集群架构,可以满足业务对读写性能和可扩展容量的高要求。
项目结构
System architecture
Tair 集群具有三个必要的模块:ConfigServer、DataServer 和客户端。
一般来说,一个Tair集群包括两台ConfigServer和多台DataS...
2018-09-01 04:24:42 |
Cache
Cache Travel-05-LRUMAP
LRU
本文通过对 Apache Commons Collections 项目中 LRUMap 这个集合类的源代码进行详细解读,为帮助大家更好的了解这个集合类的实现原理以及使用如何该集合类。
算法简介
首先介绍一下LRU算法。
LRU 是由 Least Recently Used 的首字母组成,表示最近最少使用的含义,一般使用在对象淘汰算法上。也是比较常见的一种淘汰算法。
简单的实...
2018-09-01 04:24:42 |
Cache
Cache Travel-04-in action
优化方案
限额限次短期优化方案:
基础方案
(1)添加 merId 过滤条件,便于命中联合索引。 (索引)
(2)每一层统计,次数和金额并行执行(从概率上来说,拦截是低概率,压力还是会到 mongodb )
fixed(2) 固定线程数2(并行)
注意日志的 logId
(3)添加表为对应业务的分表。(分表,效果一般)
(4)降低存储量。专门为限额建立表(降低单条数据量)
全...
2018-09-01 04:24:42 |
Cache