mset redis_Redis数据类型-字符串详解

上节课我们学习了在Linux系统上完成Redis的安装操作,这节课我们来学习下Redis的常用数据类型——字符串。本章节的视频教程可在“权威PHP”公众号免费学习!

Redis支持的数据类型较为丰富,下面是我从redis中文网摘取的一段描述,一起来了解下redis支持的数据类型都有哪些。

你也许已经知道Redis并不是简单的key-value存储,实际上他是一个数据结构服务器,支持不同类型的值。也就是说,你不必仅仅把字符串当作键所指向的值。下列这些数据类型都可作为值类型:

  • 二进制安全的字符串
  • Lists: 按插入顺序排序的字符串元素的集合。他们基本上就是链表(linked lists)。
  • Sets: 不重复且无序的字符串元素的集合。
  • Sorted sets,类似Sets,但是每个字符串元素都关联到一个叫score浮动数值(floating number value)。里面的元素总是通过score进行着排序,所以不同的是,它是可以检索的一系列元素。(例如你可能会问:给我前面10个或者后面10个元素)。
  • Hashes,由field和关联的value组成的map。field和value都是字符串的。这和Ruby、Python的hashes很像。
  • Bit arrays (或者说 simply bitmaps): 通过特殊的命令,你可以将 String 值当作一系列 bits 处理:可以设置和清除单独的 bits,数出所有设为 1 的 bits 的数量,找到最前的被设为 1 或 0 的 bit,等等。
  • HyperLogLogs: 这是被用于估计一个 set 中元素数量的概率性的数据结构。别害怕,它比看起来的样子要简单…参见本教程的 HyperLogLog 部分

通过以上描述我们了解到redis支持字符串(strings)、哈希值(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)、bitmaps、hyperloglogs等,接下来我们将逐个学习这些数据类型。

redis的字符串类型和memcached的一样都是简单的key、value存储。redis对字符串操作命令较为丰富总结常用命令列表如下:

set:为指定键设置字符串值

setnx:为不存在的键设置字符串值(如果键已存在则放弃操作)

setex:设置字符串键值对的同时设置过期时间

setrange:更新字符串指定范围内的值

mset:同时设置多个字符串键值对

msetnx:同时设置多个字符串键值对,要求任何一个键都不能存在,否则多个键值对设置都失败

get:获取指定键的字符串值

mget:同时获取多个键的字符串值

getset:设置键值对成功后返回本次操作之前的旧值

getrange:获取字符串指定范围内的值(子字符串)

incr:让指定键的数字字符串加1

incrby:让指定键的数字字符串加上指定数字

decr:让指定键的数字字符串减1

decrby:让指定键的数字字符串减去指定数字

append:给指定字符串末尾追加部分字符串内容

strlen:获取指定键的字符串长度

1、set : 为指定键设置字符串值

命令格式:SET key value [EX seconds|PX milliseconds] [NX|XX]

命令参数说明:

set 命令

key 字符串在redis中存储的键

value 存储的字符串内容

【EX seconds】 字符串保存的有效期时间单位是秒,为可选参数

【PX miliseconds】字符串保存的有效期时间单位是毫秒,为可选参数

【NX】 只有键不存在时才可以操作,nx->not exists,为可选参数

【XX】 只有键存在时才可以操作,为可选参数

set命令提供的参数功能较为丰富,若文字版本看不懂请参考本章节对应的视频教程。

操作演示参考图片:

2fdf17e53f682f2397c99a6f99fb4dc4.png

2、setnx : 为不存在的键设置字符串值(如果键已存在则放弃操作)

命令格式:setnx key value

命令参数说明:

setnx 命令,set + nx是 not exist的意思

key 字符串在redis中存储的键

value 存储的字符串内容

setnx key value 等同于 set key value nx 这两条命令效果相同!

c5d1db7fea66e53bf24f8f69d5869abd.png

3、setex :设置字符串键值对的同时设置过期时间

命令格式:setex key seconds value

命令参数说明:

setex 命令

key 字符串在redis中存储的键

seconds 设置字符串的过期时间,注意这里时间单位是秒!

value 存储的字符串内容

setex key seconds value

等同于

set key value ex seconds 这两条命令效果相同!

9ff95fb4ae31cf3aed2081ff09112c5e.png

我们在开始学习下面setrange这个命令之前需要先了解下字符串索引和取值范围的知识要点!请仔细阅看下面这张图片(一图胜千文)!

22548b837a3cf2397e7a50f8586aeee7.png

设置一个普通的字符串值为“hello”,redis中存储字符串时每个字符都对应一个存储位置也就是字符在整个字符串中的索引位。从字符串的开始处往后数都是正数标记位(从0开始,0代表第一个字符,1代表第二字符,2代表第三个字符以此类推,跟PHP数组的索引概念相似),从字符串的末尾往前数都是负数标记位(-1代表最后一个字符,-2代表倒数第二个字符,-3代表倒数第三个字符串以此类推,注意不是从0开始)。就是说redis字符串中每个字符都有一个索引下标。若文字版本看不懂请参考本章节对应的视频教程。

4、setrange : 更新字符串指定范围内的值(对已存在的一个字符进行部分内容的更新替换)

命令格式:setrange key offset value

命令参数说明:

setrange 命令

key 字符串在redis中存储的键

offset 字符串开始位置(从字符串索引位开始处理,包含该索引)

value 存储的字符串内容

setrange命令需要主要的几点:(请参考setrange的效果图理解!)

  • setrange命令中offset参数是字符开始处理的位置(包含此索引位对应的字符)
  • 替换的内容长度超过了字符串从索引替换的内容长度时会完全覆盖目标内容,成功后返回新字符串长度
  • 替换内容长度没有超过字符串从索引替换的内容长度时,未被替换的字符仍然保留,成功后返回新字符串长度

5、mset : 同时设置多个字符串键值对

命令格式:mset key1 value1 key2 value2 key3 value3 .........

命令参数说明:

mset 命令

key 字符串在redis中存储的键

value 存储的字符串内容

5b0f7ce492fcb5b28199b4b30f2bfd93.png

6、 msetnx : 同时设置多个字符串键值对,要求任何一个键都不能存在,否则多个键值对设置都失败

命令格式:msetnx key1 value1 key2 value2 key3 value3 .........

命令参数说明:

msetnx 命令

key 字符串在redis中存储的键

value 存储的字符串内容

80f8851580e8ec4add6acdad0681b86e.png

7、get : 获取指定键的字符串值

命令格式:get key

命令参数说明:

get 命令

key 字符串在redis中存储的键

f9d10461c5dcbd4a475cf7a64e3430d7.png

8、mget : 同时获取多个键的字符串值

命令格式:mget key1 key2 key3

命令参数说明:

mget 命令

key 字符串在redis中存储的键

c76b41bdb17ef56221ad36b3e82ede4c.png

9、getset : 设置键值对成功后返回本次操作之前的旧值(操作已存在的键成功之后会返回操作之前的旧值,操作不存在的键成功之后返回nil)

命令格式:getset key value

命令参数说明:

getset 命令

key 字符串在redis中存储的键

value 存储的字符串内容

89b70d89e5b20bae3c7fd76007077e4c.png

10、getrange : 获取字符串指定范围内的值(根据字符索引位置获取子字符串)

命令格式:getrange key start end

命令参数说明:

getrange 命令

key 字符串在redis中存储的键

start 获取子字符串开始的位置(字符索引,包含开始索引对应的字符)

end 获取子字符串结束的位置(字符索引,包含结束索引对应的字符)

字符串索引的概念可以参考上面索引的图解,若文字版本看不懂请参考本章节对应的视频教程。

7406c4a62f2e262b42032a74825f7910.png

11、incr : 让指定键的数字字符串加1

命令格式:incr key

命令参数说明:

incr 命令

key 字符串在redis中存储的键

使用incr命令注意:

  • 该命令只针对数字字符串有效,纯字符串内容不起作用
  • 使用该命令操作一个不存在的键时,会先创建这个键默认值为零然后再加1
19b020181335cdc0e5f7f34031608392.png

12、incrby : 让指定键的数字字符串加上指定数字

命令格式:incrby key increment

命令参数说明:

incrby 命令

key 字符串在redis中存储的键

increment 要给目标键对应值增加的指定数字

使用incrby命令注意:

  • 该命令只针对数字字符串有效,纯字符串内容不起作用
  • 使用该命令操作一个不存在的键时,会先创建这个键默认值为零然后再加上增加的increment数字
0fc831d94e4f5cfc0509615b9cae252c.png

13、decr : 让指定键的数字字符串减1

命令格式:decr key

命令参数说明:

decr 命令

key 字符串在redis中存储的键

使用decr命令注意:

  • 该命令只针对数字字符串有效,纯字符串内容不起作用
  • 使用该命令操作一个不存在的键时,会先创建这个键默认值为零然后再减1
1900ddc25ee51579f0d17da05d27ed2e.png

14、decrby : 让指定键的数字字符串减去指定数字

命令格式:decrby key decrement

命令参数说明:

decrby 命令

key 字符串在redis中存储的键

decrement 要给目标键对应值增加的指定数字

使用decrby命令注意:

  • 该命令只针对数字字符串有效,纯字符串内容不起作用
  • 使用该命令操作一个不存在的键时,会先创建这个键默认值为零然后再减去要减的decrement数字
f017d789ca76e7c9769fcdb5c5abe93a.png

15、append : 给指定字符串末尾追加部分字符串内容

命令格式:append key value

命令参数说明:

append 命令

key 字符串在redis中存储的键

value 要给目标键对应值追加的字符串内容

add891b2c08dcbbe520b3de14a216639.png

16、strlen : 获取指定键的字符串长度

命令格式:strlen key

命令参数说明:

strlen 命令

key 字符串在redis中存储的键

e01148fc346a7157ba213c25c14e2525.png

写到这里基本已经覆盖了大家日常工作学习所能使用到的所有字符串类型操作命令!文章末尾给大家解解惑,reids的单个key、value字符串值最多能存多少?

相信大家在很多地方都遇到过这个类似问题,OK!今天我们搞个透彻吧!

请参考我在redis官网截图的两个图片:

ce96901509569bf33495a48f0469ed92.png
5af863ff778ce9cddc6595b771bc4478.png

通过这两个截图我们能得知,redis的单个键最大不能超过512MB,redis的单个字符串类型value值不能超过512MB。OK,到此为爱学习的自己点个赞吧!至少今天又进步了一点点!

想获取本章节的视频教程,关注“权威PHP”公众号,自助获取吧!

推荐阅读文章:

轻松搞定Redis的安装

cb802678a7c6ffe08f730c8a4310d047.png

本公众号推送的所有文章都是个人整理不存在抄袭,主要参考资料都来源各技术官方文档及个人学习笔记。交流微信号:QIU15510135007

680e24aa41f87af1cdd52de527818399.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值