Redis strings-string类型

目录

前言

一、set相关操作

1.1 SET新增/更新数据方法

 1.2 SETEX 约束过期时间

1.3 SETNX 约束SET操作

1.4 MSET 批量操作

1.5 MSETNX

二、string类型value操作

2.1 STRLEN获取字符串长度

2.2 APPEND 追加数据

2.3 SETRANGE 替换数据

2.4 STRALGO LCS算法

三、get相关操作

3.1 GET获取key的value

3.2 GETDEL获取key的value,结束后删除key

3.3 GETEX获取key的value,并且重新创建约束时间。

3.4 GETRANGE 获取约束范围内的数据

 3.5 GETSET返回旧值,赋予新值

3.6 MGET获取指定的key对应的values的list


前言

        rendis官网提供了详细的操作文档,可以通过redis.cn学习使用方式以及应用场景。本文只列举一些常用的操作。

        强烈推荐redis.cn官网的子连接网站:

        1.strings类型的操作指令:http://redis.cn/commands/set.html

        2.redis类型讲解,以及部分类型操作方法:http://redis.cn/topics/data-types-intro.html#strings

        3.内存计算器的工具类,帮助完成设计数据模型和技术选型:http://redis.cn/redis_memory/

        4.redis操作指令的补充:http://redis.cn/commands/

        使用strings类型,在链接redis服务器之后可以通过“help @string”查看对应的操作指令。 

        strings的使用文档大致可以分为三类操作方式:string、数值和bitmap。

        这篇博客主要讲解string类型的使用。

一、set相关操作

1.1 SET新增/更新数据方法

        将键key设定为指定的“字符串”值。
        如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型。
        当set命令执行成功之后,之前设置的过期时间都将失效
返回值:
        simple-string-reply:如果SET命令正常执行那么回返回OK,否则如果加了NX 或者 XX选项,但是没有设置条件。那么会返回nil。

关于过期时间:

        EX:设置 key 在 n 秒后过期;

        PX:设置 key 在 n 毫秒后过期;

        EXAT:设置 key 在某个时间戳(精确到秒)之后过期;

        PXAT:设置 key 在某个时间戳(精确到毫秒)之后过期;

新增/更新规则:

        NX :只在键不存在时,才对键进行设置操作,只进行创建操作。 SET key value NX 效果等于SETNX key value 。使用场景:“多线程场景下,通过redis申请线程锁”。
        XX :只在键已经存在时,才对键进行设置操作,约束只进行更新操作。

例子:

set k1 hello     新增或者更新“k1”数据为“hello”。

 1.2 SETEX 约束过期时间

        设置key对应字符串value,并且设置key在给定的seconds时间之后超时过期。这个命令等效于执行下面的命令:"set key value EX seconds"。

例子:

set k1 10 hello        新增或者更新“k1”数据为“hello”,10秒之后过期。

等价于:

SET k1 hello
EXPIRE k1 10

1.3 SETNX 约束SET操作

        更新数据。使用场景:“多线程场景下,通过redis申请线程锁”。

例子:

SETNX k1 hello     更新"k1"数据为“hello”。

1.4 MSET 批量操作

        将key设置值为value,如果key不存在,这种情况下等同SET命令。 当key存在时,什么也不做。SETNX是”SET if Not eXists”的简写。

返回值:

        1 如果key被设置了
        0 如果key没有被设置 

例子:

mset k1 hello k2 world        新增/更新数据“k1:hello”、“k2 world”

1.5 MSETNX

        对应给定的keys到他们相应的values上。只要有一个key已经存在,MSETNX一个操作都不会执行。 由于这种特性,MSETNX可以实现要么所有的操作都成功,要么一个都不执行,这样可以用来设置不同的key,来表示一个唯一的对象的不同字段。

        MSETNX是原子的,所以所有给定的keys是一次性set的。客户端不可能看到这种一部分keys被更新而另外的没有改变的情况。

返回值:

        1 如果所有的key被set
        0 如果没有key被set(至少其中有一个key是存在的)

例子:

msetnx k3 zhangsan k4 lisi        新增数据,注意,如果key已经存在,新增会全部失败。

二、string类型value操作

2.1 STRLEN获取字符串长度

        返回key的string类型value的长度。如果key对应的非string类型,就返回错误。

返回值:

        key对应的字符串value的长度,或者0(key不存在)

2.2 APPEND 追加数据

        如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作,这种情况 APPEND 将类似于 SET 操作。

返回值:

        返回append后字符串值(value)的长度。。

例子:

append k1 world                在k1的value数据后边追加"world"。

2.3 SETRANGE 替换数据

        这个命令的作用是覆盖key对应的string的一部分,从指定的offset处开始,覆盖value的长度。如果offset比当前key对应string还要长,那这个string后面就补0以达到offset。不存在的keys被认为是空字符串,所以这个命令可以确保key有一个足够大的字符串,能在offset处设置value。 

         

注意:

        offset最大可以是229-1(536870911),因为redis字符串限制在512M大小。如果你需要超过这个大小,你可以用多个keys。

警告:

        当set最后一个字节并且key还没有一个字符串value或者其value是个比较小的字符串时,Redis需要立即分配所有内存,这有可能会导致服务阻塞一会。在一台2010MacBook Pro上,set536870911字节(分配512MB)需要~300ms,set134217728字节(分配128MB)需要~80ms,set33554432比特位(分配32MB)需要~30ms,set8388608比特(分配8MB)需要8ms。注意,一旦第一次内存分配完,后面对同一个key调用SETRANGE就不会预先得到内存分配。

扩展:

        正因为有了SETRANGE和类似功能的GETRANGE命令,你可以把Redis的字符串当成线性数组,随机访问只要O(1)复杂度。这在很多真实场景应用里非常快和高效。

返回值:

        该命令修改后的字符串长度

2.4 STRALGO LCS算法

        redis6.0.0之后提供的比较LCS算法。字详情参考链接:https://redis.io/commands/stralgo

官方文档给出的应用场景是,DNA序列的比较。大致用法包括:

1.比较两个value的值,输出相同字符。

STRALGO LCS STRINGS value1 value2 输出“value”

2.比较两个key的value值,输出相同字符。

MSET  k1 value1 k2 value2

STRALGO LCS KEYS k1 k2 输出“value”

3.得到相同字符的个数,输出相同字符个数。

STRALGO LCS STRINGS value1 val112233 输出“4”

4.比较字符串,输出相同字符的下标。

5.比较字符串,输出相同字符串的下标,并且根据字符串长度约束,有选择输出。 

下图例子,如果相同字符串长度<=2不输出响应结果。

6.比较字符串,输出相同字符串的下标,并且输出字符串长度。

三、get相关操作

3.1 GET获取key的value

        返回keyvalue。如果key不存在,返回特殊值nil。如果keyvalue不是string,就返回错误,因为GET只处理string类型的values

返回值:

        key对应的value,或者nil(key不存在时)

3.2 GETDEL获取key的value,结束后删除key

        返回keyvalue。如果key不存在,返回特殊值nil

返回值:

        key对应的value,或者nil(key不存在时)

3.3 GETEX获取key的value,并且重新创建约束时间。

        如果key以有约束时间,执行GETEX操作约束时间会覆盖,以GETEX设置的过期时间为准。 

 例子:

  GETEX k1 EX 60               获取k1,如果k1不存在,返回nil。存在重新为k1设置过期时间。

3.4 GETRANGE 获取约束范围内的数据

警告

        这个命令是被改成GETRANGE的,在小于2.0的Redis版本中叫SUBSTR。 返回key对应的字符串value的子串,这个子串是由start和end位移决定的(两者都在string内)。可以用负的位移来表示从string尾部开始数的下标。所以-1就是最后一个字符,-2就是倒数第二个,以此类推。

        这个函数处理超出范围的请求时,都把结果限制在string内。

 3.5 GETSET返回旧值,赋予新值

        自动将key对应到value并且返回原来key对应的value。如果key存在但是对应的value不是字符串,就返回错误。相当于“get key”+“set key value”。

应用场景:

        GETSET可以和INCR(redis数值计算)一起使用实现支持重置的计数功能。举个例子:每当有事件发生的时候,一段程序都会调用INCR给key mycounter加1,但是有时我们需要获取计数器的值,并且自动将其重置为0。这可以通过GETSET mycounter “0”来实现。

3.6 MGET获取指定的key对应的values的list

        返回所有指定的key的value。对于每个不对应string或者不存在的key,都返回特殊值nil。正因为此,这个操作从来不会失败。

返回值:

        指定的key对应的values的list

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
strings.com 是强大的纯DOS环境 下的文本处理工具 STRINGS常用方法: 1、把文本文件 LIST.TXT 包含的行数赋值给变量 LN STRINGS LN=LINESIZE LIST.TXT 2、把文本文件 LIST.TXT 的大小传递给变量FS STRINGS FS=FILESIZE LIST.TXT 3、读取文本文件 LIST.TXT 的第5行内容并赋值给变31333137量 LN STRINGS LN=READ LIST.TXT,5 4、把变量 N 在原有基础上+1 和 -1 STRINGS N=ADD %N%,1 STRINGS N=SUB %N%,1 5、把字符串 ABCDEFG 中第四个字符以及后面共3个字符传递给变量 LX (DEF) STRINGS LX=MID ABCDEFG,4,3 6、查找字符串 ABCDEFG 中D所在的位置并赋值给变量DX,如果没找到DX=0 STRINGS DX=FIND ABCDEFG,D 7、找出字符串 ABCD EFG HIJ KLMN 中第二个单词并赋值给变量L2 STRINGS L2=PARSE ABCD EFG HIJ KLMN ,2 应用举例:逐一显示文件 LIST.TXT 各行内容 @ECHO OFF REM 读取LIST.TXT大小如果是0就转入 ERROR段 STRINGS FS=FILESIZE LIST.TXT IF %FS%*==0* GOTO ERROR REM 读取 LIST.TXT 行数 并用N作计数器以循环方式显示 LIST.TXT各行内容。 STRINGS L=LINESIZE LIST.TXT STRINGS L=ADD %L%,1 SET N=0 :LOOP STRINGS N=ADD %N%,1 STRINGS LX=READ LIST.TXT,%N% ECHO %LX% IF %N%*==%L%* GOTO END GOTO LOOP :ERROR ECHO LIST.TXT IS NULL :END SET FS= SET L= SET N= SET LX= --------------------------------------------- NSET 的常用方法: 1、把某一命令的执行结果传递给变量。 A.把 DIR 命令执行结果第7行中的第2个单词传递给变量 DIRX DIR /A /S |NSET /L7 DIRX=$2 B.把当前路径传递给变量 CDX CD |NSET CDX=$0 2、获取 LIST.TXT 文件第5行第2个单词的内容并赋值给变量 L52 NSET /L5 L52=$2 <LIST.TXT 举例:显示出 LIST.TXT 文件中第二个单词是 SYSTEM 的行的内容。 @ECHO OFF REM 读取LIST.TXT大小如果是0就转入 ERROR段 STRINGS FS=FILESIZE LIST.TXT IF %FS%*==0* GOTO ERROR REM 读取 LIST.TXT 行数 并用N作计数器以循环方式显示 LIST.TXT中第二个单词是 REM SYSTEM 的行的内容,每找到一个符合条件的行,就把变量M在原有基础上+1。 STRINGS L=LINESIZE LIST.TXT STRINGS L=ADD %L%,1 SET N=0 SET M=0 :LOOP STRINGS N=ADD %N%,1 STRINGS LX=READ LIST.TXT,%N% REM STRINGS LX2=PARSE %LX%,2 NSET /L%N% LX2=$2 diskn.txt REM 如果存在DISKN2.TXT 就删除之 if exist diskn2.txt del diskn2.txt >nul REM 获取DISKN.TXT文件行数并用N做计数器逐行判断,并把需要的信息传递给DISKN2.TXT REM 如果该行前两个字符是 NO 说明没有硬盘,就退出脚本 RE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值