Redis——value的数据类型与单线程工作模型

前面提到过value不仅可以是string,也可以是hash,set等数据结构

我们用c++类比

字符串->string

哈希->unordered_map (field------value)

列表->deque

集合->set

有序集合:加了权重进行排序的集合

然而Redis在实际编码中,并没有完全的把上面的数据结构直接拿过来用,其为了提升效率节省curd时间,真正的结构并不一定和上述结构相同,但其保证对外的功能是不变的。内部编码会针对不同的应用场景进行相应的优化和改进。

我们也可以输入命令查看内部编码方式

object encoding key

Redis内部实际上是单线程工作模型(主要其处理的任务逻辑都是简单和快速的,不是很吃CPU)但并不是真正的内部只有一个线程在工作,在多个Redis客户端连接时,会有多个线程处理网络中的IO,只有到了Redis服务器端才会单线程执行,因此不会造成线程安全问题,一旦到了服务器就是串行。

同时,单线程也有弊端,作为客户端我们一定不能长时间占用资源。

问:既然Redis是单线程,为什么还是快呢?(相对于其他数据库来说)

1.Redis访问的是内存而不是磁盘

2.Redis处理的任务简单,功能不复杂

3.单线程模型,避免了线程竞争的开销(加锁解锁)

4.网络IO采用了多路转接(epoll)模型

相关推荐
马克Markorg37 分钟前
常见的向量数据库和具有向量数据库能力的数据库
数据库
JH30732 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
Coder_Boy_3 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
helloworldandy3 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
invicinble3 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟3 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖3 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
数据知道5 小时前
PostgreSQL 故障排查:如何找出数据库中最耗时的 SQL 语句
数据库·sql·postgresql
qq_12498707535 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
枷锁—sha5 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全