杂记

不乱


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

Redis 源码分析-字符串

发表于 2018-04-27 | 分类于 redis , source | 阅读次数:

动态长度字符串
本质就是typedef char *sds;
但是redis在sds的前面又增加了一个数据结构(不同长度数据结构不一样)
和c++的string不一样,这里的长度,容量和内存申请都是完全独立的
需要非常小心的手动维护
否则会出现数值和实际申请的内存不一致的情况

相关文件

  • sds.h
  • sds.c
阅读全文 »

C语言-内存管理-结构体

发表于 2018-04-26 | 分类于 c | 阅读次数:

首先,结构在C语言中也是一种数据类型,叫做聚组类型(还包括数组)。他和其他的数据类型是一样的,在定义一个结构体的时候,系统并不会为他真正的分配内存空间(定义的结构体变量要在编译的阶段才分配空间,而结构体指针要显示的使用malloca来分配空间),也就是说,在定义结构体这种数据类型的时候是不会分配内存空间的,只有在定义变量的时候,才会分配。

下面是摘自百度百科 对结构题存储的三点:

  1. 结构体变量的首地址能够被其最宽基本类型成员的大小所整除
  2. 结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会 在成员之间加上填充字节
  3. 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节
    阅读全文 »

Redis 源码分析-内存管理

发表于 2018-04-25 | 分类于 redis , source | 阅读次数:

在所有申请的指定长度的内存前加了一个sizeof(size_t)的长度
用于记录实际申请的内存长度,
方便统计内存使用占用和内存使用状态分析

相关文件

  • zmalloc.h
  • zmalloc.c
阅读全文 »

1. Redis 客户端-客户端通信协议

发表于 2018-04-24 | 分类于 redis , development & operation | 阅读次数:
  • 使用TCP协议
  • 定制了RESP(Redis Serialization Protocol)序列化协议

协议格式

请求格式(换行符使用\r\n):

1
2
3
4
5
6
7
*3
$3
SET
$5
hello
$5
world

返回格式:

1
+OK
阅读全文 »

12. Redis 扩展功能-总结

发表于 2018-04-24 | 分类于 redis , development & operation | 阅读次数:

外围扩展功能

  • slowlog 慢查询
  • redis-cli 客户端
  • redis-benchmark 标准测试工具
  • pipeline 批处理命令
  • lua 批处理命令
  • bitmaps 位操作
  • hyperloglog 高压缩set,有小量误差
  • pubsub 发布订阅
  • GEO 地理位置处理

11. Redis 扩展功能-地理定位(GEO)

发表于 2018-04-24 | 分类于 redis , development & operation | 阅读次数:

为了计算地理位置提供的接口集
GEO数据结构本质是zset

阅读全文 »

10. Redis 扩展功能-发布订阅

发表于 2018-04-24 | 分类于 redis , development & operation | 阅读次数:
  • 发布者,订阅者都是客户端
  • 频道信息记录在Redis服务器中
阅读全文 »

9. Redis 扩展功能-HyperLogLog

发表于 2018-04-24 | 分类于 redis , development & operation | 阅读次数:

HyperLogLog是一种数据结构(本质为字符串)
基于一种基数算法
它可以用极小的内存空间完成数据统计
它本身属性有点像set一样
因为它的存储数据不是一一对应的关系,
实际是有错误的,
官方给出的错误率是0.81%

优点:相比set,可以极大的减少内存的使用

阅读全文 »

8. Redis 扩展功能-位操作

发表于 2018-04-24 | 分类于 redis , development & operation | 阅读次数:

位操作(Bitmaps)本质就是字符串
在Redis中提供了一系列位操作命令

命令

阅读全文 »

7. Redis 扩展功能-Lua

发表于 2018-04-24 | 分类于 redis , development & operation | 阅读次数:

在Redis中使用Lua

  • 外部
    1. redis-cli --eval $脚本文件名
      redis-cli -p 6666 --eval a.lua
  • 内部
    1. eval $脚本内容 $参数个数 $参数列表...
      eval 'return "hello"..KEYS[1]..KEYS[2]' 2 world haha
      KEYS数组下标从1开始
      阅读全文 »
<i class="fa fa-angle-left" aria-label="上一页"></i>1…3456<i class="fa fa-angle-right" aria-label="下一页"></i>

59 日志
14 分类
29 标签
GitHub
© 2018 — 2020 Pan
由 Hexo 强力驱动
|
主题 — NexT.Gemini v6.1.0