Redis--字符串

news2024/9/23 11:25:14

基础概念

  1. 字符串、数字,都会转化为字符串来进行存储
  2.  以二进制的方式存储在内存中  

key的命名规范

  1. key不宜过长,消耗内存,且在数据查找的这类键值的计算成本高(通过hash计算来查找)
  2. 不宜过短,可读性查值
  3. 一个字符串类型的值最多能存储512M内容

常用命令--必须掌握

1.存字符串类型的值

        set key value nx ex

说明:设置一个字符串的key

特殊参数:

        nx  -> not exixt 代表当key不存在时,才存储这个key

        ex  -> expire  过期时间,单位s

例子

set username  mike

2.取某个key所对应的值 

get key

说明:获取指定 key 的值,如果key不存在则返回null 

3.求key存储值得长度

strlen key 

说明:获取key存储值得长度

4.

getrange key start stop

 说明:获取指定范围切片内容(包含start stop)

5.

setrange key index value 

说明:从索引值开始,用value替换原来得内容,并返回最新得长度 

数值操作--必须掌握 

1.

incrby key 步长

说明: 将key增加指定得步长

2.

decrby key 步长

说明: 将key减少指定得步长 

3.

incr key : +1 操作

4.

decr key  : -1操作

应用场景 

缓存

说明:将MySQL中高频访问的数据存储到redis字符串类型中

并发计数 -- 点赞/秒杀

说明:通过redis单进程单线程的特点,由redis负责计数,由redis负责计数,并发问题转为串行问题

带有效期的验证码

说明:借助过期时间,存储验证码;到期后,自动消亡

过期时间

默认情况下,key没有设置过期时间,需要手动指定

方案1:直接用set的ex参数

        set key value ex 3

方案2:使用expire通用命令

        1.set key value

        2.expire key 5  # 秒

        3.pexpire key 5   # 毫秒

     注意:这种方案可能存在丢包

检查过期时间 

查看过期时间 ttl key   -- 通用命令

返回值:

        -1:代表当前key没有过期时间

        大于0:代表当前key的剩余存活时间

        -2: 代表当前key不存在

删除过期时间

persist key

说明:把带有过期时间的key 变为 永久不过期

返回值: 1代表删除过期时间成功/  0代表当前key没有过期时间   or key 不存在 

Redis删除过期key机制

每个redis数据库中,都会有一个特殊的容器负责存储带有过期时间的key以及它对应的过期时间,

这个容器称之为“过期字典”。

针对过期字典中的key,redis结合 惰性删除 和 定期删除 俩大机制, 有效删除过期数据

Redis 使用的过期删除策略是惰性删除+定期删除这两种策略配和使用。

惰性删除

当我们查询一个 key 时,Redis 首先检查该 key 是否存在于过期字典中:

  • 如果不在,则正常读取键值;
  • 如果存在,则会获取该 key 的过期时间,然后与当前系统时间进行比对,如果比系统时间大,那就没有过期,否则判定该 key 已过期。
惰性删除优缺点

优点

因为每次访问时,才会检查 key 是否过期,所以此策略只会使用很少的系统资源,因此,惰性删除策略对 CPU 时间最友好。
缺点:

如果一个 key 已经过期,而这个 key 又仍然保留在数据库中,那么只要这个过期 key 一直没有被访问,它所占用的内存就不会释放,造成了一定的内存空间浪费。所以,惰性删除策略对内存不友好。
 

定期删除策略


定期删除策略的做法是,每隔一段时间「随机」从数据库中取出一定数量的 key 进行检查,并删除其中的过期key。

Redis 的定期删除的流程:

1.从过期字典中随机抽取 20 个 key;
2.检查这 20 个 key 是否过期,并删除已过期的 key;
3.如果本轮检查的已过期 key 的数量,超过 5 个(20/4),也就是「已过期 key 的数量」占比「随机抽取 key 的数量」大于 25%,则继续重复步骤 1;如果已过期的 key 比例小于 25%,则停止继续删除过期 key,然后等待下一轮再检查

可以看到,定期删除是一个循环的流程,我们知道redis是单进程单线程机制,那 Redis 为了保证定期删除不会出现循环过度,导致线程卡死现象,为此增加了定期删除循环流程的时间上限,默认不会超过 25ms。

定期删除的流程如下:

定期删除策略优缺点
优点:

通过限制删除操作执行的时长和频率,来减少删除操作对 CPU 的影响,同时也能删除一部分过期的数据减少了过期键对空间的无效占用。
缺点:

难以确定删除操作执行的时长和频率。如果执行的太频繁,就会对 CPU 不友好;如果执行的太少,那又和惰性删除一样了,过期 key 占用的内存不会及时得到释放。
 

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

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

相关文章

程序员带你入门人工智能

随着人工智能技术的飞速发展,越来越多的程序员开始关注并学习人工智能。作为程序员,我们可能会对如何开始了解人工智能感到困惑。今天,我将向大家介绍一些如何通过自学了解人工智能的经验和方法,帮助大家更好地入门这个充满挑战和…

在线ws/wss调试工具

具体前往:在线webSocket(ws)调试工具

程序员告诉你:人工智能是什么?

随着科技的快速发展,人工智能这个词汇已经逐渐融入了我们的日常生活。然而,对于大多数人来说,人工智能仍然是一个相对模糊的概念。 首先,让我们从人工智能的定义开始。人工智能是一种模拟人类智能的技术,它涵盖了多个领…

图像处理01 小波变换

一.为什么需要离散小波变换 连续小波分解,通过改变分析窗口大小,在时域上移动窗口和基信号相乘,最后在全时域上整合。通过离散化连续小波分解可以得到伪离散小波分解, 这种离散化带有大量冗余信息且计算成本较高。 小波变换的公…

C++二分查找算法:有序矩阵中的第 k 个最小数组和

本文涉及的基础知识点 二分查找算法合集 本题的简化 C二分查找算法:查找和最小的 K 对数字 十分接近m恒等于2 题目 给你一个 m * n 的矩阵 mat,以及一个整数 k ,矩阵中的每一行都以非递减的顺序排列。 你可以从每一行中选出 1 个元素形成…

庖丁解牛:NIO核心概念与机制详解 04 _ 分散和聚集

文章目录 Pre概述分散/聚集 I/O分散/聚集的应用聚集写入Code Pre 庖丁解牛:NIO核心概念与机制详解 01 庖丁解牛:NIO核心概念与机制详解 02 _ 缓冲区的细节实现 庖丁解牛:NIO核心概念与机制详解 03 _ 缓冲区分配、包装和分片 概述 分散/聚…

学霸教你自学人工智能

在这个信息爆炸的时代,人工智能已经渗透到我们生活的方方面面。无论是语音助手、自动驾驶汽车,还是医疗诊断,人工智能都在发挥着越来越重要的作用。如果你对人工智能充满热情,希望在这个领域有所建树,那么,…

鸿蒙:使用Stack、ContentTable、Flex等组件和布局实现一个显示界面

效果展示 一.概述 跟随官网继续HarmonyOS学习 本篇博文实现一个食物详情页的开发Demo 通过这个开发过程学习如何使用容器组件Stack、Flex和基本组件Image、Text,构建用户自定义组件,完成图文并茂的食物介绍 二.构建Stack布局 1.食物名称 创建Stack…

STM32CubeMX学习笔记-CAN接口使用

STM32CubeMX学习笔记-CAN接口使用 CAN总线传输协议1.CAN 总线传输特点2.位时序和波特率3.帧的种类4.标准格式数据帧和遥控帧从STM32F407参考手册中可以看出主要特性如下CAN模块基本控制函数CAN模块消息发送CAN模块消息接收标识符筛选发送中断的事件源和回调函数 CubeMX项目设置…

解决SLF4J: Class path contains multiple SLF4J bindings.

这个问题在使用Dubbo时产生,推荐一个插件Maven Helper 1.插件安装 安装好后下方会有一个Dependency Analyzer,点击进入 2.删除冲突项 根据报错信息选择一个slf4j删除,不一定是slf4j-log4j12,每个人的报错信息不一样,图…

FPGA_IIC代码-正点原子 野火 小梅哥 特权同学对比写法(3)

FPGA_IIC代码-正点原子 野火 小梅哥 特权同学对比写法(3) 工程目的IIC时序图IIC 读写操作方法汇总正点原子IIC实验工程整体框图和模块功能简介,如表下图所示: IIC 驱动模块设计时钟规划状态跳转流程单次写操作的波形图如下图所示&…

Linux socket编程(4):服务端fork之僵尸进程的处理

在上一节利用fork实现服务端与多个客户端建立连接中,我们使用fork函数来实现服务端既可以accept新的客户端连接请求,又可以接收已连接上的客户端发来的消息。但在Linux中,在子进程终止后,父进程需要处理该子进程的终止状&#xff…

LeetCode(29)三数之和【双指针】【中等】

目录 1.题目2.答案3.提交结果截图 链接: 三数之和 1.题目 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复…

RE2文本匹配实战

引言 今天我们来实现RE2进行文本匹配,模型实现参考了官方代码https://github.com/alibaba-edu/simple-effective-text-matching-pytorch。 模型实现 RE2模型架构如上图所示。它的输入是两个文本片段,所有组件参数除了预测层和对齐层外都是共享的。上图…

计算机网络期末复习(知识点)

一、计算机网络体系结构 计算机网络&因特网: 计算机网络定义:将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络关联软件及网络协议的管理和协调下,实…

在 Linux 上搭建 Java Web 项目环境(最简单的进行搭建)

要在 Linux 上安装的程序有 1.JDK (要想运行 java 程序 JDK 是必不可少的) 2.Tomcat (HTTP 服务器,是管理 Web 项目的常用工具) 3. mysql (数据库) 一.安装 JDK 博主使用的 Linux 发行版是 centos ,cen…

kubenetes-服务发现和负载均衡

一、服务发布 kubenetes把服务发布至集群内部或者外部,服务的三种不同类型: ClusterlPNodePortLoadBalancer ClusterIP是发布至集群内部的一个虚拟IP,通过负载均衡技术转发到不同的pod中。 NodePort解决的是集群外部访问的问题,用户可能不…

【MySQL--->事务】

文章目录 [TOC](文章目录) 一、基本概念二、事务的操作1.设置全局事务隔离级别2.设置事务提交方式3.事务操作 三、事务隔离性1.隔离性概念2 .隔离级别设置 四、MVCC多版本控制2. read view 一、基本概念 事务是由若干条具有逻辑相关性的SQL语句组成的,用来完成某种任务的**逻辑…

java“俄罗斯方块”

首先新建议一个包为Tetris (俄罗斯方块) 类名也叫做Tetris; 代码运行: package Tetris; import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.KeyEvent; import java.aw…

【运维篇】Redis常见运维命令详解

文章目录 1. 前言2. 连接管理命令详解2.1 AUTH命令2.2 PING命令2.3 SELECT命令2.4 QUIT命令 3. 服务器管理命令详解3.1 FLUSHALL命令3.2 SAVE/BGSAVE命令3.3 SHUTDOWN命令 4. 安全管理命令详解4.1 CONFIG命令4.1.1 CONFIG SET命令用法4.1.2 CONFIG GET命令用法 4.2 AUTH命令 5.…