Redis中间件(三):Redis存储原理与数据模型


一、redis实现kv数据组织方式

redis 中KV组织是通过字典,通过 hashtable 来实现;
hashtable 就是通 hash运算的方式来决定字符串放到数组的哪一个槽位,数组大小根据数据量来进行调整,所以就会涉及到扩容缩容

  • 字符串经过 hash 函数运算得到 64 位整数;
  • 64位整数 % 表长size 得到余数,即是字符串在数组中的槽位
    将数组存入对应的槽位中。

0. redis的kv存储结构

存储结构

  1. key-value键值对 通过hash的方式存储到数组中。
  2. value主要的数据结构有string,list,hash,set,zset; value的数据不是单一类型,可以嵌入kv键值对。
    请添加图片描述

存储转换

redis 在进行编码存储的时候,同一类型不同的数据量会导致编码的方式不同。
数据量的时候,以存储效率高 为主
数据量的时候,以运行查询快 为主
在这里插入图片描述
源码调试步骤

1】makefile编译

make clear
bear make  (编译前先安装bear)
//推荐插件clongd: ctrl + 鼠标左键实现接口跳转2】编译调试
查看src/Makefile 确认是有 -g -ggdb, 表示带调试信息

【3】配置两个文件
tasks.json   帮助编译代码指令
launch.json  怎么启动redis-server

【4】启动调试
vscode 菜单 运行->启动调试

1. 单线程指什么, redis是不是单线程?

单线程:指命令处理在一个线程.
redis不是单线程:本质上是一个单线程执行命令、多线程做杂活的高性能数据库.

2. 命令处理为什么是单线程,不采用多线程?

前提:单线程不能有 (例如cpu运算、阻塞io)耗时操作, 而影响redis相应性能.

1. 避免加锁复杂度
+多线程会引入并发冲突,需要加锁控制:
+加锁粒度难把控,锁得多了性能下降,锁得少了数据错乱,容易出现死锁、竞态等问题。代码复杂度和维护成本上升;

2. 避免线程切换开销
+多线程会发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值