![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
h_lizeming
这个作者很懒,什么都没留下…
展开
-
分布式锁
一、为什么要使用分布式锁我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug!注意这是单机应用,也就是所有的请求都会分配到当前服务器的JVM内部,然后映射为操作系统的线程进行处理!而这个共享变量只是在这个JVM内部的一块内存空间!后来业务发展,需要做集群,一个应用需要部署到几...原创 2019-03-22 14:53:15 · 180 阅读 · 0 评论 -
redis之redis客户端
redis服务器是典型的一对多服务器程序一个服务器处理多个客户端使用I/O多路复用技术实现的文件事件处理器,redis服务器采用单线程单进程处理命令请求,并与多个客户端进行网络通信。1.redisserver有list* clients保存客户端状态套接字描述 fd=-1或者大于-1 ...原创 2019-05-07 21:56:44 · 455 阅读 · 0 评论 -
redis之RDB持久化以及AOF持久化
redis是属于内存数据库,所有数据保存在内存中服务器进程推出后则数据库状态清除数据库状态:非空数据库和键值对手动执行RDB保存 根据服务器配置选项定期执行RDB保存 生成一个经过压缩生成的二进制文件,将某一时刻数据库状态保存在RDB文件中,存储在磁盘上 加载 生成RDB有两个命令可以生成RDB文件,一个是SAVE,另外一个是BGSAVE区...原创 2019-05-06 18:06:40 · 174 阅读 · 0 评论 -
redis之单机数据库的实现
redis只要是由服务器和客户端组成的。每一个服务器端都会有一个redisServer结构struct redisServer{redisDb *db;//一个数组,保存服务器所有的数据库int sum;//数据库个数,默认是16个}每一个客户端都会有一个redisclient结构体redisclient{redisDb *db;//记录当前数据库,通过server...原创 2019-05-06 16:01:01 · 224 阅读 · 0 评论 -
Redis之集群
节点,槽指派,命令执行,重新分片,转向,故障转移,消息节点一个redis集群中通常有多个节点组成,刚刚开始的时候每一个节点都是相互独立的,它们都是处于一个只包含自己的集合之中,然后各个节点之间需要通讯,所以用cluster meet <ip> <port> 进行握手,握手成功后,node节点集群中的所有节点都会创建相对应的节点。启动服务器时候通过c...原创 2019-05-08 22:10:48 · 157 阅读 · 0 评论 -
对象
Q:使用对象的好处redis可以在执行命令之前,根据对象的类型来判断一个对象是否可以执行给定的命令。 可以针对不同的使用场景,为对象实现多种数据结构。从而优化对象在不同场景下的使用效率。redis使用引用技术,来判断判断该对象是否需要回收。 然后就是通过实现对象共享。对象的种类 字符床对象 列表对象 哈希对象 集合对象 有...原创 2019-05-06 13:30:41 · 234 阅读 · 0 评论 -
redis之整数集合 压缩列表的实现
整数集合整数集合是redis用于保存整数值的集合抽象数据结构,并且保证集合中不会出现重复的整数typedf struct intset{uint32_t encoding;//编码方式uint32_t length;//集合包含的元素个数int8_t contents[];//保存元素的数组}intset;contents数组是整数集合的底层实现,整数集合的每一...原创 2019-05-06 12:16:09 · 339 阅读 · 0 评论 -
Redis之哨兵
主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。一、哨兵模式概述哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实...转载 2019-05-08 09:55:05 · 199 阅读 · 0 评论 -
Redis之复制(主从一致)
通过命令slaveof命令加ip 设定注定复制的主服务器旧版复制只要是由两个部分组成的同步:让从服务器的数据库状态更新至主服务器数据库状态 命令传播:将对主服务器的写改操作,传送给从服务器,使得主从服务器状态重写一致同步:从服务器向主服务器发送SYNC命令 主服务器创建子进程进行RDB文件创建与写入,与此同时将该时刻接收的写改操作压入到缓冲区中,RDB文件完成后。发送RDB文...原创 2019-05-08 09:44:39 · 306 阅读 · 0 评论 -
redis之链表与字典
每一个链表节点使用一个adlist.h/listNode结构表示:typedef struct listNode{//前置节点structlistNode *prev;//后置节点structlistNode *next;//节点值void *value;};链表typedef struct list{//表头节点listNode *head;...原创 2019-05-04 17:11:53 · 227 阅读 · 0 评论 -
简单动态字符串
主要的数据结构是:SDS(动态字符串) 双端链表 字典 压缩字典 整数集合 跳跃表set msg “hello world”键值对的键是一个字符串对象,对象底层的实现是一个保存着字符串“msg”的SDS键值对的值是一个字符串对象,底层实现也是SDS所以说SDS(动态字符串)是其他对象实现的基础。每个sds.h/sdshdr结构都表示一个SDS值struct sd...原创 2019-05-04 10:44:34 · 472 阅读 · 0 评论 -
redis数据结构与对象
简单动态字符串链表字典跳跃表整数集合压缩列表对象原创 2019-05-04 10:05:58 · 164 阅读 · 0 评论 -
位图
如果对补码不是很熟悉,建议先复习下:原码,反码,补码,有符号数和无符号数一般知道前面介绍的五种redis数据结构,就可以开心的玩耍了,但如果知道Bitmaps,Hyperloglogs,GEO,就更开心了。这次我们来看下Bitmaps。简介假设一个场景:记录用户的签到天数。方法一:将用户的id和日期关联起来,做个key,比如用户007在2018/08/14这天的签到情况,设置个k...原创 2019-03-22 16:02:30 · 212 阅读 · 0 评论 -
Redis之服务器
命令请求过程1.发送命令请求(在客户端中将命令转换为协议格式),然后通过链接到服务器的套接字,将协议格式的命令发送给服务器2.读取命令请求读取套接字中的协议格式的命令,然后放在客户端状态的输入缓冲区中。 对输入缓冲区中命令请求进行解析,然后更新命令参数以及命令个数。 调用命令执行器,执行指定命令的解析3.命令执行器执行:首先根据argv[0]参数,在命令表格中查找指定的命令,然后...原创 2019-05-08 08:53:44 · 171 阅读 · 0 评论