随笔分类 -  缓存

摘要:本文及后续文章,Redis版本均是v3.2.8 上篇文章介绍了RDB的优缺点,我们先来回顾下RDB的主要原理,在某个时间点把内存中所有数据保存到磁盘文件中,这个过程既可以通过人工输入命令执行,也可以让服务器周期性执行。 RDB持久化机制RDB的实现原理,涉及的文件为rdb.h和rdb.c。 一、初始 阅读全文
posted @ 2017-07-29 12:34 三石雨 阅读(4564) 评论(0) 推荐(0)
摘要:一、前言 由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。 Redis提供两种方式进行持久化, 一种是RDB()持久化(原理是将Reids在内存中的数据库记录定时 阅读全文
posted @ 2017-07-17 09:50 三石雨 阅读(473) 评论(0) 推荐(0)
摘要:二、Redis Key失效机制 Redis的Key失效机制,主要借助借助EXPIRE命令: EXPIRE key 30 上面的命令即为key设置30秒的过期时间,超过这个时间,我们应该就访问不到这个值了。接下来我们继续深入探究这个问题,Redis缓存失效机制是如何实现的呢? 惰性淘汰机制 惰性淘汰机 阅读全文
posted @ 2017-07-05 22:29 三石雨 阅读(4544) 评论(0) 推荐(0)
摘要:本文及后续文章,Redis版本均是v3.2.8 一、内存回收策略 maxmemory配置用于配置Redis存储数据时指定限制的内存大小。我们可以通过redis.conf配置或者使用CONFIG SET命令来进行运行时配置。 例如在redis.conf文件中,配置内存限制为100mb maxmemor 阅读全文
posted @ 2017-07-05 22:27 三石雨 阅读(1523) 评论(0) 推荐(0)
摘要:一、HyperLogLog HyperLogLog是用来做基数统计的。 其可以非常省内存的去统计各种计数,比如注册ip数、每日访问IP数、页面实时UV(PV肯定字符串就搞定了)、在线用户数等在对准确性不是很重要的应用场景。 HyperLogLog的优点是: 在输入元素的数量或者体积非常非常大时,计算 阅读全文
posted @ 2017-06-26 18:27 三石雨 阅读(3507) 评论(0) 推荐(0)
摘要:本文摘抄于《Redis内部数据结构详解-skiplist》 一、skiplist的由来 skiplist,顾名思义,首先它是一个list。实际上,它是在有序链表的基础上发展起来的。 我们先来看一个有序链表,如下图(最左侧的灰色节点表示一个空的头结点): 在这样一个链表中,如果我们要查找某个数据,那么 阅读全文
posted @ 2017-06-26 11:48 三石雨 阅读(457) 评论(0) 推荐(0)
摘要:本文及后续文章,Redis版本均是v3.2.8 我们会经常选择使用sorted set数据结构,是由于其提供的操作非常丰富,可以满足非常多的应用场景。sorted set数据结构是由skiplist(跳跃列表)、ziplist和dict实现的。 skiplist本质上是一种查找数据据结构,即根据给定 阅读全文
posted @ 2017-06-26 11:35 三石雨 阅读(1424) 评论(0) 推荐(0)
摘要:本文及后续文章,Redis版本均是v3.2.8 我们在使用Redis对外暴露的list数据结构时,给我们带来极大的便利性。其底层实现所依赖的内部数据结构就是quicklist。 我们先来回忆下list这种数据结构的特点: 表list是一个能维持数据项先后顺序的双向链表 在表list的两端追加和删除数 阅读全文
posted @ 2017-06-18 15:02 三石雨 阅读(2412) 评论(2) 推荐(0)
摘要:本文及后续文章,Redis版本均是v3.2.8 本篇文章我们来分析下一种特殊编码的双向链表-ziplist(压缩列表),这种数据结构的功能是将一系列数据与其编码信息存储在一块连续的内存区域,这块内存物理上是连续的,逻辑上被分为多个组成部分,其目的是在一定可控的时间复杂读条件下尽可能的减少不必要的内存 阅读全文
posted @ 2017-06-17 17:22 三石雨 阅读(3061) 评论(0) 推荐(0)
摘要:本文及后续文章,Redis版本均是v3.2.8 上文我们说到intset整型集合的数据结构定义即元素的添加和查询操作,本文我们来看下Redis暴露给外面使用的Set集合,先通过一些基本的命令回顾下set 一、set底层数据结构 我们查阅Redis Set命令文档知道: sadd用于分别向集合 mys 阅读全文
posted @ 2017-06-12 15:11 三石雨 阅读(1344) 评论(0) 推荐(0)
摘要:本文及后续文章,Redis版本均是v3.2.8 上篇文章《Redis数据结构之robj》,我们说到redis object数据结构,其有5中数据类型:OBJ_STRING,OBJ_LIST, OBJ_SET,OBJ_ZSET,OBJ_HASH。集合对象set有着广泛的实际业务应用场景,它包含的元素无 阅读全文
posted @ 2017-06-11 16:35 三石雨 阅读(707) 评论(0) 推荐(0)
摘要:本文及后续文章,Redis版本均是v3.2.8 我们知道一个database内的这个映射关系是用一个dict来维护的。dict的key固定用一种数据结构来表达,这这数据结构就是动态字符串sds。而value则比较复杂,为了在同一个dict内能够存储不同类型的value,这就需要一个通用的数据结构。针 阅读全文
posted @ 2017-06-03 17:56 三石雨 阅读(1767) 评论(0) 推荐(0)
摘要:本文及后续文章,Redis版本均是v3.2.8 本篇文章讲解sds基本操作函数,我们从源码角度来进一步理解。 一、sds创建函数和销毁 sds创建函数 /* Create a new sds string with the content specified by the 'init' pointe 阅读全文
posted @ 2017-05-30 22:53 三石雨 阅读(1567) 评论(0) 推荐(0)
摘要:本文及后续文章,Redis版本均是v3.2.8 在文章《Redis 数据结构之dict》《Redis 数据结构之dict(2)》中,从代码层面做了简单理解。总感觉思路的不够条理性,特开一篇文章把哈希表中几个知识点串联下。 一、先来回顾下哈希表结构定义 /** * 哈希表 */ typedef str 阅读全文
posted @ 2017-05-22 10:30 三石雨 阅读(1412) 评论(0) 推荐(0)
摘要:本文及后续文章,Redis版本均是v3.2.8 上篇文章《Redis 数据结构之dict》,我们对dict的结构有了大致的印象。此篇文章对dict是如何维护数据结构的做个详细的理解。 老规矩还是打开Redis的源码,文件dict.c 一、dict数据结构的维护 1、dictCreate - 创建一个 阅读全文
posted @ 2017-05-20 17:49 三石雨 阅读(1258) 评论(0) 推荐(0)
摘要:上篇文章《Redis数据结构概述》中,了解了常用数据结构。我们知道Redis以高效的方式实现了多种数据结构,因此把Redis看做为数据结构服务器也未尝不可。研究Redis的数据结构和正确、高效使用,对我们的应用程序会大有裨益。接下来的文章中我们逐个深入理解Redis的数据结构和使用场景。 Redis 阅读全文
posted @ 2017-05-15 10:32 三石雨 阅读(1344) 评论(0) 推荐(0)
摘要:缘起最近有个分布式限速的需求。支付宝的接口双11只允许每秒调用10次。单机的限速,自然是用google guava的RateLimiter。http://docs.guava-libraries.googlecode.com/git-history/master/javadoc/com/google... 阅读全文
posted @ 2015-09-05 17:45 三石雨 阅读(442) 评论(0) 推荐(0)
摘要:目前广泛使用的分布式缓存Redis和Memcached均支持对整数型Value值的增减,对应到具体命令中就是incr和decr命令。 incr/decr是原子性操作(memcached 1.2.4及以后版本加入/redis),其被广泛应用于计数器和限速器。 一、分布式缓存Redis和M... 阅读全文
posted @ 2015-09-05 15:37 三石雨 阅读(4940) 评论(0) 推荐(1)