三、redis之strings类型

news/2024/11/15 17:48:36/文章来源:https://www.cnblogs.com/shigongp/p/18415995

strings是redis中使用最多的类型。

redis官网中是这么描述strings的:

Redis strings store sequences of bytes, including text, serialized objects, and binary arrays. 

可以看到Redis strings保存的是sequences of bytes,也就是字节序列。不仅可以保存字符串,而且还可以保存二进制数据,比如图片,音频,视频等。可以看到Redis strings可以满足大多数场景。

现在来看下操作strings的命令:

因为存的是字符串和数字,同一个操作会产生不同的影响,所以对存的值分类。

存的值是字符串

get

get命令获取key对应的值。

set

SET key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]

set命令将key和value绑定关系并设置到内存中。

set命令还有NXXX选项。NX表示当key对应的值不存在时执行的命令才会执行。XX表示key对应的值存在时执行的命令才会执行。

key1对应的值已存在,所以set加NX命令不会改变数据。

key2没有数据时,set加NX才会实际执行。

当key1有数据时,set加XX才会实际执行。

当key3没有数据时,set加XX不会实际执行。

set命令后面的EX seconds|PX milliseconds是加过期时间,EX是以秒为单位,PX是以毫秒为单位。

数据过期后就获取不到了。

setnx

SETNX key value

setnx命令和set命令加nx选项作用相同。

setex

SETEX key seconds value

setex命令和set命令加EX seconds选项相同。

PSETEX

PSETEX key milliseconds value

setex命令和set命令加PX milliseconds选项相同。

setex,PSETEX执行后等数据过期后都查询不到。

get命令只能一次获取一个key的数据,如果想要一次获取多个key的数据,可以使用mget命令。

有同时获取多个key的命令,应该也有同时设置多个key,value的命令,那就是mset

MSET key value [key value ...]

可以看到mset命令要比set命令简单,没有set命令的选项。

msetnx

MSETNX key value [key value ...]

当所有的key都不存在时才会执行命令。

当其中一个key存在数据时不会执行命令。

GETSET

GETSET key value

GETSET返回执行此命令key之前的值,并且设置新值value。

APPEND

APPEND key value

APPEND将value附加到原先的值之后。如果原先没有值就创建它。

GETEX

GETEX key [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|PERSIST]

GETEX获取值并设置过期时间。EX seconds|PX milliseconds与set命令的含义相同。

GETDEL

GETDEL key

返回value并删除key。

GETRANGE

GETRANGE key start end

返回start和end之间的子串。

如果start大于end则返回空串.start和end可以使用负数.-1表示最后一个位置.

只要start和end的范围可以在key之间取到值就可以.从上面可以看到-10已经超过key4的长度了,但还是可以正常返回.

SUBSTR

SUBSTR key start end

SUBSTR和GETRANGE命令相同,但是SUBSTR只能使用0和正整数,不能使用负数.

SETRANGE

SETRANGE key offset value

SETRANGE从offset开始将数据覆盖为value.如果offset超过key的长度,那么超出的部分设置为空字符串.

STRLEN

STRLEN返回key对应值的长度.

LCS

LCS key1 key2 [LEN] [IDX] [MINMATCHLEN min-match-len] [WITHMATCHLEN]

返回key1,key对应的值的最长公共子序列.比如"foo"和"fao"的最长公共子序列是"fo",不要求连续.LCS对于评估两个字符串的相似程度非常有用。字符串可以代表很多东西。例如,如果两个字符串是DNA序列,LCS将提供两个DNA序列之间相似性的度量。如果字符串表示某个用户编辑的某些文本,则LCS可以表示新文本与旧文本的差异,以此类推。

返回匹配的文本:

只返回匹配的长度:

有时还需要返回匹配的位置:

因为匹配算法是从后往前匹配的,所以要反着看.

2) 1) 1) (integer) 22) (integer) 32) 1) (integer) 02) (integer) 1

2,3表示key1中第一个连续匹配的字符串的开始下标和结束下标(从0开始).0,1表示key2中第一个连续匹配的字符串的开始下标和结束下标(从0开始)

要将匹配列表限制为给定最小长度的匹配:

最后还带有匹配长度:

英文采用的是ASCII编码,用一个字节可以表示所有的符号,但是对于中文则不同,要用多字节表示.比如:

所以对于中文,操作每个字符时与操作每个字节是不同的,需要注意.

存的值是数字

因为数字是可以运算的.所以要对数字特殊处理.redis提供的数字操作很简单.

INCR key
INCRBY key increment
INCRBYFLOAT key increment
DECR key
DECRBY key decrement

INCR,INCRBY,INCRBYFLOAT是加法运算,DECR,DECRBY是减法运算.INCR,DECR是加一或减一,INCRBY,DECRBY加或减后面给定的整数,INCRBYFLOAT加一个给定的小数.

当INCRBY,DECRBY的参数不是整数时会报错.

当然虽然是整数,但是也可以使用操作字符串的命令

存的值是二进制数据

在控制台运行:

cat 1.jpg | redis-cli -x set key6

将1.jpg的内容存到key6中.

也可以使用操作字符串的命令,最好还是采用专业的工具操作.

编码方式

最后来看下字符串在redis中采用的编码方式:

如果是数字则采用int编码,如果字符串的长度小于等于44则采用embstr,否则采用raw.那为什么要采用不同的编码呢? 主要是为了节省使用的空间.比如数字23,采用int编码会保存为C语言的long类型,一般是4字节或8字节,采用embstr则是3字节,C语言的字符串还需结尾字符\0.看起来没有节省空间,但是当数字特别大时,比如123456789,就看出差距了.

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

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

相关文章

排队论——数学模型和绩效指标精解

排队论最早由丹麦工程师Agner Krarup Erlang于1910年提出,旨在解决自动电话系统的问题,成为话务理论的奠基石。Erlang通过研究电话呼叫的随机到达和服务时间,推导出著名的埃尔朗电话损失率公式,用于计算电话系统的呼叫阻塞率,揭示了排队现象的本质。Erlang之后,排队论得到…

本地文件包含漏洞详解与CTF实战

1. 本地文件包含简介 1.1 本地文件包含定义 本地文件包含是一种Web应用程序漏洞,攻击者通过操控文件路径参数,使得服务器端包含了非预期的文件,从而可能导致敏感信息泄露。 常见的攻击方式包括:包含配置文件、日志文件等敏感信息文件,导致信息泄露。 包含某些可执行文件或…

代码随想录算法 - 二叉树6

题目1235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖…

6、函数的声明

程序是一行行执行,我们可以在前面进行函数声明,然后将函数的定义放在程序末尾。 声明可以写多次,但是定义只能写一次。

如何基于Java解析国密数字证书

一、说明 随着信息安全的重要性日益凸显,数字证书在各种安全通信场景中扮演着至关重要的角色。国密算法,一、说明 随着信息安全的重要性日益凸显,数字证书在各种安全通信场景中扮演着至关重要的角色。国密算法,作为我国自主研发的加密算法标准,其应用也愈发广泛。然而,在…

Windows应急响应-个人整理

个人总览-仍待完善Windows应急响应整理(一)参考 1.NOPTeam的手册链接 2.fox-yu的博客(思路很清晰,对我这个小白来说很友好)1.整体思路 1.1常见事件类型(不完整、待补充)网络协议攻击:拒绝服务攻击:DDos、CC攻击、泛洪攻击等。链接 DNS劫持 ARP欺骗web入侵:webshell 网页挂马…

视野修炼-技术周刊第101期 | 垂直居中

① align-content - 垂直居中普通元素 ② up mode - 一键隐藏 Chrome 插件 ③ Chrome 性能面板新功能 ④ k-colors.js - 图片主色提取 ⑤ 英:优化JS性能的一些技巧 ⑥ 英:Web 的剪贴板,如何存储不同类型的数据 ⑦ 英:不简单的 js 入门教程 ⑧ Peter Cat - GitHub 仓库智能答…

06: 抽象工厂模式

提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类1. 案例 在Access和SQL server分别插入User表和Department表 2. 抽象工厂模式结构 - 抽象产品(AbstractProduct):所有产品的基类,提供产品类的公共方法struct User {std::string m_sName = "";…

南沙C++信奥老师解一本通题 1371:看病

​【题目描述】有个朋友在医院工作,想请BSNY帮忙做个登记系统。具体是这样的,最近来医院看病的人越来越多了,因此很多人要排队,只有当空闲时放一批病人看病。但医院的排队不同其他排队,因为多数情况下,需要病情严重的人优先看病,所以希望BSNY设计系统时,以病情的严重情…

堪称最优秀的 Docker 可视化管理工具 ——Portainer

Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理 Docker 环境,包括单机环境和集群环境。随着 Docker 内实例越来越多,就得涉及到监控以及统计的需求:有多少个容器?运行的有几个?有哪些容器 CPU 使用率低?... Portainer 是一款轻量级的应用,它提供了图…

分布式数据库中间件:MyCat 和 ShardingSphere

分布式数据库中间件 用于实现 分库、分表、分片、分布式事务、读写分离 等。 本文 是 调查 MyCat 和 ShardingSphere 两款 中间件 的一些信息汇总。本文时间:2024年9月。MyCat Mycat数据库分库分表中间件。ben发布于博客园 http://www.mycat.org.cn github-Mycat1 https://gi…

Python 遭遇 ProxyError 问题记录

本内容复制知乎的一个贴子,在此只做下记录及参考和学习,原链接地址: 最近遇到的一个问题,在搞清楚之后才发现这么多年的 HTTPS_PROXY 都配置错了! 起因 想用 Python 在网上下载一些图片素材,结果 requests 报 requests.exceptions.ProxyError,具体的错误信息见下面。当然…