redis数据结构简介及Strings

CTF MISC 自动化工具链搭建:Python 3.12 + 010 Editor + Binwalk 实战配置指南 作为脚本引擎提供跨平台支持,其新增的tomllib模块能直接解析CTF中常见的TOML配置文件,而优化后的模式匹配语法可简化二进制数据分析逻辑。以下是主要工具的功能定位:工具名称作用领域关键特性010 Editor二进制文件分析模板化解析、批量修复文件头尾Binwalk文件提取与特征识别递归提取嵌套压缩包、签名扫描Steghide图像音频隐写分析密码爆破、元数据提取Wireshark网络流量分析协议解析、流重组。 阅读详情

Redis的数据结构

redis是一种高级的key:value存储系统,其中value支持五种数据类型:

1.字符串(strings)

2.字符串列表(lists)

3.字符串集合(sets)

4.有序字符串集合(sorted sets)

5.哈希(hashes)

而关于key,有几个点要提醒大家:

1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;

2.key也不要太短,太短的话,key的可读性会降低;

3.在一个项目中,key最好使用统一的命名模式,例如user:10000:passwd。

Redis数据结构之Strings

命令列表

命令原型

时间复杂度

命令描述

返回值

APPENDkeyvalue

O(1)

如果该Key已经存在,APPEND命令将参数Value的数据追加到已存在Value的末尾。如果该Key不存在,APPEND命令将会创建一个新的Key/Value。

追加后Value的长度。

DECRkey

O(1) 

将指定Key的Value原子性的递减1。如果该Key不存在,其初始值为0,在decr之后其值为-1。如果Value的值不能转换为整型值,如Hello,该操作将执行失败并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。

递减后的Value值。

INCRkey

O(1) 

将指定Key的Value原子性的递增1。如果该Key不存在,其初始值为0,在incr之后其值为1。如果Value的值不能转换为整型值,如Hello,该操作将执行失败并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。 

递增后的Value值。 

DECRBYkey decrement  

O(1)  

将指定Key的Value原子性的减少decrement。如果该Key不存在,其初始值为0,在decrby之后其值为-decrement。如果Value的值不能转换为整型值,如Hello,该操作将执行失败并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。 

减少后的Value值。

INCRBYkey increment  

O(1) 

将指定Key的Value原子性的增加increment。如果该Key不存在,其初始值为0,在incrby之后其值为increment。如果Value的值不能转换为整型值,如Hello,该操作将执行失败并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。 

增加后的Value值。

GETkey 

O(1) 

获取指定Key的Value。如果与该Key关联的Value不是string类型,Redis将返回错误信息,因为GET命令只能用于获取string Value。 

与该Key相关的Value,如果该Key不存在,返回nil。

SETkey value 

O(1) 

设定该Key持有指定的字符串Value,如果该Key已经存在,则覆盖其原有值。

总是返回"OK"。

GETSETkey value

O(1) 

原子性的设置该Key为指定的Value,同时返回该Key的原有值。和GET命令一样,该命令也只能处理string Value,否则Redis将给出相关的错误信息。

返回该Key的原有值,如果该Key之前并不存在,则返回nil。

STRLENkey

O(1)

返回指定Key的字符值长度,如果Value不是string类型,Redis将执行失败并给出相关的错误信息。

返回指定Key的Value字符长度,如果该Key不存在,返回0。

SETEXkey seconds value

O(1)

原子性完成两个操作,一是设置该Key的值为指定字符串,同时设置该Key在Redis服务器中的存活时间(秒数)。该命令主要应用于Redis被当做Cache服务器使用时。

 

SETNXkey value 

O(1) 

如果指定的Key不存在,则设定该Key持有指定字符串Value,此时其效果等价于SET命令。相反,如果该Key已经存在,该命令将不做任何操作并返回。

1表示设置成功,否则0。

SETRANGEkey offset value 

O(1) 

替换指定Key的部分字符串值。从offset开始,替换的长度为该命令第三个参数value的字符串长度,其中如果offset的值大于该Key的原有值Value的字符串长度,Redis将会在Value的后面补齐(offset - strlen(value))数量的0x00,之后再追加新值。如果该键不存在,该命令会将其原值的长度假设为0,并在其后添补offset个0x00后再追加新值。鉴于字符串Value的最大长度为512M,因此offset的最大值为536870911。最后需要注意的是,如果该命令在执行时致使指定Key的原有值长度增加,这将会导致Redis重新分配足够的内存以容纳替换后的全部字符串,因此就会带来一定的性能折损。 

修改后的字符串Value长度。

GETRANGEkey start end

O(1) 

如果截取的字符串长度很短,我们可以该命令的时间复杂度视为O(1),否则就是O(N),这里N表示截取的子字符串长度。该命令在截取子字符串时,将以闭区间的方式同时包含start(0表示第一个字符)和end所在的字符,如果end值超过Value的字符长度,该命令将只是截取从start开始之后所有的字符数据。

子字符串 

SETBITkey offset value 

O(1) 

设置在指定Offset上BIT的值,该值只能为1或0,在设定后该命令返回该Offset上原有的BIT值。如果指定Key不存在,该命令将创建一个新值,并在指定的Offset上设定参数中的BIT值。如果Offset大于Value的字符长度,Redis将拉长Value值并在指定Offset上设置参数中的BIT值,中间添加的BIT值为0。最后需要说明的是Offset值必须大于0。 

在指定Offset上的BIT原有值。

GETBITkey offset 

O(1) 

返回在指定Offset上BIT的值,0或1。如果Offset超过string value的长度,该命令将返回0,所以对于空字符串始终返回0。

在指定Offset上的BIT值。 

MGETkey [key ...] 

O(N) 

N表示获取Key的数量。返回所有指定Keys的Values,如果其中某个Key不存在,或者其值不为string类型,该Key的Value将返回nil。

返回一组指定Keys的Values的列表。

MSETkey value [key value ...] 

O(N) 

N表示指定Key的数量。该命令原子性的完成参数中所有key/value的设置操作,其具体行为可以看成是多次迭代执行SET命令。 

该命令不会失败,始终返回OK。  

MSETNXkey value [key value ...] 

O(N)

N表示指定Key的数量。该命令原子性的完成参数中所有key/value的设置操作,其具体行为可以看成是多次迭代执行SETNX命令。然而这里需要明确说明的是,如果在这一批Keys中有任意一个Key已经存在了,那么该操作将全部回滚,即所有的修改都不会生效。

1表示所有Keys都设置成功,0则表示没有任何Key被修改。

 

实例

有人说,如果只使用redis中的字符串类型,且不使用redis的持久化功能,那么,redis就和memcache非常非常的像了。这说明strings类型是一个很基础的数据类型,也是任何存储系统都必备的数据类型。

我们来看一个最简单的例子:

代码如下:

set mystr "hello world!" //设置字符串类型

get mystr //读取字符串类型

 字符串类型的用法就是这么简单,因为是二进制安全的,所以你完全可以把一个图片文件的内容作为字符串来存储。

另外,我们还可以通过字符串类型进行数值操作:

代码如下:

127.0.0.1:6379> set mynum "2"

 OK

 127.0.0.1:6379> get mynum

 "2"

 127.0.0.1:6379> incr mynum

 (integer) 3

 127.0.0.1:6379> get mynum

 "3"

看,在遇到数值操作时,redis会将字符串类型转换成数值。

由于INCR等指令本身就具有原子操作的特性,所以我们完全可以利用redis的INCR、INCRBY、DECR、DECRBY等指令来实现原子计数的效果,假如,在某种场景下有3个客户端同时读取了mynum的值(值为2),然后对其同时进行了加1的操作,那么,最后mynum的值一定是5。不少网站都利用redis的这个特性来实现业务上的统计计数需求。

我们还可以进行删除:可以发现,删除后获取为null

 

 

110Redis 简明教程--Redis 数据类型 一个 Redis 集合的非常有趣的事情是它支持一些服务端的命令从现有的集合出发去进行集合运算,因此你可以在非常短的时间内进行合并(unions),求交集(intersections),找出不同的元素(differences of sets)。假如你要去楼下买一个汉堡,一个汉堡需要花一定的时间才能做出来,非阻塞式的做法是去付完钱走人,过一段时间来看一下汉堡是否做好了,没好就先离开,过一会儿再来,而且要知道可能不止你一个人在买汉堡,在你离开的时候很可能别人会取走你的汉堡,这是很让人烦的事情。 阅读详情

相关推荐

详解linux中的strings命令简介

本篇文章主要介绍了linux中的strings命令简介,在linux下搞软件开发的朋友, 几乎没有不知道strings命令的。非常具有实用价值,需要的朋友可以参考下。

(三)redis常用数据结构之strings

目录 一、环境介绍 二、strings 三、strings的bitmap 四、bitop 一、环境介绍 系统:CentOS6.8 redis版本: 4.0.7 终端软件:Xshell 说明:下面都将使用redis的help命令对各个数据结构做命令详解,在这之前需要安装好redis,运行server,运行cli连接上server。 二、strings help @string,即...

xuyilin3310的博客 297

集成电路设计笔记(七)UVLO设计

1. 什么是UVLO 欠压锁定(Undervoltage-Lockout)简称UVLO,是电子设备中在电源电压低于正常工程准位时,切断电源的电路。在嵌入式系统中常会用UVLO监控电池电压,若电压低于一定值,会直接切断电源,保护嵌入式系统的电路。 许多电子设备中都有UVLO的功能,例如在镇流器中就有UVLO电路,若电压过低时直接切断电源。 UVLO就是低电压锁定; 低压关断. 欠压关断模式是当供电电压低于IC的开启门限电压时的一种保护模式。欠压关断模式可保证IC在供电电压不足时不致于被损坏。一个低电压锁定(

ccbirds 2万+

Redis基本数据结构总结之STRING和LIST

Redis基本数据结构总结前言Redis的特点在于其读写速度特别快,因为是存储在内存中的,其非常适合于处理大数据量的情况;还有一个是其不同于其他的关系型数据库,Redis是非关系型数据库,也就是我们常说的NoSQL,其并不需要一开始去创建好表结构,可以存储自定义的数据;还有Redis是分布式的,其可以主从分离,主从复制,比如说我们不可能只用一台Redis服务器来处理客户端的请求,因为这样毕竟是存在...

weixin_30555125的博客 240

手把手教你用gmid方法设计二级运放:从理论到仿真全流程(附避坑指南)

本文详细介绍了使用gmid方法设计二级运放的全流程,从理论到仿真实践,特别针对初学者常见问题提供避坑指南。通过系统化的晶体管尺寸确定技术,帮助工程师在性能、功耗和面积之间找到最佳平衡点,适用于模拟集成电路设计中的关键模块开发。

weixin_29213525的博客 271

几率大的网络安全面试题(含答案)

其他篇章:Java校招极大几率出的面试题(含答案)----汇总 本文面试题汇总: 防范常见的 Web 攻击 重要协议分布层 arp协议的工作原理 rip协议是什么?rip的工作原理 什么是RARP?工作原理 OSPF协议?OSPF的工作原理 TCP与UDP区别总结 什么是三次握手四次挥手? tcp为什么要三次握手? dns是什么?dns的工作原理 一次完整的HTTP请求过程 Cookies和ses...

睶 6万+

redis数据结构_codepython整理一

【redis数据结构 – 简介】 redis是一种高级的key:value存储系统,其中value支持五种数据类型: 1.字符串(strings) 2.字符串列表(lists) 3.字符串集合(sets) 4.有序字符串集合(sorted sets) 5.哈希(hashes) 而关于key,有几个点要提醒大家: 1.key不要太长,尽量不要超过1024字节,这不仅消

codepython的专栏 626

使用VMware Converter将物理机转换为虚拟机时,目标虚拟机的converter-helper不启动的问题解决方法

摘要:在使用VMware Converter将Linux物理机转换为虚拟机时,遇到转换进度卡在1%且无法连接helper server的问题。主要原因是未给helper server配置与源主机互通的IP地址,以及目标虚拟机未正确加载helper server镜像文件或未设置光驱为第一启动项。解决方法包括:1)在转换配置中手动设置helper server的IP地址;2)检查并手动上传helper server镜像文件到目标虚拟机;3)确保虚拟机的光驱设置为第一启动项。正确配置后,转换进程即可正常进行。(1

mwmbfh的博客 900

【Redis】Redis 架构原理解析 - Strings 背后的实现数据结构和算法

Redis是一款高性能的内存数据库,其架构原理主要包括以下几个方面:单线程模型:Redis采用单线程模型,即所有的操作都在一个线程中执行,避免了多线程之间的竞争和锁等问题。同时,Redis采用非阻塞I/O模型,可以在一次I/O操作中处理多个请求,提高了性能和吞吐量。内存存储:Redis主要使用内存存储数据,这样可以快速地读写数据,同时也可以通过持久化机制将数据保存到磁盘中,保证数据不会因为断电等异常情况而丢失。

AI天才研究院 2万+

Agent本地部署教程详细步骤

在开始之前,你需要明确你要部署的Agent是什么。如果你需要部署其他Agent,请参考其官方文档调整步骤。

weixin_39673931的博客 2495

Fiddler抓包实战:5分钟搞定微信公众号历史消息接口分析(附完整Python代码)

本文详细介绍了如何使用Fiddler抓包工具逆向分析微信公众号历史消息接口,并提供完整的Python代码实现。从环境准备、动态参数捕获到商业级采集系统架构设计,全面解析了突破官方接口限制的技术方案,帮助开发者高效获取公众号文章数据。

tree8的博客 326

redis数据类型简介 - Strings

redis数据类型简介 - Strings 你也许已经知道Redis并不是简单的key-value存储,实际上他是一个数据结构服务器,支持不同类型的值。也就是说,你不必仅仅把字符串当作键所指向的值。下列这些数据类型都可作为值类型: 二进制安全的字符串 Lists: 按插入顺序排序的字符串元素的集合。他们基本上就是链表(linked lists)。 Sorted sets,类似Sets,但是每个字...

xinkailei3的博客 224

人形机器人开源资源大盘点(四):硬件开源平台

开源人形机器人平台推动技术民主化 本期聚焦四大开源人形机器人平台:斯坦福的ToddlerBot以6000美元低成本实现30自由度运动,支持仿真到现实的零样本迁移;法国Reachy2被HuggingFace收购,融合开源AI与硬件,适配医疗、工业等场景;国内OriginMan基于ROS2全开源,集成大模型能力,支持深度改造;OAN框架则为经典NAO机器人注入开源活力,扩展交互功能。这些平台通过不同路径降低研发门槛,推动人形机器人技术走向开放共享的未来。

Studying…… 370

redis学习笔记(二) redis数据结构

数据最外层的结构为redisDb。

qq_36509457的博客 1067

IgH EtherCAT 从入门到精通:第 5 章 多主站与系统集成配置

本文介绍了 EtherCAT 多主站配置与系统集成方法。主要内容包括: 多主站实例配置原理:通过内核模块参数指定多个主站设备,每个主站独立管理一条 EtherCAT 总线,最多支持32个主站实例。 配置文件详解:在/etc/ethercat.conf中通过MASTER<X>_DEVICE变量定义各主站绑定的网卡或MAC地址,支持冗余备份配置。 系统服务集成:提供了systemd服务单元文件和传统init.d脚本两种方式实现开机自启动和管理,并建议通过override文件定制服务依赖关系。 架构示

从事嵌入式linux android驱动开发,拥有全栈能力 349

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Redis5.0.9 一篇理解数据结构之Simple Dynamic Strings

从简单入手 Simple Dynamic Strings 动态字符串是Redis 的基本数据类型之一,也是最常见的数据类型。 兼容了C语言标准字符串处理函数,在此基础上保证了二进制安全。 1.常用命令 SET str1 helloWorld GET str1 TYPE str1 STRLEN str1 2.源码 源码文件在redis/src/sds.h. sds.c //创建sds typedef char*sds; /* Note: sdsh...

人人都是程序员 358

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

3.1 Redis数据结构

Redis 常见数据结构 Redis操作的游标都是从0开始 1. Key设计规则以及常用命令 key不可过长 key不可过短而且要见名知意 u1000flw --> user:1000:followers 用户 id 粉丝 中间使用:分隔 comment

acaly_nf的博客 185

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

‌Redis入门:五种数据结构使用

Strings:简单键值,适合基础存储。Lists:有序元素,适合队列操作。Sets:无序唯一,适合去重和集合运算。Hashes:字段映射,适合对象存储。Sorted Sets:有序唯一,适合排序场景。入门时,建议从Redis命令行练习这些命令(使用redis-cli工具)。结合具体应用场景,如缓存或实时分析,能更高效地利用Redis。实践中,注意数据持久化和性能优化,以构建可靠系统。

qqqqisuxkshd的博客 775

redis简介

Redis是基于内存,也可以基于磁盘持久化nosql数据库,使用c语言开发。 数据存储结构:key-value 安装环境准备 Redis使用c语言开发,需要使用gcc编译程序进行编译。 1) 安装gcc a) 从磁盘镜像中进行安装:(重启Linux服务器需要重新挂载磁盘镜像) b) 使用yum命令直接从mine.repo文件中本地URL下载 c) 挂载命令:mount /dev/cdrom /mnt d) 安装命令:yum -y install

weixin_57763462的博客 918

redis 从0到1完整学习 (三):redis 数据结构

本文介绍 redis 的数据结构,包含 string、list、set、hash、sorted set、stream 等

日常学习与专研的记录 1376

redis缓存入门

Redis是一个开源的内存键值存储系统,支持多种数据结构(如字符串、哈希、列表等),具备高性能、原子性操作、持久化等特性。它适用于缓存、消息队列等场景,支持主从复制和集群扩展。安装简便,可通过Jedis等客户端与Java项目集成。与Memcached相比,Redis功能更丰富,支持持久化和复杂数据结构。未来,Redis将持续增强流处理和模块化功能,在实时数据处理等领域发挥更大作用。开发者需根据业务需求选择合适的数据结构和架构方案。

ywl470812087的博客 10万+

Redis基本命令一Strings操作

命令一览:SET、GET、EXISTS、DEL、INCR、INCRBY、DECR、DECRBY、EXPIRE、TTL、PXPIRE、PTTL 命令翻译自Redis,点击跳转:You can try redis command by yourself.Come on ! 一、SET 1、操作对象:strings 2、用法:SET key value 3、时间复杂度:O(1) 4、作用...

weixin_36730613的博客 337

Redis之Strings命令

Redis之Strings命令

StoNENee的博客 603

redis 基本使用

Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统。

weixin_44550507的博客 1351

Redis Internals (strings)

Redis dynamic strings (all strings) String is the basic building block of Redis types. Redis is a key-value store. All Redis keys are strings and its also the simplest value type. Lists, sets

lmm2003的专栏 1248

redis数据类型strings

Redis数据类型介绍(https://redis.io/topics/data-types-intro#strings) 1. strings:Binary-safe strings,结构简单 2. lists:有序-根据插入顺序排列,元素类型-string,数据结构-基于链表实现(linked lists) 3. sets:元素类型-string,元素唯一且无序 4. sorted sets:每个元素关联一个浮点数值叫score,每个元素总是按照score排序,可以做范围查询,如取前10个元素或取后10

Jalen备忘录 252
上一篇: Redis数据结构之set
下一篇: Redis事务
qq_34412985
博客等级 码龄11年 143粉丝 983原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值