首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Golang开发

    Redis(9)——HyperLogLog

    unique:ids OK 127.0.0.1:6379> pfcount 2019-04:unique:ids (integer) 7 HyperLogLog 内存占用量非常小,但是存在一定误差率,redis

    50430发布于 2019-05-29
  • 来自专栏技术杂记

    Redis 复制9

    停止同步后又可以写入了127.0.0.1:6379> config get slaveof1) "slaveof"2) ""127.0.0.1:6379> set abc iiiOK127.0.0.1:6379> get abc "iii"127.0.0.1:6379> 但是这个特性可以被在线修改在线关闭Slave只读127.0.0.1:6379> SLAVEOF m1 6379OK127.0.0.1:6379> set iii abc (error) READONLY You can't write a

    37710编辑于 2022-07-09
  • 来自专栏C++小白

    Redis使用及源码剖析-9.Redis键操作函数-2021-1-26

    本节就简单介绍一下五种Redis键对应的一些操作API。 一、Redis客户端结构体简介 Redis为每一个客户端定义了redisClient 对象,包括客户端套接字,客户端输入的命令参数数目,和参数数组等。 * * 参数 where 决定了新元素添加的位置: * * - REDIS_HEAD 将新元素添加到表头 * * - REDIS_TAIL 将新元素添加到表尾 * * There is REDIS_HEAD) ? = REDIS_OK) || (getLongFromObjectOrReply(c, c->argv[3], &end, NULL) !

    2K40编辑于 2022-02-22
  • 来自专栏浪浪山下那个村

    Redis源码Redis 6 ACL源码详解

    简介 本文主要是讲解Redis 6的ACL的实现原理。基本使用详见:Redis 6.0新特性——ACLs,以及Redis启动过程分析。 启动初始化 初始化默认用户 ACL子模块在Redis启动过程中初始化,下面代码主要是初始化ACL的结构: /* * 初始化ACL子系统 * */ void ACLInit(void) { Redis ACL配置信息主要有两种方式: 在redis.conf文件中通过user 配置项配置的ACL信息。 比如:user worker +@list +@connection ~jobs:* on >ffa9203c493aa99 在redis.conf中配置aclfile所配置的文件中。 格式如下图所示: 通过user方式 通过加载redis.conf配置文件中读取user配置项加载ACL信息。

    80730编辑于 2022-08-26
  • 来自专栏浪浪山下那个村

    Redis源码Redis事件监听

    简介 Redis服务器是典型的事件驱动程序,而事件又分为文件事件(socket的可读可写事件)与时间事件(定时任务)两大类。 有多个定时任务,因此理论上应该有多个时间事件,多个时间事件形成链表, timeEventHead即为时间事件链表头节点;Redis服务器需要阻塞等待文件事件的发生,进程阻塞之前会调用beforesleep Redis底层可以使用4种I/O多路复用模型(kqueue、epoll等), apidata是对这4种模型的进一步封装。 文件监听事件 Redis客户端通过TCP socket与服务端交互,文件事件指的就是socket的可读可写事件。socket读写操作有阻塞与非阻塞之分。 Redis创建时间事件节点的函数为aeCreateTimeEvent,内部实现非常简单,只是创建时间事件并添加到时间事件链表。

    82130编辑于 2022-08-26
  • 来自专栏Java架构师必看

    spring源码分析9

    spring源码分析9 强烈推介IDEA2020.2破解激活,IntelliJ

    42720发布于 2021-04-13
  • 来自专栏陈琛的Redis文章

    Redis系列——9.链表

    01 前言 大年初三,在家无所事事,脑袋格外清醒,就来磕会源码,晕了就可以睡觉啦。 哈哈哈,催眠一绝。 今天看的是数据结构为list类型的底层实现,怕偶以后忘记了,特地重新撸一遍。 next;//后继节点,如果是list尾部结点,则next指向NULL void *value; //万能指针,能够存放任何信息 } listNode; 只要有多个节点就可以组成一个链表了,但是redis

    36510发布于 2020-06-12
  • 来自专栏weixuqin 的专栏

    redis 学习(9)-- redis 客户端 -- redis-py

    redis 客户端 -- redis-py 简介 关于 redis 的各种客户端,我们可以在官网上寻找并使用,比如我这里的 python 客户端,可以在官网上找到:redis-client 。 获取 redis-py 在 GitHub 上查看 :redis-py 。 通过 pip 安装: pip install redis 通过源码安装: python setup.py install 简单使用 import redis client = redis.StrictRedis (host='127.0.0.1', port=6381) key = "hello" setResult = client.set(key, "python-redis") print(setResult ) value = client.get(key).decode('utf8') print("key:" + key + ", value:" + value) 这里注意编码问题,python获取的redis

    1K30发布于 2019-06-02
  • 来自专栏写代码和思考

    Redis 学习笔记9 - 使用 redigo 访问 redis

    1.redigo 介绍 redigo 是一个连接 Redis 数据库的客户端框架 Github地址:https://github.com/gomodule/redigo 它是被 redis 官方网站推荐的框架 基本操作实例 2.1 导入包 Import: import "github.com/gomodule/redigo/redis" 2.2 连接 Conn接口是使用Redis的主要接口。 、redis.Bytes、redis.String、redis.Strings和redis.Values函数 帮助把应答内容转换为特定类型的值。 ``` func newPool(addr string, password string) *redis.Pool { return &redis.Pool{ MaxIdle Dial: func() (redis.Conn, error) { return redis.Dial("tcp", addr, redis.DialPassword(password)) },

    1.5K20发布于 2020-04-02
  • 来自专栏项目文章

    Redis学习9:Jedis学习

    Jedis学习 编程语言中的数据如任何和redis联动,如果是java语言,那么就可以使用Jedis工具,同时springdata redis也可以使用,lettuce也可以使用。 java语言操作数据库的四个步骤: 1、明确哪个数据库 加载驱动 2、创建与数据库之间的连接 3、执行操作 4、关闭连接 使用Java调用Redis 首先需要引入依赖如下: Jedis常规操作的演示 使用 JAVA实现一个简单的Redis业务 先写最简单的多线程调用: 写业务代码 打印了十次业务操作执行后开始进行了报错。 Jedis连接池 实际工作中,肯定是通过连接池进行获取redis对象的,不是上面手工进行获取的。 引入:什么是连接池 数据库连接的建立、关闭资源消耗巨大。 但是30,10这样的数据需要设置成配置文件 redis.properties。 这样就不用每次都更改程序代码了。 写好配置文件后,直接在java中加载配置文件即可!

    17910编辑于 2024-06-07
  • 来自专栏PHPer 进击

    跟着大彬读源码 - Redis 9 - 对象编码之 三种list

    此外,在普通链表中执行随机查找操作时,它的时间复杂度为 O(n),这对于注重效率的 Redis 而言也是不可接受的。这是普通链表的查找效率太低问题。 1.2 列表节点的结构 节点的结构源码如下(ziplist.c): typedef struct zlentry { unsigned int prevrawlensize, prevrawlen 认识了跳跃表是什么,以及做什么的,接下来,我们再来看下在 redis 中,是怎么实现跳跃表的。 在 server.h 中可以找到跳跃表的源码,如下: typedef struct zskiplist { struct zskiplistNode *header, *tail; unsigned 相关源码结构可在 quicklist.h 中查找,如下: /* quicklistNode is a 32 byte struct describing a ziplist for a quicklist

    68020发布于 2019-08-07
  • 来自专栏歪歪梯Club

    Redis源码阅读

    zipmap redis旧版小hash使用的数据结构,紧密数组存储结构 用1字节存储总节点数(如果1字节满了,代表需要遍历到底才知道有多少节点) 每个节点存储自己占用的内存空间,修改删除后,标记为闲置空间 adlist 环形双端链表,没啥好说的 dict 这里比较特别的是一个字典里会有最多两个hash表同时存在,目的是rehash的时候可以做渐进式hash table的结构是个数组,每个元素是一条链表,redis rehash 不在进行时,值为 -1 int rehashidx; /* rehashing not in progress if rehashidx == -1 */ } dict; scan算法 redis size/2) % size 比如size是8,缩容后就是4,所以对size为8的遍历就是 0->4 1->5 2->6 3->7 基于idx与idx + size/2这个公式得到的bucket 源码里把这用一个数学公式体现

    56920发布于 2021-10-11
  • 来自专栏编程从踩坑到跳坑

    源码-调试Redis

    # 源码-调试Redis 在阅读源码的时候,通过debug调试的方式逐行去理解代码的意思,不免是一个好的方式。 第一步: 在src目录下新建一个文件learn.h,在这里面定义入口 #ifndef REDIS_LEARN_H #define REDIS_LEARN_H int learn(); #endif = NULL) redis_check_rdb_main(argc,argv,NULL); else if (strstr(argv[0],"redis-check-aof") /* Check if we need to start in redis-check-rdb/aof mode. = NULL) redis_check_rdb_main(argc,argv,NULL); else if (strstr(argv[0],"redis-check-aof")

    42020编辑于 2023-10-21
  • 来自专栏用户6296428的专栏

    Redis源码解析

    redis的底层实现是十分简单的,核心源码也仅有几万行。本文就带大家来领略,小小的redis是如何实现这些复杂功能的。 *注:本文介绍的源码redis 5.0.14版本 * 二、字符串 C语言存储字符串的问题: 二进制安全 C语言中表示字符串结尾的符号是'\0',如果字符串本身就具有'\0'字符,就会被截断,即非二进制安全 即多浪费了30%的空间,redis的跳表使用了较低的空间成本,实现了时间复杂度的大减少 3.3.3 插入节点 插入节点总的来说一共四步 查找插入位置 调整高度 插入节点 调整backward 源码如下 源码注解的例子。 工作中我们也常常使用redis进行各种逻辑的处理,而了解其源码可以避免踩很多坑。

    2K20编辑于 2022-04-06
  • 来自专栏技术博文

    redis源码安装

    bin的目录,里面包括了以下文件: redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server redis-server :Redis服务器的daemon启动程序 redis-cli:Redis命令行操作工具。 /redis/bin/redis-cli #将redis配置文件拷贝到/etc/redis/${REDISPORT}.conf mkdir /etc/redis cp /data/tgz/redis /redis-cli -a mypasswd save #或者使用bgsave命令 #关闭 redis-cli shutdown #因为Redis可以妥善处理SIGTERM信号,所以直接kill -9也是可以的 kill -9 PID #指定密码关闭 /data/apps/redis/bin/redis-cli -a mypasswd shutdown 备注: #关闭redis,关闭之前先保存 .

    1.1K60发布于 2018-04-16
  • 来自专栏全栈程序员必看

    redis源码 -ziplist

    entry的数量 ZIPLIST_LENGTH(zl) = 0; // 结束字节 zl[bytes-1] = ZIP_END; return zl; } resize的源码

    39420编辑于 2022-07-25
  • 来自专栏浪浪山下那个村

    Redis源码Redis命令执行过程

    简介 需要了解Redis命令执行过程,请先了解Redis启动过程和Redis事件监听。 Redis启动过程分析 Redis事件监听 在Redis事件监听中我们了解到在创建文件监听事件的时候 acceptTcpHandler就是的执行函数。 创建Redis连接。 listLength(server.ready_keys)) handleClientsBlockedOnKeys(); } return C_OK; } 命令表详见:《Redis

    57120编辑于 2022-08-26
  • 来自专栏浪浪山下那个村

    Redis源码Redis Set命令详解

    我们知道,Redis在解析命令行参数时,会将各个参数解析成robj类型,当expire值不为NULL则表示需要设置key的超时时间。 MAXMEMORY_FLAG_NO_SHARED_INTEGERS \ (MAXMEMORY_FLAG_LRU|MAXMEMORY_FLAG_LFU) #define OBJ_SHARED_INTEGERS 10000 第一种情况: 如果Redis Redis key的超时时间实际存储的是当前key的到期毫秒时间戳,所以在指定超时时间单位为秒时,需要将时间值乘以1000来转化为毫秒数,将当前时间加上超时毫秒数的结果就是key的超时毫秒时间戳。 Redis将所有含有超时时间的key存储到redisDb的expire字典内,ttl命令可以快速确定key的超时秒数,就是通过查找这个字典实现的。 通过以上4个步骤已经成功地将一个key-value设置到Redis的数据库中。

    1.9K20编辑于 2022-08-26
  • 来自专栏golang算法架构leetcode技术php

    golang源码分析(9)调度

    现在已经有太多的文章来介绍goroutine的用法,在这里,我们从源码的角度来看看其内部实现。

    54720编辑于 2022-08-02
  • 来自专栏kk大数据

    Spark 源码9)- Worker 启动 Executor 源码阅读

    上一次阅读到 Master 调用 schedule() 方法,遍历 waitingApps,为每个程序决定启动多少 Executor,为每个 Executor 分配多少资源,有了这些信息之后,给 Worker 发送了一个 LaunchExecutor 消息,Worker 开始处理。

    81720发布于 2021-11-16
领券