redis
文章平均质量分 65
lucas1018
路漫漫其修远兮,吾将上下而求索
展开
-
redis之命令请求执行过程
一个命令请求从客户端发送到获得响应过程中,客户端和服务端要完成一系列操作。例如在客户端操作如下命令:redis> set key value1客户端向服务端发送命令请求 set key value; 服务器接收并处理该命令请求,在数据库中进行设置操作,并产生命令回复 1; 服务器将命令回复发送给客户端; 客户端接收服务器返回信息,并将信息打印给用户。一、发送命令请求 当用户在客户端键入命令后,客户端会先对命令转换协议格式,然后通过连接到服务器的套接...原创 2021-04-04 17:45:37 · 514 阅读 · 0 评论 -
redis之服务器初始化
redis 服务器负责与各个客户端建立网络连接,处理客户端的各个命令请求。今个就来看看 redis 服务器从启动到接收客户端命令请求这段时间做了哪些准备工作。先看下本地机器运行的 redis 服务堆栈信息:[root@localhost ~]# ps -ef | grep redisredis 9270 1 0 2019 ? 2-10:36:23 /usr/bin/redis-server 10.xx.xx.xx:6379root 3127...原创 2021-04-04 16:09:19 · 372 阅读 · 0 评论 -
redis队列批量获取
一般情况下,从 list 中获取数据可以是 lpop 或者 rpop,每执行一次,如果有数据就返回数据,如果没有就返回空。 在此基础上又有两个优化后的命令 blpop 和brpop,也是每次只取一条记录,但碰到 list 为空时,就陷入阻塞状态,直到有数据为止。 以上四个命令都是单条记录获取,事实上 redis 还提供了 lrange 和 ltrim 两个命令,可搭配使用使得批量获取 list 中数据。 lrange 返回 list 中...原创 2021-03-15 22:58:02 · 6833 阅读 · 0 评论 -
redis模式匹配批量删除key
生产环境下 keys 命令是禁止运行的,所以只能通过 scan 来进行模式匹配。如匹配 lcs*:localhost:6379> scan 0 match lcs* count 100001) "8741248"2) 1) "lcs_xx_dynamic" 2) "lcs_xx_sz000667" 3) "lcs_xx_stock_name_/../../../../winnt/win.ini\x00." 4) "lcs_xx_stock_name_file...原创 2021-03-10 23:20:14 · 610 阅读 · 1 评论 -
redis之事件驱动
redis服务器是一个事件驱动程序,服务器主要处理以下两类事件:文件事件:redis服务器通过套接字与客户端进行连接,通信时会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络通信操作。简言之文件事件就是服务器对套接字操作的抽象; 时间事件:redis服务器中的一些操作需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。 本文只借文件事件来研究redis中事件,时间事件以后再介绍。这里还是从initServer()方法中的部分代码看起:...原创 2020-07-05 00:22:17 · 529 阅读 · 0 评论 -
redis之unix域套接字应用
在redis源码的server.c文件中的initServer()方法中有这样一段代码:/* Open the listening Unix domain socket. */if (server.unixsocket != NULL) { unlink(server.unixsocket); /* don't care if this fails */ server.sofd = anetUnixServer(server.neterr,server.unixsoc...原创 2020-07-04 17:42:23 · 2204 阅读 · 0 评论 -
redis之启动服务监听
redis是用c语言实现的一个内存数据库,先从server.c文件中的main()方法看起:int main(int argc, char **argv) { ... initServerConfig(); ... initServer(); ...} main()方法干的事很多,这里只研究启动服务以及监听这块,主要就是上面两个方法。initServerConfig()方法主要就是给server结构体赋初始值,部分代码如下:...原创 2020-06-28 23:49:59 · 2166 阅读 · 0 评论 -
数据结构之跳跃表
跳跃表定义于redis.h文件中,定义如下://跳跃表节点typedef struct zskiplistNode { // 成员对象 robj *obj; // 分值 double score; // 后退指针 struct zskiplistNode *backward; // 层 struct zskiplist...原创 2019-07-21 23:10:16 · 202 阅读 · 0 评论 -
数据结构之字典
字典定义于dict.h和dict.c文件中,定义如下://哈希表节点typedef struct dictEntry { // 键 void *key; // 值 union { void *val; uint64_t u64; int64_t s64; } v; // 指向下个哈...原创 2019-07-21 21:34:05 · 1383 阅读 · 0 评论 -
数据结构之双端链表
双端链表定义于adlist.h和adlist.c文件中,定义如下://双端链表节点typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 struct listNode *next; // 节点的值 void *value;} listNode;//双端链...原创 2019-07-20 01:20:33 · 172 阅读 · 0 评论 -
数据结构之动态字符串
//类型别名,用于指向 sdshdr 的 buf 属性typedef char *sds;//保存字符串对象的结构struct sdshdr { // buf 中已占用空间的长度 int len; // buf 中剩余可用空间的长度 int free; // 数据空间 char buf[];}; 动态字符串...原创 2019-07-20 00:36:51 · 391 阅读 · 0 评论