redis | 认识非关系数据库Redis的字符串数据类型及过期时间expire的作用

news2024/9/25 9:27:57

Redis 非关 kv型

    • 数据类型
      • 字符串
        • 数值操作
      • 应用场景 ⭐
      • 字符串命令练习⭐⭐
      • 过期时间设定 expire ⭐⭐⭐
        • 检查过期时间 ttl key
        • 删除过期key机制
          • 惰性删除
          • 定期删除

数据类型

数据类型丰富,字符串strings,散列hashes,列表lists,集合sets,有序集合sorted sets等等

字符串

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

  • 注意:
    key命名规范
    可采用 - wang:email
    key命名原则
    1、key值不宜过长,消耗内存,且在数据中查找这类键值的计算成本高
    2、不宜过短,可读性较差

    1、一个字符串类型的值最多能存储512M内容

  • set key value nx ex
    说明:设置一个字符串的key
    特殊参数:
    nx->not exist代表当key不存在时,才存储这个key
    ex->expire过期时间,单位s

  • get key

​ 说明:获取key的值
​ 返回值:key的值或者’nil’

在这里插入图片描述
在这里插入图片描述

  • strlen key
    说明:获取key存储 的长度

  • getrange key start stop
    说明:获取指定范围切片内容[包含start stop]

  • setrange key index value
    说明:从索引值开始,用value替换原内容;返回最新长度

在这里插入图片描述

  • 批量操作

mset key1 value1 key2 value2 key3 value3
说明:批量添加key和value

mget key1key2key3
说明:批量获取key的值

在这里插入图片描述

数值操作
  • incrby key 步长 将key增加指定步长

  • decrby key 步长 将key减少指定步长

  • incr key: +1操作

  • decr key: -1操作

  • incrbyfloat key step 执行浮点数增量操作

INCRBYFLOAT mykey 1.5

在这里插入图片描述
在这里插入图片描述

不加数字 默认加1

应用场景 ⭐

  • 缓存
    说明:将mysql中的数据存储到redis字符串类型中

  • 并发计数·点赞/秒杀 - 微博
    说明:通过redis单进程单线程的特点,由redis负责计数,并发问题
    转为串行问题

  • 带有效期的验证码
    说明:借助过期时间,存放验证码;到期后,自动消亡

字符串命令练习⭐⭐

1、查看db0库中所有的键

select 0 keys *

2、设置键trill:username对应的值为user001,并查看

set trill:username user001

get trill:username

3、获取trill::username值的长度

strlen trill:username

4、一次性设置tril:password、tril:gender、tril:fansnumber并查看(值自定义)

mset tril:password 123 tril:gender M tril:fansnumber 500

5、查看键trill::score是否存在

exist trill::score

6、增加10个粉丝[fansnumber]

incrby trill::fansnumber 10

7、增加2个粉丝(一个一个加)

incr trill::fansnumber

incrll trill::fansnumber

8、有3个粉丝取消关注你了

decrby trill::fansnumber3

9、又有1个粉丝取消关注你了

decr trill::fansnumber

10、思考、思考、思考,清除当前库

fiushdb

11、一万个思考之后,清除所有库

fiushall

过期时间设定 expire ⭐⭐⭐

只有字符串数据类型在set存储数值的时候将过期时间存储上

在这里插入图片描述
早期版本是应用方案2进行使用的,慢慢的出现了方案一,但是方案一也仅仅局限于字符串数据类型

检查过期时间 ttl key

在这里插入图片描述
随着ttl命令的输入  过期时间不断减少

删除过期key机制

每个redis数据库中,都会有一个特殊的容器负责存储带有过期时间的ky以及它对应的过期时间,这个容器称之为“过期字典

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

惰性删除

在 Redis 缓存系统中,可以使用惰性删除来处理过期的键,而不是在它们过期时立即删除,而是在下次访问时检查并删除。

在这里插入图片描述

定期删除

主动循环扫描检查

python 伪代码 redis C 语言编写的

DB NUMBERS=16#数据库数量

KEY_NUMBERS=20#每次检查key的数量

current db=0#记录当前检查到哪个库

# 每100ms调用
def activeExpireCycle():
    for i in range(DB_NUMBERS): # 循环10次
        
    	if current_db == DB_NUMBERS:  # 若是16个库扫描了一轮  则进行下一次扫描
    		current_db = 0
            
    	#获取当前数据库
    	redisDB = server.db[current_db]
        first_start = True  # 标记第一次删除
		del_key_num = 0     # 删除key的数量
		current_db =1		# 下次扫描的库
        
		while (first_start or del_key_num > KEY_NUMBERS/4)
			first_start = False
		for j in range(KEY_NUMBERS): # 20
			_key = redisDB.randomExpireKey()  # 随机取key
			if is_expire(key):
				#过期则直接删除
                delete_key(_key)
                del_key_num += 1
                
                if time_is_limit():
                    #若执行时间太长默认25毫秒
					return
					
        # 这个每100ms执行的方法 实际上最多执行 25 ms   Redis单进程单线程  资源宝贵
  • 最大内存检查

最后一道保险 - maxmemory配置选项
一旦内存量超过最大限制,redis会在执行命令时触发内存淘汰
(需手动在redis配置文件中激活maxmemoryi配置项)

  • 主流淘汰机制如下:

volatile-lru: 从已设置过期时间的内存数据集中挑选最近最少使用的数据淘汰;

​volatile-tt:从已设置过期时间的内存数据集中挑选即将过期的数据淘汰;

​volatile-random:从已设置过期时间的内存数据集中任意挑选数据淘汰;

​allkeys-lru:从内存数据集中挑选最近最少使用的数据淘汰;

​allkeys-random:从数据集中任意挑选数据淘汰;

​no-enviction:禁入大多写命令

在这里插入图片描述

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

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

相关文章

MySQL Order By 工作原理探究以及索引优化手段

背景 这篇文章出发的契机,主要是看到京东定时任务优化里面有使用到「游标」这种策略去完成查询优化 https://mp.weixin.qq.com/s/aYJV3Z-1MZ_a6tUjoHa_9g 刚好之前自己在开发业务的时候,也碰到类似的场景,需要在每个季度末将被申诉的卡片更…

流媒体协议之RTMP

一、RTMP 协议概述 今天我们要一起了解的这个协议叫 RTMP 协议,它并不复杂,对于拉流相关的协议,我们可以先思考一下拉流一般要交互什么,我理解有以下几项, 连接信息:包括服务器的地址、端口号等&#xff…

每日Attention学习16——Multi-layer Multi-scale Dilated Convolution

模块出处 [CBM 22] [link] [code] Do You Need Sharpened Details? Asking MMDC-Net: Multi-layer Multi-scale Dilated Convolution Network For Retinal Vessel Segmentation 模块名称 Multi-layer Multi-scale Dilated Convolution (MMDC) 模块作用 多尺度特征提取与融合…

一家物流装备企业终止,业绩下滑严重,恐不符合创业板新上市标准

鸿安机械终止的原因如下:首先,报告期内鸿安机械的营业收入和净利润出现下滑趋势,公司最近一年净利润恐不达标,或许不能满足创业板更新的第一套上市标准;其次,鸿安机械经营业绩对比同行业可比公司&#xff0…

笔记整理—uboot启动过程(5)BL2板级初始化

上一章说到了uboot在BL2阶段大概都要干什么,也说到了为了实现这些要先进行内存排布,实现了这些后便可实现BL2部分的板级初始化。首先先来看一下init_fnc_ptr函数指针。 for(init_fnc_ptrinit_sequence;*init_fnc_ptr;init_fnc_ptr){if((*init_fnc_ptr)(…

一文带你了解html标签

一、文档结构标签 <html>&#xff1a;网页的根标签 &#xff0c;嵌套包含所有标签。 <head>&#xff1a;头标签&#xff0c;包含文档的元数据用于编写网页的修饰内容&#xff0c;附加信息。 <body>&#xff1a;身体标签&#xff0c;用于编写展示内容&…

精益工程师资格证书:2024年CLMP报名指南

随着全球对精益管理的需求日益增长&#xff0c;精益管理专业人士资格认证&#xff08;CLMP&#xff09;正成为越来越多精益工程师和精益管理人员提升职业竞争力的首选。作为一种注重管理而非生产的认证&#xff0c;CLMP不仅适用于制造业的专业人士&#xff0c;也吸引了各行业的…

Qt之窗口

目录 Qt窗口简介: 菜单栏 ⼯具栏 状态栏 浮动窗⼝ 对话框 Qt内置对话框 1.消息对话框QMessageBox 2.颜⾊对话框QColorDialog 3.⽂件对话框QFileDialog 4.字体对话框QFontDialog 5.输⼊对话框QInputDialog 总结 接下来的日子会顺顺利利&#xff0c;万事胜…

Android Studio:模拟器页面闪烁,手机模拟器输入画面闪烁 android studio闪屏

主要解决&#xff0c;android studio 启动app测试&#xff0c;输入数据时&#xff0c;手机画面就会闪烁&#xff0c;闪屏 1. 如图所示&#xff0c;依照顺序找到Edit &#xff0c;并点击Edit 2. 找到Graphics 选择为SoftWare &#xff0c;并保存修改即可 3. 如果此处不能选择S…

奇安信渗透测试岗位三面经验分享

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…

算法的学习笔记—二叉搜索树与双向链表(牛客JZ36)

&#x1f600;前言 在数据结构的学习过程中&#xff0c;二叉搜索树&#xff08;Binary Search Tree, BST&#xff09;是一个常见的主题。它不仅具有排序的特性&#xff0c;还为各类算法的实现提供了基础。然而&#xff0c;在某些特定的应用场景中&#xff0c;我们可能需要将二叉…

Web安全:SQL注入实战测试.(扫描 + 测试)

Web安全&#xff1a;SQL注入实战测试. SQL注入就是 有些恶意用户在提交查询请求的过程中 将SQL语句插入到请求内容中&#xff0c;同时程序的本身对用户输入的内容过于相信&#xff0c;没有对用户插入的SQL语句进行任何的过滤&#xff0c;从而直接被SQL语句直接被服务端执行&am…

Docker绑定挂载使用手册

目录 目标 官方文档 绑定挂挂载&#xff08;Bind mounts&#xff09; 简介 基本创建方法 控制读写权限&#xff08;默认有读写权限&#xff09; 为什么绑定挂载不适合做数据库持久化 为什么绑定挂载更适合做热部署 临时挂载&#xff08;tmpfs mounts&#xff09; 简介…

CSS中的元素布局与定位详细说明

1、前言 在CSS开发中&#xff0c;很重要的一个工作就是根据UI设计稿&#xff0c;进行元素的布局与定位&#xff0c;使得元素&#xff08;比如某一段文本、按钮、图片等&#xff09;显示在页面正确的位置。本文就元素的布局与定位方面&#xff0c;做一些讲解和说明。 2、元素的…

PHP易支付系统,支付系统源码下载,已测试,带多个支付接口

易支付系统源码&#xff0c;已测试&#xff0c;功能齐全&#xff0c;带有多支付接口&#xff0c;站内有对应的视频教程&#xff0c;详细教程 搭建出来的网站前端和后台还是比较美观的 PHP全开源易支付系统源码&#xff0c;一键安装版 搭建环境&#xff1a;PHP 5.4 以上 推荐7…

数学基础(九)

一、相关分析 相关分析&#xff1a; 衡量事物之间或称变量之间线性相关的强弱&#xff0c;并适当的统计指标表示出来的过程 相关系数&#xff1a; 连续变量的相关分析&#xff1a; 连续变量即数据变量&#xff0c;它的取值之间可以比较大小&#xff0c;可以用加减法计算出差…

Google Colab快速使用

Google Colab快速使用 1. 引言2. Jupyter笔记本的创建3. 上传代码和数据集4. Colab常规指令 1. 引言 Google Colab是谷歌提供的免费Jupyter&#xff0c;很类似于Linux系统这些在终端界面操纵的感觉&#xff0c;不需要深度学习环境配置就可以使用&#xff0c;完全基于云端运行。…

【celery-2】python-Django发送邮件-短信-钉钉通知

一 Python发送邮件 1.1 使用SMTP模块发送邮件 import smtplib from email.mime.text import MIMEText from email.header import Headermsg_from xxxqq.com # 发送方邮箱 passwd xxx # 填入发送方邮箱的授权码(填入自己的授权码&#xff0c;相当于邮箱密码) msg_to [xxx…

两种方式实现图片标记

效果图 第一种&#xff1a;通过动态添加dom元素实现标记 代码如下 // index.tsx import React from "react"; import "./index.less";export default function index() {const parentRef React.useRef<any>(null);const ulRef React.useRef<a…

网站技术分析必备插件Wappalyzer Chrome介绍

引言 在日常的开发过程中&#xff0c;开发者们经常会对访问的某些网站使用了哪些技术感到好奇。无论是网页的前端框架、后台的编程语言&#xff0c;还是数据库的类型&#xff0c;这些信息对于开发者优化自己的网站或者了解行业趋势都非常有用。然而&#xff0c;直接从浏览器获…