Redis3.0
文章平均质量分 78
简要介绍redis的日常使用、遇到的问题和解决方法。
白夜行515
世界上有两样东西不能直视:一是太阳,二是人心!
展开
-
【Redis深入】aof与reaof源码剖析
引入如果你对Redis的 aof 和 reaof 机制还不太了解,请点击Redis持久化机制的介绍我们先来简单的回顾一下aof持久化,它是通过保存redis服务器所执行的写命令来记录数据库状态的。通过配置选项来设置刷新(写入同步)到磁盘上aof文件的间隔(默认是每秒)。reaof是因为AOF文件的内容会越来越多,为了解决AOF文件体积膨胀的问题,重写AOF机制出现了,其实AOF重写并不需要对现原创 2017-07-31 06:57:16 · 889 阅读 · 0 评论 -
【Redis深入】Jedis的使用
1.Jedis的基本使用基本使用很简单,就是Redis的基本命令,首先需要导入jar包 public void firstConnection() { //连接redis的IP和端口号 Jedis jedis = new Jedis("127.0.0.1",6379); //输入密码 jedis.auth("dream");原创 2017-07-26 08:27:45 · 454 阅读 · 0 评论 -
【Redis源码】rehash源码剖析
如果你对rehash还不是很了解,请参考:图解rehash1.rehash的分类Redis为了兼顾性能的考虑,分为lazy和active的两种rehash操作,同时进行,直到rehash完成。lazy rehashing:在每次对dict进行操作的时候执行一个slot的rehashactive rehashing:每100ms里面使用1ms时间进行rehash。(serverCron函数)2.原创 2017-07-25 19:40:10 · 1146 阅读 · 0 评论 -
【Redis深入】字典rehash图解
引入在讲rehash之前,我们先回顾一下字典的结构1.字典dict.h/dict的源码/* * 字典 */typedef struct dict { // 类型特定函数 dictType *type; // 私有数据 void *privdata; // 哈希表 dictht ht[2]; // rehash 索引 // 当 rehash原创 2017-07-25 17:33:04 · 4044 阅读 · 2 评论 -
【Redis基础】发布与订阅
发布与订阅1.定义Redis的发布与订阅是由publish、subscribe、psubscribe等命令组成的2.频道的订阅与退订(1)订阅当一个客户端执行subscribe命令订阅某个频道,该客户端就与被订阅频道之间构成了一种订阅关系。所有频道的订阅关系保存在服务器状态的pubsub_channel字典里,该字典的键是某个被订阅的频道,值是一个链表,记录了所有订阅这个链表的客户端。 图解原创 2017-07-25 15:23:44 · 429 阅读 · 0 评论 -
【Redis深入】配置文件详解
Redis3.0的配置文件redis.conf文件如下#redis.conf# Redis configuration file example.# ./redis-server /path/to/redis.conf################################## INCLUDES ####################################这在你有标准配置模原创 2017-07-25 15:48:58 · 513 阅读 · 0 评论 -
【Redis基础】集群
1.定义Redis集群是Redis提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能。3.0版本之前的redis是不支持集群的,Redis3.0之后支持集群。一个Redis集群通常由多个节点组成,通过握手(cluster meet命令)添加节点2.槽指派Redis集群通过分片的方式保存数据库中的键值对,集群中的整个数据库被分为16384个槽(slot),每个节点可原创 2017-07-25 14:05:17 · 398 阅读 · 0 评论 -
【Redis基础】主从复制
1.定义通过执行slaveof命令或设置slaveof选项,让一个服务器去复制另一个服务器。允许多个slave server拥有和mater server相同的数据库副本2.旧版复制功能旧版(Redis2.8之前)复制功能包括两个操作:同步和命令传播(1)同步:将从服务器的数据库状态更新至主服务器的当前状态实例:(2)命令传播:当主服务器的状态被修改,让主从服务器的数据库重新回到一致状态。若主原创 2017-07-25 11:27:01 · 365 阅读 · 0 评论 -
【Redis基础】启动过程
1.初始化服务器状态结构初始server变量由redis.c/initServerConfig函数完成,源码如下void initServerConfig() { int j; // 服务器状态 // 设置服务器的运行 ID getRandomHexChars(server.runid,REDIS_RUN_ID_SIZE); // 设置默认配置文件路径 s原创 2017-07-25 11:39:37 · 960 阅读 · 0 评论 -
【Redis基础】服务器源码解析
1.定义Redis服务器负责与多个客户端建立网络连接,处理客户端发送的请求,在数据库中保存客户端执行命令所产生的数据,并通过资源管理来维持服务器自身的运转。2.命令请求从发送到完成的步骤(1)客户端将命令请求发送给服务器(2)服务器读取命令请求,并分析命令参数当连接套接字因客户端的写入变得可读时,服务器会调用命令请求器执行以下请求读取套接字的命令请求,保存到客户端的输入缓冲区中对输入缓冲区的命令原创 2017-07-25 09:46:46 · 602 阅读 · 0 评论 -
【Redis基础】客户端源码解析
1.定义Redis客户端与服务器之间通过TCP协议进行通信。TCP协议是一种流式协议,数据以字节流的形式进行传递,没有固有的”报文”或”报文边界”的概念,如果需要设置边界,需要应用层自行处理。2.源码客户端redis.h/redisClient源码如下:/* With multiplexing we need to take per-client state. * Clients are take原创 2017-07-25 08:31:57 · 1182 阅读 · 0 评论 -
【Redis基础】事务与事件
事务1.定义:一组命令的集合。一个事务中的命令要么都执行,要么都不执行。2.事务的实现事务开始命令入队事务执行例:Multi //通知redis进入事务sadd “user:1:following”2sadd “user:2:followers”1exec //结束事务3.错误处理(1) 语法错误(入队错误):命令不存在或者命令参数的个数不对(不会执行语法正确的指令)(2) 运行错原创 2017-07-25 07:36:21 · 1519 阅读 · 0 评论 -
【Redis深入】Redis分布式锁的实现
引入在实际的应用中,有很多情况需要加锁处理,最典型的情况就是秒杀了,一般的解决方案都是基于DB实现,但如果使用Redis,该如何实现呢。我们都知道Redis为单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对redis的连接并不存在竞争关系。而且Redis提供一些命令,如SETNX,GETSET,来实现分布式锁机制。Redis命令回顾在之前的博客中,我介绍了Redis的常用命令,现在原创 2017-08-02 11:33:35 · 942 阅读 · 0 评论 -
【Redis基础】常用命令
1.键(key)的常用命令 命令 功能 keys * 查询当前所有键 exists key 判断某个key是否存在 move key db 移动键到另一个数据库,当前库就没有了,被移除了 expire key 为给定的key设置过期时间(秒) persist key 取消键的过期时间 ttl key 查看还有多少秒过期,-1表示没有设置过期时间或原创 2017-07-24 19:52:03 · 539 阅读 · 0 评论 -
【Redis基础】五种数据类型
Redis的键值有5种数据类型,分别为字符串,散列表,列表,集合,有序集合,接下来我详细介绍引入1.redisObjectRedis中的每个对象都由一个redisObject结构表示Redis对象redis.h/redisObject源码如下:/* The actual Redis Object *//* * Redis 对象 */#define REDIS_LRU_BITS 24#原创 2017-07-24 18:35:51 · 549 阅读 · 0 评论 -
【Redis入门】内部数据结构源码剖析
SDS1.定义SDS(simple dynamic string)即简单动态字符串,在Redis中并没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组),而使用自己构造的SDS。2.源码(1)结构体sds.h/sdshdr的源码如下:/* * 保存字符串对象的结构 */struct sdshdr { // buf 中已占用空间的长度 int len; // buf原创 2017-07-24 13:46:13 · 779 阅读 · 0 评论 -
【Redis入门】Redis概述
Redis的定义Redis是Remote Dictionary Server(远程字典服务器)的缩写,它以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容,用C语言编写的。Redis是开源免费的,支持多语言的API(C/C++/C#/Java/Javascript/Lua/PHP/Python/Ruby/Go),具有原子性,可持久化的KV数据库Redis遵守BSD协议,是一个高性原创 2017-07-24 09:42:24 · 460 阅读 · 0 评论 -
【Redis基础】持久化机制
1.RDB(1) 定义RBD:snapshotting(快照)是默认方式,将内存中数据以快照的方式写入到二进制文件中,默认文件名为dump.rdb(2)触发rdbSave过程的方式save命令:阻塞Redis服务器进程,直到RDB文件创建完毕为止。bgsave命令:派生出一个子进程,然后由子进程负责创建RDB文件,父进程继续处理命令请求。master接收到slave发来的sync命令定时sa原创 2017-07-24 20:47:26 · 670 阅读 · 0 评论 -
【Redis深入】缓存雪崩与热点key的重建
缓存穿透1.定义缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去了缓存保护后端存储的意义。2.造成缓存穿透的原因业务自身代码或者数据出现问题一些恶意攻击、爬虫等造成大量空命中3.解决方法缓存空对象空值做缓存,即缓存层中存了更多的键,这就需要更多的内存空间 ,可以对其设置一个较短的过期时间,让其自动清除。优点是实原创 2017-07-29 14:39:28 · 5422 阅读 · 1 评论