redis中的事务,键的过期时间以及排序

Week 9 10 Neural Networks 阅读详情

事务(MULTI)

Redis中的事务是一组命令的集合,事务同命令一样都是Redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行

原理:

  • 先将MULTI命令发送给Redis,告诉Redis我要开启一个事务
  • 之后Redis将收到的命令全部放到一个事务队列中,暂不执行
  • 直到收到EXEC命令,Redis会将等待执行的事务队列中的命令按照发送顺序依次执行,返回值顺序和命令的顺序相同
  • Redis还能保证一个事务内的命令依次执行而不被其他命令插入
  • Redis不支持回滚操作,语法错误其余命令都不会执行,命令与数据类型不匹配等运行错误就算出现,其余命令还是会执行,如果出现错误就只能自己去解决这个问题了

WATCH

  • WATCH命令可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会被执行,监控一直持续到EXEC命令
  • 由于WATCH命令的作用只是当被监控的键值被修改后阻止之后一个事务的执行,而不能保证其他客户端不修改这一键值,所以我们需要在EXEC执行失败后重新执行整个函数
  • 执行EXEC命令后会取消对所有键的监控,如果不想执行事务中的命令也可以使用UNWATCH命令来取消监控

过期时间

设置过期时间(EXPIRE)

SET name xiaoming
EXPIRE name 20

查询过期时间(TTL)

TTL name
  • EXPIRE命令使用方法为EXPIRE key seconds,seconds表示键的过期时间,单位是秒
  • PEXPIRE命令更精确的控制过期时间,单位为毫秒,PTTL key 查看以毫秒为单位的过期时间
  • EXPIREAT命令是使用Unix时间作为第二个参数表示键的过期时刻

设置缓存淘汰键的规则

当服务器内存有限时,如果大量的使用缓存键且过期时间设置的很长就会导致redis占满内存
另一方面如果为了防止redis占用内存过大而将缓存键的过期时间设置的太短,就可能导致缓存命中率过低并且大量的内存白白的闲置.
实际开发中会发现很难为缓存键设置合理的过期时间,为此可以限制redis能够使用的最大内存,并让redis按照一定的规则淘汰不需要的缓存键,
这种方式在只将redis用作缓存系统时非常实用

具体设置方法: 修改配置文件中的maxmemory参数,限制redis最大可用内存大小(单位是字节),
当超出这个限制时会一句maxmemory-policy参数指定的策略来删除不需要的键,直到redis占用的内存小于指定内存

规则说明
volatile-lru使用LRU算法删除一个键(只对设置了过期时间的键)
allkeys-lru使用LRU算法删除一个键
volatile-random随机删除一个键(只对设置了过期时间的键)
allkeys-random随机删除一个键
volatile-ttl删除过期时间最近的一个键
noeviction不删除键,只返回错误

LRU算法:最近最少使用,其认为最近最少使用的键在未来一段时间内也不会被用到,即当需要空间时这些键是可以被删除的

提示:使用allkeys-lru规则时,事实上redis并不会准确的将整个数据库中最久未被使用的键删除,而是每次从数据库中随机取3个键并删除这三个键中最久未被使用的键,
删除过期时间最接近的键的实现方也是这样,"3"这个数字可以通过redis的配置文件中的maxmemory-samples参数设置

排序

sort命令排序

功能:sort可以对列表类型,集合类型和有序集合类型进行排序,并且可以完成与关系数据库中的连接查询相类似的任务

SORT key
  • 在对有序集合类型排序时会忽略元素的分数,只针对元素自身的值进行排序
  • 除了可以排列数字外,sort命令还可以通过ALPHA参数实现按照字典顺序排列非数字元素
LPUSH mylistalpha a c e d B C A
SORT mylistalpha ALPHA --> A B C a c d e
  • SORT命令默认是按照从小到大的顺序排列的,DESC参数可以将元素按照从大到小排列
SORT numbers DESC
  • SORT命令还支持LIMIT参数来返回指定范围的结果LIMIT offset count,表示跳过前offset个元素并获取之后的count个元素
SORT numbers DESC LIMIT 1 2
SORT中的BY参数
  • BY参数的语法为BY 参考键,其中参考键可以是字符串类型或者是散列类型键的某个字段(表示为键名->字段名),如果提供了BY参数,SORT命令将不再依据元素
    自身的值进行排序,而是对每个元素使用元素的值替换参考键中的第一个"*"并获取其值,然后一句该值对元素排序
SORT tag:name BY post:*->time DESC
参考键还可以是字符串类型
LPUSH sortbylist 1 2 3
SET itemscore:1 50
SET itemscore:2 100
SET itemscore:3 -10
SORT sortbylist BY itemscore:* DESC
  • 当参考键名不包含"*"时(即常量键名,与元素值无关),SORT命令将不会执行排序操作,常用于不需要排序但需要借助SORT命令获得与元素相关联的数据时
  • 如果几个元素的参考键值相同,则SORT命令会再比较元素本身的值来决定元素的顺序
  • 参考键虽然支持散列类型,但是"*“只能在”->“符号前面(即键名部分才有用),在”->"后(即字段名部分)会被当成字段名本身而不会作为占位符被元素的值替换,
    即常量键名,这时由于每个元素的参考键值都是相同的,所以redis会按照元素本身的大小排列
SORT中的GET参数
  • GET参数不影响排序,它的作用是使SORT命令的返回结果不再是元素自身的值,而是GET参数中指定的键值,
  • GET参数也支持字符串类型和散列类型的键,并使用"*"作为占位符.
  • 在一个SORT命令中可以有多个GET参数(而BY参数只能有一个)
  • GET # 会返回元素本身的值
SORT tag:ports BY post:*->time DESC GET post:*->title GET post:*->time
SORT中的STORE参数
  • 默认情况下SORT会返回排序结果,使用STORE参数保留排序结果,如果要把结果保存到sort.result键中,
SORT tag:posts BY post:*->time DESC GET post:*->title GET post:*->time GET # STORE sort.result
  • 加上STORE参数后SORT命令的返回值为结果的个数,保存的sort.result键的类型为列表类型
  • STORE参数通常用来结合EXPIRE命令缓存排序结果
SORT性能优化
  • SORT命令的时间复杂度为O(n+mlog(m)),其中n表示要排序的列表(集合或有序集合)中的元素个数,m表示要返回的元素个数
  • 当n较大的时候SORT命令的性能会相对较低,并且redis在排序前会建立一个长度为n的容器来存储待排序的元素,如果同时进行较大的大数据量排序操作会严重影响性能
注意:
  • 尽可能减少待排序键中元素的数量(使n尽可能小)
  • 使用LIMIT参数只获取需要的数据(使m尽可能小)
  • 如果要排序的数据量较大,尽可能使用STORE参数将结果缓存
腾讯面试——机器学习岗面试总结 先写合并两个有序数组,接着写合并n个有序的数组,假设总共m个数,讲了一个思路两两合并直到只剩下一个数组,分析一下时间复杂度(MlogN),面试官不满意,然后想了一下说了另一个思路,用n个指针开始指向各个数组的首端,用一个优先队列维护他们的最小值,每次拿出最小值的指针然后插入该指针的下一个值。感觉跟二面面试官聊得还是挺开心的,他详细地介绍了他们部门所做的业务,然后问了一下什么时候能来实现,我说只能暑假七八两个月,他觉得有点晚,这样子不利于转正,有些人都实习半年的,回去讨论一下,正式批之前给我答复。 阅读详情

相关推荐

告别音质玄学:实测ACM8625S搭配杰理AC695x,如何通过寄存器精准调出好声音

第一次听到ACM8625S驱动音箱发出的声音时,我有些失望——这个被厂商宣传为"高保真数字功放"的芯片,默认配置下的表现甚至不如一些廉价模拟功放。经过两周的反复调试,最终配置使这款售价不到200元的音箱达到了接近专业监听设备的音质水平。特别是在鼓点和电吉他表现上,既保持了足够的冲击力,又不会掩盖人声细节。例如,当频率响应曲线在10kHz有+2dB提升时,多数评测者认为听感最佳,尽管这会使THD略微增加0.05%。虽然厂商提供的配置工具能快速生成基础代码,但想要获得最佳音效还需要手动优化。

weixin_29655587的博客 355

Redis学习:过期时间和排序

一.过期时间 在实际的开发中我们经常遇到一些有时效的数据,在Redis中我们应该怎样处理这些数据呢? 下面来学习: 1.EXPIRE命令 我们可以使用它来设置一个键的过期时间,到时间后Redis会自动删除它。 例如 SET session:23 uid1314 EXPIRE session:23 30//单位为秒 上面返回1表示执行成功,如果返回0则表示键不存在或者失败。 2.TTL命令 如果我们想知道我们设置自动删除的键还有多久会删除,我们可以用TTL来查询: 当键不存在时会返回-2 : 返回-1

c1776167012的博客 1631

医学超声影像研究——从拒稿到录用:我的UMB投稿实战复盘

本文分享了作者将一篇关于超声影像中肿瘤传统分类方法的研究论文,从被其他期刊拒稿到最终被《Ultrasound in Medicine & Biology》录用的完整实战经验。文章详细复盘了心态调整、精准选刊、针对UMB期刊的稿件精修、投稿系统操作细节以及与审稿人有效沟通回复的全过程,为医学影像领域的科研工作者提供了宝贵的投稿策略与实操指南。

stem5的博客 492

Redis进阶(一):事务、过期时间、排序

1. 事务 1.1 概述 Redis 中的事务是一组命令的集合。一个事务中的命令要么全部都执行,要么全部都不执行。事务的原理是先将属于一个事务的命令发送给redis,然后再让Redis依次执行这些命令 # 告诉redis,后面输入的命令先不要执行,把它们暂时存起来 127.0.0.1:6379> multi OK # 输入的命令存入事务队列中,返回queued表示已存入事务队列中 127.0...

诗和远方 523

智能体评测技术与实践:从评估维度到DeepEval实战指南

智能体评测技术与实践:从评估维度到DeepEval实战指南 本文系统探讨了AI智能体的评测体系与实践方法。首先从四个关键维度构建评估框架:基础能力(意图理解、知识完整性)、复杂任务(多轮对话、动态工作流)、可靠性(幻觉抑制、安全合规)以及工具效率(参数填充、多工具协同)。其次分析了主流评测工具,包括xBench的动态双轨评估、DeepEval的全链路监控等解决方案。最后详细介绍了DeepEval的实战应用,涵盖环境配置、测试用例构建、指标配置及CI/CD集成,展示了如何通过代码化评估实现智能体质量的持续提升

Linda的自动化测试之旅 3414

【硬件开源实战】STM32G070RBT6开发板从设计到避坑全解析

本文全面解析了STM32G070RBT6开发板从硬件设计到避坑的实战经验。详细介绍了电源设计、时钟电路、PCB布局等关键环节,分享了成本控制、焊接测试、软件开发和外设驱动的实用技巧,帮助开发者高效完成项目开发。

weixin_26897585的博客 236

Redis键过期策略、内存淘汰策略详解

1、设置过期时间 expire key time(s)–这是最常用的方式 setex(String key, int seconds, String value)–字符串独有的方式 注意: 除了string独有设置过期时间方法,其他类型都需要依靠expire方法来设置时间 如果没有设置时间,那缓存就是永不过期 如果设置了过期时间,之后又想让缓存永不过期,使用persist key 2、三种...

JavaEdge全是干货的技术号 1710

Unity UI适配实战:从Canvas Scaler到主流游戏适配方案解析

本文深入解析Unity UI适配的核心技术,重点介绍Canvas Scaler组件的关键参数如Reference Resolution和Screen Match Mode,并提供主流游戏适配方案实战分析。通过九宫格拉伸、动态调整等技巧,帮助开发者解决多设备适配难题,提升游戏UI在不同分辨率下的表现。

weixin_29001419的博客 971

Spring boot RedisTemplate概述

/ 操作字符串// 操作set// 操作有序set// 操作list// 操作hash。

qq_30436011的博客 4984

【更新中260712】CRAIC中国机器人及人工智能大赛-机器人应用赛-智能产线赛项-备赛指南

2025年第二十七届中国机器人及人工智能大赛现已闭幕结合我小组自身备赛情况及见闻感悟,现整理成章。

EDUCN 938

基于MATLAB的小波包分解(WPD)算法详解

本文详细介绍了基于MATLAB的小波包分解(WPD)算法。WPD作为信号处理领域的重要技术,继承并发展了小波分析的优点,通过正交镜像滤波器组将信号分解为不同频率子带,形成完整的二叉树结构。相比传统小波变换,WPD具有更精细的频带划分、自适应基选择能力和更高的灵活性,特别适合分析非平稳信号。文章系统阐述了WPD的数学原理、算法实现流程及其在机械故障诊断、生物医学信号处理等领域的应用。通过MATLAB代码示例展示了WPD的具体实现方法,并分析了不同参数设置对分解效果的影响,为工程实践提供了有价值的参考。

qq_42212808的博客 292

【Redis】Redis实现排行榜及相同积分按时间排序

在日常的开发中,经常会碰到需要对用户的分值等进行排序,比如在游戏里面需要对战斗力进行排行,在组队活动中需要对各个队伍的贡献值进行排行,在微信中需要对各个好友的步数进行排行,此时一般会选择redis的有序集合对用户的分数进行存储,从而实现排行榜的需求,但是不同的场景排行榜的方式也略有不同,以下根据自己日常的开发进行了一下归纳总结。需求:对组队活动中各个队伍的贡献值进行排行。

morris 2万+

Word2vec核心模型精讲:CBOW与Skip-gram

Word2vec是Google提出的词向量模型,通过CBOW和Skip-gram两种神经网络架构将词汇映射到低维向量空间。CBOW通过上下文预测中心词,训练速度快但高频词表现更好;Skip-gram则相反,通过中心词预测上下文,适合处理生僻词。为解决softmax计算效率问题,Word2vec引入基于哈夫曼树的Hierarchical Softmax优化技术,将复杂度从O(V)降至O(logV)。文章详细解析了两种模型的原理差异,并演示了哈夫曼树的构造过程及其在词向量训练中的关键作用,这种结合词频的优

Trisyp的博客 530

Redis--Redis基本事务与其他命令

所以,如果假如事务在执行过程中出错了,你需要手动将数据库恢复到事务执行前的状态。此时我们想根据任务的创建时间将任务队列中的所有任务进行排序,以便于调整任务的优先级,那么我们就可以通过。参数只能有一个),你可以根据需求从不同的键中取出需要的值,以一次性取出所有需要的数据,降低客户端与。的最小执行单位,一个事务中的命令要么都执行,要么都不执行。命令,我们还有很多没有说到的知识,如果你需要使用到更高级的排序功能,那么请参考。方法创建一个事务,再将所有需要执行的命令都放进这个事务中,最后通过。

nuhao的博客 870

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

redis基础操作之其他命令

Redis 的 基本 事务( basic transaction) 需要 用到 MULTI 命令 和 EXEC 命令, 这种 事务 可以 让 一个 客户 端 在 不被 其他 客户 端 打断 的 情况下 执行 多个 命令。和 关系 数据库 那种 可以 在 执行 的 过程中 进行 回 滚( rollback) 的 事务 不同, 在 Redis 里面, 被 MULTI 命令 和 EXEC 命令 包围 的 所有 命令 会 一个 接 一个 地 执行, 直到 所有 命令 都 执行 完毕 为止。

</SCORPION> 176

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Redis实战学习总结(二)---Redis命令

2.1 字符串 在redis里,字符串可以存储以下3种类型的值: 字节串(byte string) 整数 浮点数 用户可以对存储着整数或者浮点数的字符串进行自增或者自减操作,在有需要的时候,Redis还会将整数转换成浮点数。如果用户对一个不存在的键或者一个保存了空串的键执行自增或者自减操作,那么Redis在执行操作时会将这个键的值当做0来处理。如果用户尝试对一个值无法被解释为整数或者浮点数的字...

一个胖子IT男的博客 290

第3章 Redis命令——阅读笔记

第3章 Redis命令 3.1 字符串 Redis的字符串就是一个由字节组成的序列。 在Redis中,字符串可以存储以下3种类型的值 字符串 整数 浮点数 用户可以通过给定一个任意的数值,对存储着整数或者浮点数的字符串执行自增或者自减操作。在有需要的时候,Redis还会将整数转换成浮点数。整数的取值范围和系统的长整数的取值范围相同,而浮点数的取值范围和精度则与IEEE 754标准的双精度浮点数相同。 命令 用例和描述 INCR INCR key-name——将键存储的值加1 DECR

qq_36553387的博客 254

[redis] 数据特性简单实验

位图 由bit位组成的数组,实际的底层数组类型是字符串,而字符串的本质是二进制大对象,所以将其视作位图,位图存储的是boolean指,一定程度上可以减少存储空间。 127.0.0.1:6379> setbit "users_tried" 100 1 -- 设置位图指定偏移量的比特位的值 (integer) 0 127.0.0.1:6379> getbit "users_o...

weixin_34082177的博客 190

Redis入门指南之进阶

事务 redis中的事务(transaction)是一组命令的集合。 事务同命令一样都是redis的最小执行单位。 事务的原理:先将属于一个事务的命令发送给redis,然后再让redis依次执行这些命令。 例如: MULTI SADD ... ... EXEC WATCH 可以监控一个或多个键,一旦

娜娜的专栏 444

003 第三章 Redis命令

这里写目录标题字符串命令、列表命令和集合命令字符串命令列表命令集合命令散列命令和有序集合命令发布命令和有序集合命令其他命令 字符串命令、列表命令和集合命令 字符串命令 命令 用例和描述 Redis中的自增命令和自减命令 incr incr key-name将键存储在值加上1 decr decr key-name将键存储的值减去1 incrby incrby key-name amount将键存储的值加上整数amount decrby decrby key-name amou

Blmq的博客 156

Redis 高级特性(1)—— 事务 过期时间 排序

1. Redis 高级特性 —— 事务 事务概念 Redis 中的事务 (transaction)是一组命令的集合。事务同命令一样是 Redis 的最小执行单位,一个事务中的命令要么都执行,要么都不执行。 事务的原理是先将属于一个事务的命令发送给 Redis,然后再让 Redis 依次执行这些命令。 事务命令 命令 说明 watch key[key…] 锁定key,直到执行了mul...

wohu1104的专栏 749

Redis事务、过期时间、排序、消息、管道

1:事务,Redis中的事务是一组命令的集合,事务同命令一样都是Redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。   MULTI开启事务,EXEC关闭事务 redis&gt; MULTI redis&gt; SET key1 value1 redis&gt; QUEUED redis&gt; SET key2 value2 redis&gt; QUEUED ...

zk_chs的博客 417

redis-事务/过期时间/排序/发布-订阅

事务就是原子性。 先multi指令,让redis进入事务过程,然后接下来的指令都是事务范围的,以exec来结束事务过程。 事务过程中的错误处理。 1、语法错误 只要事务指令中有一条指令有语法错误,exec之后所有的指令都不会执行。 2、运行错误。 检查不出错误,只有在运行的时候才会出错,比如数据类型的不恰当运行。 redis不提供回滚机制,所以会将正确的指令执行了,运行错误的指令就报...

dgh112233的博客 393

Redis从入门到精通(2):事务、过期时间、sort以及队列

Redis事务 Redis中的事务是一组命令的集合,事务最基本的特性就是原子性。一个事务中的命令要么全都执行,要么全部不执行。银行转账是理解事务最常见的一个例子,我已经在以前的文章中讲过很多次事务,这里就不再细讲,我们直接来看Redis的事务怎样来使用。 Redis事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次执行这些命令。 例如: MULTI SADD te...

春水上行的博客 941

redis使用(三):事务,过期时间,排序,订阅/发布,持久化

redis 事务 过期时间 排序 订阅/发布 持久化

悟空 1785

redis进阶:事务|过期|缓存|排序|空间节省

redis进阶 之前已经讲过redis基础,即redis五种数据类型及相关命令,链接如下: redis五种数据类型及相关命令 接下来我们讲redis进阶篇,至此我们算是真正踏入了redis的世界 大致上我们分为以下模块: 事务 监控(WATCH命令) 过期 缓存 排序(SORT命令) 消息通知 空间节省(内部编码方式) ok,下面进入正题 事务 概述 定义: 一组命令的集合 原理: 先将属于一...

black1006160920的博客 789

Redis原理浅析(一):Redis基本数据类型、事务以及排序

文章目录什么是RedisRedis的数据类型String :List:Sethashzset事务错误处理:Watch命令:控制键的存活时间排序 什么是Redis redis是一款优秀的nosql(非关系型),key-vlaue,内存级别的数据库!redis是单线程,操作是安全的! key-value:字典数据结构,“key”是键名,“value”是键值,在字典中我们可以获取或设置键名对应的键值,也可以删除一个键。 内存存储:redis数据库中所有的数据都存储在内存中。由于内存的读写速度远快于硬盘,因此r

旭小爷的博客 585
上一篇: Django的queryset的特性及使用优化(带实例)
下一篇: 队列 管道 python使用redis
爱学习的狮王
博客等级 码龄9年 109粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习的狮王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值