redis初识

目录

前言:

核心全局命令

key过期实现方式

定时器实现方式

基于优先级队列/堆

redis特性

redis优点

redis单线程模型

redis单线程为什么效率这么高?

核心五种数据类型内部编码方式


前言:

    redis作为当前主流的内存数据库(NoSQL),它是以键值对格式存储数据(key-value),相比于MySQL它具有更加快速访问数据的能力。同时redis在分布式系统中也有自己的一番作为,redis的主从复制,哨兵模式等等。redis也可以作为缓存解决数据库访问压力,等等一些用武之地。

核心全局命令

1)keys patten(模式)

    ?(一个字符)*(任意多个字符)[abc]固定选项 [a - b]范围 [^a]排除a字符。时间复杂度O(N)

2)exists key [key ...]

    后可以写多个key,返回存在key的个数。时间复杂度:O(1)

3)del key [key ...]

    删除指定key,返回删掉key的个数。时间复杂度:O(1)

4)expire key seconds(秒)

    指定key设置过期时间。1:设置成功,0:设置失败。时间复杂度:O(1)

5)ttl key(time to live)

    查询key剩余过期时间。-1:没有关联过期时间,-2:key不存在。时间复杂度:O(1)

6)pexpire key 毫秒

    设置key过期时间,单位毫秒

7)pttl key

    查询key剩余过期时间,单位毫秒

8)type key

    返回key对应数据类型。时间复杂度:O(1)

key过期实现方式

1)定期删除

    每次抽取一部分key遍历,进行验证过期时间。保证抽取检查的时间足够快。(redis单线程处理命令,防止阻塞)

2)惰性删除

   如果key已经过期了,但还没有删除。当使用这个key的时候,就会触发key的删除操作。

注意:

    虽然redis将上述两种策略结合,但还会有少量过期key没有被删除。redis补充上述问题,还提供了一系列内存淘汰策略。

定时器实现方式

基于优先级队列/堆

    队首元素为时间最小的任务,扫描线程扫描队首元素。扫描也不能太频繁,第一次扫描就计算出时间差,然后扫描线程等待即可。

    如果扫描线程等待过程中,又有更小的任务更新到队首呢?在新任务添加的时候唤醒一下线程,重新检查队首元素。

redis特性

1)内存中存储数据(以键值对方式存储)

2)支持lua脚本批量操作redis。

3)可扩展。通过使用适合的Redis扩展,可以更好地利用Redis的潜力,构建高性能和可靠的应用程序。

4)支持持久化(内存数据进行持久化操作,RDB,AOF,混合持久化)

5)支持集群,可以水平扩展(类似mysql “分库分表”操作)

6)高可用。

        Redis支持主从复制(Master-Slave Replication)和哨兵机制(Sentinel),以提供数据的高可用性和容错能力。通过配置主从复制和哨兵节点,Redis可以实现自动故障恢复和故障转移。

redis优点

redis主要优点就是快。

1)内存中存储数据。

2)核心功能就是比较简单的逻辑,操作快。

3)网络角度,redis使用了IO多路复用的方式。

4)redis使用的是单线程模型,减少了不必要的线程竞争开销(高版本支持多线程也只是在网络IO处理)

redis单线程模型

1)redis只使用一个线程处理所有命令请求,网络IO这里使用的是多线程。

2)redis能够使用单线程很好的工作,原因主要在于redis的核心业务逻辑,都是短平快的。不太消耗cpu。

redis单线程为什么效率这么高?

1)redis操作内存,数据库访问硬盘,两者的访问效率不在一个量级上。

2)redis核心功能比数据库核心功能更简单。

3)单线程模型,避免了不必要的线程竞争开销。

4)处理网络IO,使用epoll这样的IO多路复用。

        IO多路复用:一个线程管理多个socket(在等待socket的同时处理别的socket。核心:同一时刻只有少数socket是活跃的,每一个socket使用线程并不是持续的)

        epoll:事件通知/回调机制(当对应socket处理完成之后,socket主动通知该线程)

核心五种数据类型内部编码方式

1)string

    raw:原生字符串类型(字符串比较长的时候)

    int:当value值为整数的时候

    embstr:字符串长度比较短的时候

2)hash

    hashtable:正常hash表(hash表数据比较多的时候)

    ziplist:压缩列表(重新编码),可以节省空间(每个hash数据都不大的时候,节省空间)

3)list

    linkedlist:正常的双向链表

    ziplist:同上

    quicklist:redis3.2之后引入的,结合了上述两种数据结构的特点,并且取代了它们。(链表的每个节点数据类型都是ziplist)

4)set

    hashtable:正常hash表

    intset:集合中存储的都是整数

5)zset

    skiplist:跳表,也是链表。每个节点上有多个指针域。巧妙的搭配这些指针域就可以做到,在跳表上查询数据时间复杂度O(logN)

    ziplist:同上

注意:

        object encoding key:查询key对应value的实际编码方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/49842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Promise详解

目录 一、前言:为什么会出现Promise?二、Promise是什么?2.1 Promise的初体验 三、使用Promise的好处?3.1 指定回调函数的方式更加灵活3.2 可以解决回调地狱问题,支持链式调用 四、Promise实例对象的两个属性五、resolve函数以及reject函数六、Promise…

iOS开发Swift-基础部分

1.常量 let maxNum 10 //单个常量赋值 let maxNum 10, minNum 2 //多个常量赋值用逗号隔开2.变量 var x 0.0 //单个变量赋值 var x 0.0, y 0.1 //多个变量赋值用逗号隔开3.类型注解 系统可通过赋初始值进行自动推断。 var name&#…

ssm汽车养护管理系统源码和论文

ssm汽车养护管理系统038 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 开题报告内容:(研究现状、目的意义;基本内容、研究方法、参考文献等。) 研究现状 国外…

driver‘s license exam 4

driver‘s license exam 1_spencer_tseng的博客-CSDN博客 driver‘s license exam 2_spencer_tseng的博客-CSDN博客 driver‘s license exam 3_spencer_tseng的博客-CSDN博客 driver‘s license exam 4_spencer_tseng的博客-CSDN博客 car indicator light_spencer_tseng的博…

2023牛客暑期多校训练营10 C Multiplication(复杂度证明)

拿了个一血,队友说复杂度可能有问题,我就来证一证 做法就不说了,题解里有,贴个代码 def gcd(a,b):if (b0):return areturn gcd(b,a%b) nint(input()) kint(input()) ans0 for x in range(0,102):for y in range(0,102-x):xx10**x…

java八股文面试[数据结构]——ArrayList和LinkedList区别

ArrayList和LinkedList的异同 二者的线程都不安全,相对线程安全的Vector,执行效率高。此外,ArrayList时实现了基于动态数组的数据结构,LinkedList基于链表的数据结构,对于随机访问get和set,ArrayList觉得优于LinkedLis…

ubuntu上使用osg3.2+osgearth2.9

一、介绍 在ubuntu上使用osgearth加载三维数字地球,首先要有osg和osgearth的库,这些可以直接使用apt-get下载安装,但是版本有些老,如果需要新版本的就需要自己编译。 #查看现有版本 sudo apt-cache madison openscenegraph #安装…

C#实现简单TCP服务器和客户端网络编程

在C#中进行网络编程涉及许多类和命名空间,用于创建和管理网络连接、传输数据等。下面是一些主要涉及的类和命名空间: System.Net 命名空间:这个命名空间提供了大部分网络编程所需的类,包括: IPAddress:用于…

2023年高教社杯数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

第2篇:ESP32 helloword第一个程序示范点亮板载LED

1.选择ESP32开发板 2.寻找串口号,win10自动安装驱动 手动安装驱动参考: 百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可…

markdown样式覆盖的解决方案

背景 最近公司在搞的ai项目中遇到了一个场景,公司一个新的ai项目在最开始搭建项目的直接引用了reset.css,项目开发到一半需要引用react-markdown插件展示gpt返回的内容,但是渲染的时候发现例如h1、h2、li、ui标签等等的默认样式由于reset的原…

ipad可以用别的品牌的手写笔吗?开学平价电容笔推荐

开学需要买什么呢?随着科技的不断进步,各种类型的iPad电容笔应运而生。一支好的电容笔,不仅能大大提高我们的工作效率,而且能大大提高我们的生产力。平替的这款电容笔,不管是在技术上,还是在品质上&#xf…

关于路由器和DNS解析的一些新理解

其实我本人对于交换机和路由器这些网络硬件是比较感兴趣的,也在一点一点的学习相关知识,每次解决一个问题,就让我对一些事情有新的思考。。 今天前台同事,的机器突然上不了网,,和领导一起去看了一波&#…

Vue-12.集成postcss.config.js

PostCSS 介绍 PostCSS 是一个用于处理样式的工具,可以通过插件来定制其行为。以下是一些常用的 PostCSS 插件和 API 的介绍: Autoprefixer: 这是一个流行的 PostCSS 插件,用于自动添加浏览器前缀,以确保您的样式在不同浏览器中具…

jmeter CSV 数据文件设置

创建一个CSV数据文件:使用任何文本编辑器创建一个CSV文件,将测试数据按照逗号分隔的格式写入文件中。例如: room_id,arrival_date,depature_date,bussiness_date,order_status,order_child_room_id,guest_name,room_price 20032,2023-8-9 14:…

向量数据库 Milvus:实现高效向量搜索的技术解析

引言 随着人工智能、机器学习和深度学习技术的不断发展,越来越多的应用开始使用向量表示数据。向量数据具有高维、稀疏和相似性等特点,传统的关系型数据库和键值存储在处理这类数据时面临许多挑战。为了满足大规模、高并发的向量搜索需求,出现…

C++--动态规划两个数组的dp问题

1.最长公共子序列 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串…

Java Heap Space(堆内存溢出)问题 ,想找一个扫描代码的工具

以下是几个受欢迎的工具: FindBugs:它是一个静态代码分析工具,专门用于查找 Java 代码中潜在的 bug 和问题。它可以帮助您发现一些常见的内存泄漏和资源管理问题。 PMD:类似于 FindBugs,PMD 也是一个静态代码分析工具…

Nginx+Tomcat负载均衡、动静分离

目录 NginxTomcat负载均衡、动静分离群集 Nginx配置反向代理的主要参数 动静分离原理 反向代理两种模式 七层反向代理 四层反向代理 Nginx 负载均衡模式(调度算法) nginx的会话保持 为什么使用动静分离 为什么使用负载均衡 正向代理和反向代理…

Unity 之NavMeshAgent 组件(导航和路径寻找的组件)

文章目录 **作用**:**属性和方法**:**用途**:**注意事项**: NavMeshAgent 是Unity引擎中用于导航和路径寻找的组件。它可以使游戏对象在场景中自动找到可行走的路径,并在避免障碍物的情况下移动到目标位置。 以下是关于…