[Redis]String类型

基本命令

set命令

将 string 类型的 value 设置到 key 中。如果 key 之前存在,则覆盖,无论原来的数据类型是什么。之前关于此 key 的 TTL 也全部失效。

set key value [expiration EX seconds|PX milliseconds] [NX|XX]

 选项[EX|PX]

EX seconds⸺使用秒作为单位设置 key 的过期时间。

PX milliseconds⸺使用毫秒作为单位设置 key 的过期时 

 (设置key1有10秒存活时间,值为5000)

(设置key2 为111,存活时间10秒)

上面两种写法都可以

选项[NX|XX]

NX ⸺只在 key 不存在时才进行设置,即如果 key 之前已经存在,设置不执行。

XX ⸺只在 key 存在时才进行设置,即如果 key 之前不存在,设置不执行。

也就是说,NX是用来插入新数据,XX用来更新已有数据 

 (先设置key1为111,然后再设置key1以NX方式为222,发现返回nil,数据还是111,数据设置失败)

 (如果这时候在以XX方式设置key1就可以设置成功。如果key2不存在,以XX方式key2,返回nil,插入失败)

get命令

获取 key 对应的 value。如果 key 不存在,返回 nil。如果 value 的数据类型不是 string,会报错。 语法:

GET key

mset命令

⼀次性设置多个 key 的值 。返回值永远是 OK

MSET key value [key value ...] 

mget命令 

⼀次性获取多个 key 的值。如果对应的 key 不存在或者对应的数据类型不是 string,返回 nil。

mget/mset对比get/set

 使用 mget / mset 由于可以有效地减少了网络时间,所以性能相较更高。

使用批量操作,可以有效提高业务处理效率,但是要注意,每次批量操作所发送的键的数量也不 是无节制的,否则可能造成单⼀命令执行时间过长,导致 Redis 阻塞。

计数命令

incr命令

将 key 对应的 string 表示的数字加一。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的 string 不是一个整型或者范围超过了 64 位有符号整型,则报错。

incr key

 

(先设置key为1,get到的key为1.然后对key进行incr操作,key变为2)

incrby命令 

将 key 对应的 string 表示的数字加对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的 string 不是一个整型或者范围超过了 64 位有符号整型,则报错。

incrby key decrement 

 

 (对key增加10)

decr命令

将 key 对应的 string 表示的数字加一。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的 string 不是一个整型或者范围超过了 64 位有符号整型,则报错。

decr key

decrby命令

DECRBY key decrement 

 

(这些相关的命令都可以加/减上一个负数)

 incrbyfloat命令

将 key 对应的 string 表示的浮点数加上对应的值。如果对应的值是负数,则视为减去对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的不是 string,或者不是⼀个浮点数,则报错。允许采用科学计数法表示浮点数。

incrbyfloat key increment

 

字符串操作命令

append命令

如果 key 已经存在并且是一个 string,命令会将 value 追加到原有 string 的后边。如果 key 不存在, 则效果等同于 SET 命令。 返回值:追加完成之后 string 的长度。

append key value

getrange命令

返回 key 对应的 string 的子串,由 start 和 end 确定(左闭右闭)。可以使用负数表示倒数。-1 代表倒数第一个字符,-2 代表倒数第而个,其他的与此类似。超过范围的偏移量会根据 string 的长度调整成正确的值。返回值:string 类型的子串

getrange key start end

 

 setrange命令

 覆盖字符串的一部分,从指定的偏移开始。

setrange key offset value 

 

(如果在一个不存在的key2里使用setrange命令,会在偏移量前面插入一个字节,就是 0x00)

(\0x00中,0x表示十六进制,00表示十六进制一个空字符)

strlen命令

获取 key 对应的 string 的长度。当 key 存放的类型不是 string 时,报错

strlen key

(strlen操作不存在的key时,返回0)

(类型不是string时,报错) 

内部编码

字符串类型的内部编码有 3 种:

int:8 个字节的长整型。

embstr:小于等于 39 个字节的字符串。

raw:大于 39 个字节的字符串。

(这个39这个数字,是可以配置的,根据具体的使用场景设置不同的数字 )

Redis 会根据当前值的类型和长度动态决定使用哪种内部编码实现。

 使用场景

缓存功能(Cache)

比较典型的缓存使用场景,其中 Redis 作为缓冲层,MySQL 作为存储层,绝大部分请求的数据都是从 Redis 中获取。由于 Redis 具有支撑高并发的特性,所以缓存通常能起到加速读写和降低后端压力的作用。 

通过增加缓存功能,在理想情况下,每个用户信息,一个小时期间只会有一次 MySQL 查询,极大地提升了查询效率,也降低了 MySQL 的访问数。

与 MySQL 等关系型数据库不同的是,Redis 没有表、字段这种命名空间,⽽且也没有对键名 有强制要求(除了不能使用一些特殊字符)。但设计合理的键名,有利于防⽌键冲突和项⽬ 的可维护性,比较推荐的方式是使用 "业务名:对象名:唯⼀标识:属性" 作为键名。例如 MySQL 的数据库名为 vs,用户表名为 user_info,那么对应的键可以用"vs:user_info:6379"、"vs:user_info:6379:name" 来表示

计数功能(Counter)

 许多应用都会使用 Redis 作为计数的基础工具,它可以实现快速计数、查询缓存的功能,同时数 据可以异步处理或者落地到其他数据源。如图所示,例如视频网站的视频播放次数可以使用 Redis 来完成:用户每播放一次视频,相应的视频播放数就会自增 1。

共享会话(Session)

一个分布式 Web 服务将用户的 Session 信息(例如用户登录信息)保存在各自的服务器中,但这样会造成一个问题:出于负载均衡的考虑,分布式服务会将用户的访问请求均衡到不同的服务器上,并且通常无法保证用户每次请求都会被均衡到同一台服务器上,这样当用户刷新一次访问是可能会发现需要重新登录,这个问题是用户无法容忍的。 

为了解决这个问题,可以使用 Redis 将用户的 Session 信息进行集中管理,如图,在这种模式下,只要保证 Redis 是高可用和可扩展性的,无论用户被均衡到哪台 Web 服务器上,都集中从 Redis 中查询、更新 Session 信息。 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

官宣!马斯克的xAI获60亿美元融资,估值240亿美元

5月27日晚,马斯克旗下的大模型平台xAI在官网宣布获得60亿美元B轮融资,估值240亿美元。本次主要投资者包括Valor Equity Partners、红杉资本、国王控股、沙特王子-Bin Talal、Vy Capital等。 这也是大模型赛道史上最高单笔融资之一,超过Anthr…

安全基础二

一、插件漏洞 统计使用了哪些插件这些插件有版本更新嘛检测这些插件是否存在已知漏洞 二、权限提升和持久化 SSRF(Server-Side Request Forgery,服务器端请求伪造) 想象一下,你是一个公司的内部员工(服务器&#x…

主副坐标轴作图(即双坐标轴)

主副坐标轴显示: import numpy as np from matplotlib import pyplot as plt plt.rcParams[font.sans-serif][SimHei] plt.rcParams[axes.unicode_minus] False xnp.arange(0.1,10,0.01) data1np.exp(x) data2np.log(x) fig,ax1plt.subplots() #subplots一定要带s…

linux安装mysql后,配置mysql,并连接navicate软件

Xshell连接登陆服务器 输入全局命令 mysql -u root -p 回车后,输入密码,不显示输入的密码 注意mysql服务状态,是否运行等 修改配置文件my.cnf,这里没找到就找my.ini,指定有一个是对的 find / -name my.cnf 接下…

6岁开始学习打字,10岁学懂文字编程

​你们有没有想过打字速度会影响Coding 编程能力? 疫情期间,全国中小学均不定期停止面授课程,改为网上教学。顷刻之间,电脑、智能手机等即时通讯软件成为每日学习的「良师益友」,常伴左右。 同时,学生也由…

【管理咨询宝藏116】某大型国有集团公司战略落地保障方案

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏116】某大型国有集团公司战略落地保障方案 【格式】PDF版本 【关键词】战略落地、大型国企、战略报告 【核心观点】 - 资产规模以提高资产质量、…

C++入门 ros自定义msg话题通信

一、 开发环境 ubuntu20.04 ros版本noetic 参考视频 https://www.bilibili.com/video/BV1Ci4y1L7ZZ/?p52&spm_id_from333.1007.top_right_bar_window_history.content.click&vd_source4cd1b6f268e2a29a11bea5d2568836ee 二、 编写msg文件 在功能包下面创建msg文件夹…

UI卡片设计入门:一步步教你成功逆袭

UI卡片设计是目前流行的UI设计风格。UI卡片设计是对网页中的卡进行分析和重构的设计,那么在设计UI卡片时应该注意什么呢?目前流行哪种UI卡片设计?收集这个UI卡片设计避坑指南,菜鸟也可以反击成UI设计老板~ UI卡片是什么&#xff…

Unity射击游戏开发教程:(28)敌人被摧毁时掉落的能量提升

在这篇文章中,我将介绍如何在敌人被摧毁时产生能量提升。 首先,有一个生成管理器,负责生成敌人和能量提升。我正在对其进行转换,以便当敌人被摧毁时,有可能会掉落能量。本文将仅介绍当敌人被摧毁时掉落的能量道具。我将介绍为电源添加一个平衡的生成系统。 Spawn Manager…

降压芯片SL3036耐压100V 电机驱动板应用48-85V降压12V 1A以内

降压芯片SL3036以其卓越的耐压特性,能够在高达100V的电压环境下稳定运行,为电机驱动板等应用提供了强大的电源支持。这款芯片在电机驱动板中发挥着至关重要的作用,特别是在那些需要48-85V宽范围输入电压并降压至稳定12V输出的场景中&#xff…

【MySQL数据库】:MySQL内置函数

目录 日期函数 current_date 函数 current_time 函数 current_timestamp 函数 now 函数 date 函数 date_add 函数 date_sub 函数 datediff 函数 字符串函数 charset 函数 concat 函数 instr 函数 ucase 函数 lcase 函数 left 函数 length 函数 replace…

作为一名前端工程师,该如何控制高并发请求呢?「如果有更好的方案,欢迎讨论」

假如现在有几十、上百个请求,我们该如何去控制这么高的并发呢? 给你一分钟时间,稍作思考 ~ 🤔 此场景有很多,比如 图片或文件批量下载、RSSHub高速抓取内容。。。 第一想法是不是请求池!&…

代码随想录-算法训练营day46【动态规划08:单词拆分、多重背包!背包问题总结篇!】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part08● 139.单词拆分 ● 关于多重背包,你该了解这些! ● 背包问题总结篇! 详细布置 关于 多重背包,力扣上没有相关的题目,所以今天大家的…

unity回到低版本报错解决

用高版本2022打开过后的再回到2020就报了一个错。 报错如下: Library\PackageCache\com.unity.ai.navigation1.1.5\Runtime\NavMeshSurface.cs 看了一下是Library,然后我删除了整个Library文件夹,重启启动生成Library,然后还是…

调试面对面翻译小程序

调试面对面翻译小程序 文章目录 调试面对面翻译小程序预览1.拉取项目2.在微信开发者工具打开使用 微信版本要求微信同声传译插件支持功能 此demo用于学习 预览 1.拉取项目 git clone https://github.com/Tencent/Face2FaceTranslator或者(加速镜像) git …

环境土壤物理模型HYDRUS1D/2D/3D建模方法与案例教程

原文链接:环境土壤物理模型HYDRUS1D/2D/3D建模方法与案例教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247605540&idx6&sn22a128de401e146d21c9f2487d589a3b&chksmfa821cc3cdf595d54e46be8247a67eda290349039c85b8e8542aaf34509dae0bb…

2024年zoom会议受主持人账户限制影响,无法加入会议。(错误代码13215)

问题一、老师,你好!我的zoom账户,刚开始注册后可以登录,但是现在登录不了了。代码1044。其次,我如果通过网页版设置会议号,别人也加入不了。代码13215。 这两个问题一般会同时出现。登录失败。(错误代码:1044)一般是创…

一键秒删TXT文本符号,释放工作效率新高度,轻松应对海量文本处理挑战!

在这个信息爆炸的时代,我们每天都会面对海量的文本信息。而在处理这些文本时,你是否曾经因为各种符号的干扰而头疼不已?现在,我们为你带来了一款高效批量处理工具,它能够一键删除TXT文本中的符号,让你的工作…

Oracle dblink 发现Network 等待事件的分析 enq: KO - fast object checkpoint

所有的sql 通过dblink 查询全部等待中, 同一个SQL 20多个session 在跑,等待事件network,可能怀疑是不是网络断开了,导致没有返回 执行sql 如下: BEGIN Xdblink ; END; 去到dblink 所在的db,发现20多个sql在…

leetcode 1264页面推荐(postgresql)

需求 朋友关系列表: Friendship ---------------------- | Column Name | Type | ---------------------- | user1_id | int | | user2_id | int | ---------------------- 这张表的主键是 (user1_id, user2_id)。 这张表的每一行代表着 user1_id 和 user2_id 之间…