展开

关键词

redis安装

redis-check-aof redis-check-dump redis-cli redis-serverredis-server:Redis服务器的daemon启动程序redis-cli:Redis :redis服务不支持chkconfig#为此,我们需要更改redis脚本。 配置密,尤为重要去掉行前的注释,并修改密为所需的密,保存文件#requirepass foobared requirepass mypasswd由于未设置密引起的问题:#安全起见,密必须设置, 默认情况下,Redis未启用认证,可以通过开启6379.conf的requirepass 指定一个验证密。 -9也是可以的kill -9 PID#指定密关闭dataappsredisbinredis-cli -a mypasswd shutdown备注:#关闭redis,关闭之前先保存.redis-cli

44250

redis之dict

大家都知道redis默认是16个db,但是这些db底层的设计结构是什么样的呢? 我们来简单的看一下,重要的字段都有所注释typedef struct redisDb { dict *dict; * The keyspace for this DB 字典数据结构,非常重要* dict 做的底层优化(编) unsigned lru:LRU_BITS;* LRU time (relative to global lru_clock) or * LFU data (least significant 做的底层优化(编) unsigned lru:LRU_BITS;* LRU time (relative to global lru_clock) or * LFU data (least significant encoding存储的优化策略1:整型编的处理 我们先来看一个例子127.0.0.1:6379> set type-int 12345OK127.0.0.1:6379> object encoding

20480
  • 广告
    关闭

    90+款云产品免费体验

    提供包括云服务器,云数据库在内的90+款云计算产品。打造一站式的云产品试用服务,助力开发者和企业零门槛上云。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    redis之SDS

    1:SDS介绍我们在redis中执行命令set key name的时候,key和name都是字符串类型,而且字符串(string)在redis中是会经常用到的类型,那redis是如何保存字符串的呢? 我们接下来往下看 众所周知,redis是c写的,在c中使用char来保存字符串,并且用0作为字符串的结尾,但是redis不是这样保存的,redis是使用一种叫SDS的结构来保存字符串的。 其余的sdshdr16以上的都是以此类推,判断方式如下static inline char sdsReqType(size_t string_size) { if (string_size < 1

    16840

    Redis阅读

    随机下标访问可以基于下标直接算内存地址访问 adlist环形双端链表,没啥好说的dict这里比较特别的是一个字典里会有最多两个hash表同时存在,目的是rehash的时候可以做渐进式hashtable的结构是个数组,每个元素是一条链表,redis 当 rehash 不在进行时,值为 -1 int rehashidx; * rehashing not in progress if rehashidx == -1 *} dict; scan算法redis idx与(idx + size2) % size比如size是8,缩容后就是4,所以对size为8的遍历就是0->41->52->63->7 基于idx与idx + size2这个公式得到的bucket里把这用一个数学公式体现

    7920

    Redis解析——Zipmap

    本文介绍的是Redis中Zipmap的原理和实现。 Redis中并没有使用结构体来表达该结构。因为这个结构在内存中是连续的,而除了HEAD和红色背景的尾标记END(恒定是0xFF)是固定的8位,其他部分都是不定长的。        创建Zipmap        Redis提供了下面方法创建一个空的Zipmap结构。 长度信息编        Zipmap中元素的Key长度信息和Value长度信息都是需要根据值的大小而动态改变。如果值小于0xFE,则只有8位表示长度,且内容就是长度值。 1 : sizeof(unsigned int)+1)长度信息解        长度信息解是对编做的逆向操作。它判断传入的长度信息起始地址的内容是否小于0xFE。

    43620

    Redis精炼版

    前言本文通过学习黄建宏老师的《Redis的设计与实现》以及其对应的redis-3.0-annotated,精炼、简化其中的内容,以供快速学习。全篇两万字。1. 数据结构? redis的五大数据结构是对客户端的操作而言的,实际上在其内部对这五大数据结构有着更细的划分,根据数据形式、长度等的不同,选择不同的内部编。这么做的目的在于节约内存,提高速度。 1.7 对象(redisObject)redis并没有直接使用sds、list等上述的数据结构,而是将这些数据结构作为编手段。基于上述手段,形成五大数据类型的对象系统。 redis根据本字段动态选择对应的实现函数进行调用(多态) ? 可以使用OBJECT ENCODING key查看value的编 refcount:引用计数,用于内存释放以及对象共享。 然后另外执行关闭操作,保证后续的数据保存和资释放。

    7330

    redis学习】redisObject

    使用的是redis6.0.6版本,因为我第一次接触 redis 时它就是这个最新稳定版。 文章目录robj数据类型编类型随机应变的对象编回到robjrobjredis中的数据对象 server.hredisObject 是redis内部存储的数据定义的抽象类型。 数据类型* A redis object, that is a type able to hold a string list set * * The actual Redis Object *#define 消息流*编类型* Objects encoding. ,编不是一成不变的。

    6930

    Redis笔记-初步

    前言 Redis优美,注释也很到位,阅读起来会赏心悦目,大大降低了理解门槛。由于redis单线程几乎完成所有工作,整体逻辑是相当复杂的,涉及了太多状态,作者的技术深厚可见一斑。 Redis的单线程设计给出了一种优雅实现高性能服务思路,在实践中值得借鉴。需要注意Redis并不是严格的单线程,实际上它是多进程+多线程。 SELECT命令 群里有人问select跟普通命令的效率,猜想select没有效率问题,阅读也证实了这一点。因为它只是改变指针指向,所以不存在效率问题,自然比普通命令效率要高。 对应的文件,分别为: evport ae_evport.c Solaris epoll ae_epoll.c Linux系统 kqueue ae_kqueue.c BSD类系统 select ae_select.c = authCommand) { 检查是否有设置密,和密是否已经验证通过addReply(c,shared.noautherr);return C_OK;} 检查是否需要重定向* If cluster

    1.2K20

    Redis解析——前言

    今天开启Redis的阅读之旅。对于一些没有接触过开分析的同学来说,可能这是一件很麻烦的事。 比如Redis,它不就是一个可以通过网络访问的KV型数据库嘛。在没有的情况下,可以想象出它应该是通过网络服务、指令解析、特殊的内存结构设计(方便增删改查)、持久化等技术构成。 于是我们也进入最最重要的redis目录——src去一看究竟。         进入Src后,我们仍然关注Makffile文件。 Dynamic Strings(SDS)解析和使用说明二》。 而和Redis强关联的模块,我将以《Redis解析——XXXXX》形式命名。

    41720

    Redis阅读之rdb.c

    位保存的是长度,长度最大就是2^14-1如果开头两位是10,那么后面6位空着,接下来的32位表示长度,最大值2^32-1 image.png 2、如何保存整数如果开头两位是11时候,表明后面就是特殊的编对象 如果可以就返回整数编长度;如果编长度大于20,就是用压缩字符串编;其他情况的话,就是直接将长度和字符串对象写入RDB文件中。 4、返回不同的保存对象类型或是编类型 image.png 5、保存不同类型的对象 image.png 底层编是双端链表,那就只能比那里链表所有节点,然后保存每一个节点     list_length | elem2 | elem3 image.png 底层编是整数集合,那么直接写入RDB文件 image.png 3、对象类型是有序集合 底层编是压缩列表,那么直接写入RDB文件(同上) 底层编是跳跃表 ,那么就是遍历跳跃表最底层的链表,然后保存每一个节点值和分值 image.png 4、对象类型是哈希表 底层编是压缩列表,那么直接写入RDB文件(同上) 底层编是字典,保存每一个键值对 image.png

    34240

    Redis阅读之aof.c

    rnrnrioWriteBulkString:string类型值格式:$rnrnrioWriteBulkDouble:double类型值格式:$rnrn重写列表对象rewriteListObject:根据不同的底层编类型 ,将列表中的元素挨个写入AOF,使用命令RPUSH格式重写集合对象rewriteSetObject:根据不同的底层编类型,将集合中的元素挨个写入AOF,使用命令SADD格式重写有序集合对象rewriteSortedSetObject :根据不同的底层编类型,将集合中的元素挨个写入AOF,使用命令ZADD格式重写哈希对象rewriteHashObject:根据不同的底层编类型,选择将KEY还是VALUE写入AOF中,使用HMSET

    30310

    Redis阅读之ae.c

    在处理时间事件的时候,首先检查时钟漂移(对已经过期的时钟进行清零,后面会立即执行)

    13420

    Redis | 阅读 —— 链表

    链表相关数据结构 在 Redis中,链表的数据结构和相关的操作都包含在 adlist.h 和 adlist.c 两个文件当中,这两个文件是 Redis 中对底层链表的所有实现。 无环链表 Redis 的链表是无环的双向链表,这点可以通过 Redis 插入头节点和插入尾节点的函数看出,两个函数代如下:** * 将值插入到链表的头部 *list *listAddNodeHead( 看代,如下:listIter *listGetIterator(list *list, int direction){ listIter *iter; if ((iter = zmalloc(sizeof 最后 上面就是关于 Redis 中链表实现的代了。Redis 的链表会用在包括但不限于 list(列表)的场景,比如发布订阅、慢查询等也会使用列表的数据结构。 喝水不忘打井人,没有黄老师的书籍做我 Redis 学习的指路明灯,恐怕对于学习 Redis我会艰难万分。再次感谢黄老师写的关于 Redis 的书籍,能够让好的技术遍地开花。

    16920

    redis之set结构

    set-1hashtable127.0.0.1:6379> object encoding set-2intset我们发现set-1是hashtable类型,而set-2是intset类型的 其实对于redis 的set类型来说,set是无序的,自动去重的集合数据类型,set数据结构底层实现为一个value为null的字典(dict),当数据可以用整型表示时,set集合将被编为intset数据结构。 1:元素个数大于set-max-iniset-entries(默认为512) 2:元素无法用整型表示 set-max-iniset-entries 其实intset类型的也比较简单typedef struct intset { uint32_t encoding; 编类型 uint32_t length; 元素个数 int8_t contents[]; 元素存储} intset; #define INTSET_ENC_INT16 整型集合是一个有序的,存储整型数据的结构,整型集合在redis中可以保存int16_t,int32_t,int64_t类型的整型数据,并且可以保证集合中不会出现重复数据。

    27040

    Redis剖析之RDB

    rdb相关redis中,触发rdb保存主要有以下几种方式。 具体代如下:* rdb磁盘写入操作 *int rdbSave(char *filename, rdbSaveInfo *rsi) { char tmpfile; char cwd; * Current 略去其他代 * * 如果上次触发bgsave时已经有进程在执行了,就会标记rdb_bgsave_scheduled=1,然后放到serverCron * 中执行 * if (! :rdb.fnordig.defile_format.htmlRedis PersistenceLinux fork隐藏的开销-过时的fork(正传) 本文是Redis剖析系列博文,同时也有与之对应的 Redis中文注解版仓库:https:github.comxindooRedis Redis剖析专栏:https:zxs.ios1h 如果觉得本文对你有用,欢迎一键三连。

    20040

    Redis剖析开篇

    剖析》系列博文,今天也是这个系列博文的开篇。 我的目标定位,这个项目是资深程序猿阅读和理解redis最优质的中文材料。 我这个项目预期做到 +中文注释+系列博文 三位一体,全方位帮大家深入理解redis的原理。 另外github上我库不是redis的copy,而是直接fork出来的,所以会定期和redis当前保持一致,时更时新。 基础 初识Redis redis的日常使用 搭建redis环境(单步调试) 了解redis的启动过程 各种数据结构 SDS(simple dynamic string) list set

    15620

    Redis学习之链表

    链表在Redis中的应用场景1.列表键的底层实现之一2.RedisServer中保存的客户端状态信息3.发布与订阅4.慢查询5.监视器链表节点数据结构 Redis实现的是双端无环链表,pre指针指向其前置节点 current.GetValue() == key { node = current break } } } 释放迭代器 ListReleaseIterator(iter) return node} 7.链表给定索引节点的值PS:中并没有用到迭代器

    35700

    Redis学习之字典

    字典在Redis中的应用场景字典在Redis中可以说无处不在,核心主要是以下两个1.Redis数据库2.Redis哈希对象的底层实现之一字典数据结构1.字典结构体字典type dict struct { 在Redis中使用的是MurmurHash2算法。 然后会判断添加的键值对的key是否在字典中存在,如果存在则返回错误;如果不存在就通过哈希算法和桶掩计算出这个键值对所属的桶,并将其添加到这个桶存放的键值对链表的表头。 的哈希值,然后再字典中通过key比对函数进行查找,这里需要特别指出的是,只有在字典在0号表中没有找到并且字典正在Rehash中的时候,才会去1号表找这个键值对,这也体现出了0号表永远作为标准表的地位和Redis

    95711

    Redis学习之跳表

    中的使用 有序集合对象(SortedSet)底层实现之一 集群节点内部数据结构 跳表在Redis中的实现 数据结构 跳表节点,包含了节点中存储的数据obj和对应的分值score,以及每个节点的层数结构, 最终,Redis中的一个长度为2,层高为2的跳表如下图所示 插入节点 当进行插入操作的时候,程序会维护两个数组,rank数组保存每层中插入节点前驱前驱节点的排行值,update数组保存每层插入节点的前驱节点 ,代实现如下: 获取指定节点在跳表中的排行值 有了插入代中排行值的讲解,相信你自己也可以实现这部分代了,只需要在遍历的同时将跨度进行累加即可,代实现如下: 综述 上文中笔者只列出了自认为比较核心的方法 ,通过这几个方法也基本可以了解Redis中跳表的实现思想,总的来说与常规实现方法差别不大,只是对于排行值的需求定义并维护了每个节点的跨度。 另外,值得一提的是,Redis中跳表的最高层数为32,层数越高出现的概率越低。在后面对于有序集合对象的介绍中,还会再次涉及到跳表。 1537163937_17_w344_h344.png

    10.4K66

    Redis从哪里读起?

    自从我写过Redis内部数据结构详解的一系列文章之后,有不少读者前来阅读和讨论。其中也有人问起阅读Redis的方法。本文我们就集中讨论这样一个话题:如果你现在想阅读Redis,那么从哪里入手? 这样我们就可以先从外部观察,尝试执行一些命令,在了解了这些命令执行的外部表现之后,再钻进去看对应的是如何实现的。要想读懂这些代,首先我们需要理解Redis的事件机制。 注:本文的分析基于Redis的5.0分支。初始化流程和事件循环概述Redis的main函数在文件server.c中。 在Redis中,Redis服务器是用一个叫做redisServer的struct来表达的,里面定义了Redis服务器赖以运行的各种参数,比如监听的端口号和文件描述符、当前连接的各个client端、Redis 再次提醒:下面的调用关系图基于Redis的5.0分支,未来很可能随着Redis库的迭代而有所变化。这个树型结构的含义,首先介绍一下:树型每次向右的分支,表示函数调用深入了一层(调用栈压栈)。

    6.5K102

    相关产品

    • 云数据库 Redis

      云数据库 Redis

      云数据库 Redis,数据库缓存,数据库存储,云数据库 云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。 云数据库Redis是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券