上节课我们学习了在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](https://i-blog.csdnimg.cn/blog_migrate/5e6a2f704e1e29610df52311c767dfd2.jpeg)
2、setnx : 为不存在的键设置字符串值(如果键已存在则放弃操作)
命令格式:setnx key value
命令参数说明:
setnx 命令,set + nx是 not exist的意思
key 字符串在redis中存储的键
value 存储的字符串内容
setnx key value 等同于 set key value nx 这两条命令效果相同!
![c5d1db7fea66e53bf24f8f69d5869abd.png](https://i-blog.csdnimg.cn/blog_migrate/d37f077f8ccdf589af0bf9b6e52abe5c.jpeg)
3、setex :设置字符串键值对的同时设置过期时间
命令格式:setex key seconds value
命令参数说明:
setex 命令
key 字符串在redis中存储的键
seconds 设置字符串的过期时间,注意这里时间单位是秒!
value 存储的字符串内容
setex key seconds value
等同于
set key value ex seconds 这两条命令效果相同!
![9ff95fb4ae31cf3aed2081ff09112c5e.png](https://i-blog.csdnimg.cn/blog_migrate/5061e82d3a7fff780caf77826a66bec5.jpeg)
我们在开始学习下面setrange这个命令之前需要先了解下字符串索引和取值范围的知识要点!请仔细阅看下面这张图片(一图胜千文)!
![22548b837a3cf2397e7a50f8586aeee7.png](https://i-blog.csdnimg.cn/blog_migrate/617cbc0651b3b8dcff12f2ca65e1209e.jpeg)
设置一个普通的字符串值为“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](https://i-blog.csdnimg.cn/blog_migrate/6e587bbbfac775df0f19d9357afc9144.jpeg)
6、 msetnx : 同时设置多个字符串键值对,要求任何一个键都不能存在,否则多个键值对设置都失败
命令格式:msetnx key1 value1 key2 value2 key3 value3 .........
命令参数说明:
msetnx 命令
key 字符串在redis中存储的键
value 存储的字符串内容
![80f8851580e8ec4add6acdad0681b86e.png](https://i-blog.csdnimg.cn/blog_migrate/d645707217f6e36cb489b4b483f14af9.jpeg)
7、get : 获取指定键的字符串值
命令格式:get key
命令参数说明:
get 命令
key 字符串在redis中存储的键
![f9d10461c5dcbd4a475cf7a64e3430d7.png](https://i-blog.csdnimg.cn/blog_migrate/7080aec8d8305fc1f8f01c0ee7a4e576.jpeg)
8、mget : 同时获取多个键的字符串值
命令格式:mget key1 key2 key3
命令参数说明:
mget 命令
key 字符串在redis中存储的键
![c76b41bdb17ef56221ad36b3e82ede4c.png](https://i-blog.csdnimg.cn/blog_migrate/52fafe1c6f4e740167f648df9366cd26.jpeg)
9、getset : 设置键值对成功后返回本次操作之前的旧值(操作已存在的键成功之后会返回操作之前的旧值,操作不存在的键成功之后返回nil)
命令格式:getset key value
命令参数说明:
getset 命令
key 字符串在redis中存储的键
value 存储的字符串内容
![89b70d89e5b20bae3c7fd76007077e4c.png](https://i-blog.csdnimg.cn/blog_migrate/ec88b7580f80733edac0e0f19a3b9b3b.jpeg)
10、getrange : 获取字符串指定范围内的值(根据字符索引位置获取子字符串)
命令格式:getrange key start end
命令参数说明:
getrange 命令
key 字符串在redis中存储的键
start 获取子字符串开始的位置(字符索引,包含开始索引对应的字符)
end 获取子字符串结束的位置(字符索引,包含结束索引对应的字符)
字符串索引的概念可以参考上面索引的图解,若文字版本看不懂请参考本章节对应的视频教程。
![7406c4a62f2e262b42032a74825f7910.png](https://i-blog.csdnimg.cn/blog_migrate/cf6105dda9e5b9f1e5f35b65fae47989.jpeg)
11、incr : 让指定键的数字字符串加1
命令格式:incr key
命令参数说明:
incr 命令
key 字符串在redis中存储的键
使用incr命令注意:
- 该命令只针对数字字符串有效,纯字符串内容不起作用
- 使用该命令操作一个不存在的键时,会先创建这个键默认值为零然后再加1
![19b020181335cdc0e5f7f34031608392.png](https://i-blog.csdnimg.cn/blog_migrate/d2eb9c0c643a826ffa3457efa4f52448.jpeg)
12、incrby : 让指定键的数字字符串加上指定数字
命令格式:incrby key increment
命令参数说明:
incrby 命令
key 字符串在redis中存储的键
increment 要给目标键对应值增加的指定数字
使用incrby命令注意:
- 该命令只针对数字字符串有效,纯字符串内容不起作用
- 使用该命令操作一个不存在的键时,会先创建这个键默认值为零然后再加上增加的increment数字
![0fc831d94e4f5cfc0509615b9cae252c.png](https://i-blog.csdnimg.cn/blog_migrate/837f12a6048a050100c19e7efbd75f3b.jpeg)
13、decr : 让指定键的数字字符串减1
命令格式:decr key
命令参数说明:
decr 命令
key 字符串在redis中存储的键
使用decr命令注意:
- 该命令只针对数字字符串有效,纯字符串内容不起作用
- 使用该命令操作一个不存在的键时,会先创建这个键默认值为零然后再减1
![1900ddc25ee51579f0d17da05d27ed2e.png](https://i-blog.csdnimg.cn/blog_migrate/42b6221df0714d4e7694e118e9e6ac82.jpeg)
14、decrby : 让指定键的数字字符串减去指定数字
命令格式:decrby key decrement
命令参数说明:
decrby 命令
key 字符串在redis中存储的键
decrement 要给目标键对应值增加的指定数字
使用decrby命令注意:
- 该命令只针对数字字符串有效,纯字符串内容不起作用
- 使用该命令操作一个不存在的键时,会先创建这个键默认值为零然后再减去要减的decrement数字
![f017d789ca76e7c9769fcdb5c5abe93a.png](https://i-blog.csdnimg.cn/blog_migrate/2642b3dadfc213ea72e7b0baab04739b.jpeg)
15、append : 给指定字符串末尾追加部分字符串内容
命令格式:append key value
命令参数说明:
append 命令
key 字符串在redis中存储的键
value 要给目标键对应值追加的字符串内容
![add891b2c08dcbbe520b3de14a216639.png](https://i-blog.csdnimg.cn/blog_migrate/77ac95e8bba0be66421dea443f963274.jpeg)
16、strlen : 获取指定键的字符串长度
命令格式:strlen key
命令参数说明:
strlen 命令
key 字符串在redis中存储的键
![e01148fc346a7157ba213c25c14e2525.png](https://i-blog.csdnimg.cn/blog_migrate/45ab73767d37de393aac88a8ee73e579.jpeg)
写到这里基本已经覆盖了大家日常工作学习所能使用到的所有字符串类型操作命令!文章末尾给大家解解惑,reids的单个key、value字符串值最多能存多少?
相信大家在很多地方都遇到过这个类似问题,OK!今天我们搞个透彻吧!
请参考我在redis官网截图的两个图片:
![ce96901509569bf33495a48f0469ed92.png](https://i-blog.csdnimg.cn/blog_migrate/b36a104af039499b88e63de4c761fea8.jpeg)
![5af863ff778ce9cddc6595b771bc4478.png](https://i-blog.csdnimg.cn/blog_migrate/bff148ac5cee02d65eee5c89b2d6db88.jpeg)
通过这两个截图我们能得知,redis的单个键最大不能超过512MB,redis的单个字符串类型value值不能超过512MB。OK,到此为爱学习的自己点个赞吧!至少今天又进步了一点点!
想获取本章节的视频教程,关注“权威PHP”公众号,自助获取吧!
推荐阅读文章:
轻松搞定Redis的安装
![cb802678a7c6ffe08f730c8a4310d047.png](https://i-blog.csdnimg.cn/blog_migrate/5cb6087b1542eeecc32cc56c64e490c0.jpeg)
本公众号推送的所有文章都是个人整理不存在抄袭,主要参考资料都来源各技术官方文档及个人学习笔记。交流微信号:QIU15510135007
![680e24aa41f87af1cdd52de527818399.png](https://i-blog.csdnimg.cn/blog_migrate/38b5a136a544940721e7294dd1fb1d6d.jpeg)