欢迎各位彦祖与热巴畅游本人专栏与博客
你的三连是我最大的动力
以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现]
专栏跑道一
➡️网络空间安全——全栈前沿技术持续深入学习
专栏跑道二
➡️ 24 Network Security -LJS
专栏跑道三
➡️ MYSQL REDIS Advance operation
专栏跑道四
➡️HCIP;H3C-SE;CCIP——LJS[华为、华三、思科高级网络]
专栏跑道五
➡️RHCE-LJS[Linux高端骚操作实战篇]
专栏跑道六
➡️数据结构与算法[考研+实际工作应用+C程序设计]
专栏跑道七
➡️RHCSA-LJS[Linux初级及进阶骚技能]
上节回顾
Redis数据类型之string类型及操作
1.string 类型及操作
简介
- 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这也就是意味着该类型可以接受任何格式的数据
- 如JPEG图像数据或Json对象描述信息等。
- 在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
2.相关命令列表[重在融汇贯通和如何快速运用]
String命令语法格式及说明表一
String命令语法格式及说明表一
命令原型 | 时间复杂度 | 命令描述 | 相关命令列表 |
APPEND key value | O(1) |
|
追加后 Value的 长度 |
DECR key | O(1) |
|
递减后的 Value 值 |
INCR key | O(1) |
|
递增后的 Value 值 |
DECRBY key decrement | O(1) |
|
减少后的 Value 值 |
INCRBY key increment | O(1) |
|
减少后的 Value 值 |
String命令语法格式及说明表二
String命令语法格式及说明表二
命令原型 | 时间复杂度 | 命令描述 | 相关命令列表 |
GET key | O(1) |
|
与该Key 相关的 Value, 如果该 Key不存 在,返回 ni |
SET key value | O(1) |
|
总是返 回"OK" |
GET SET key value |
O(1) |
|
返回该 Key的原 有值,如 果该Key 之前并不 存在,则 返回ni |
STRLEN key | O(1) |
|
返回指定Key的 Value字 符长度, 如果该 Key不存 在,返回 0 |
SETEX key seconds value | O(1) |
|
|
SETNX key value | O(1) |
|
1表示设置成功, 否则0 |
SETRANGE key offset value | O(1) |
|
修改后的字符串 Value长 度 |
String命令语法格式及说明表三
String命令语法格式及说明表三
命令原型 | 时间复杂度 | 命令描述 | 相关命令列表 |
GETRANGE key start end | O(1) |
|
子字符串 |
SETBIT key offset value | O(1) |
|
在指定Offset上的BIT原 有值 |
GETBIT key offset | O(1) |
|
在指定 Offset上 的BIT 值 |
MGET key [key ...] | O(N) |
|
返回一组 指定Keys 的Values 的列表 |
MSET key value [key value ...] | O(N) |
|
该命令不会失败, 始终返回 OK |
MSETNX key value [key value ...] | O(N) |
|
1表示所有Keys都设置成 功,0则 表示没有 任何Key 被修改 |
3.命令示例[建议大家上手小练一下下;时间是检验真理的唯一标准]
3.1.执行Redis客户端工具
SET/GET/APPEND/STRLEN: /> redis-cli
- 判断该键是否存在,存在返回1,否则返回0
redis 127.0.0.1:6379>exists mykey (integer) 0
- 如上段代码:该键并不存在,因此append命令返回当前Value的长度
redis 127.0.0.1:6379> append mykey "hello" (integer) 5
- 如上:该键已经存在,因此返回追加后Value的长度
redis 127.0.0.1:6379>append mykey " world" (integer) 11
- 通过get命令获取该键,以判断append的结果
redis 127.0.0.1:6379>get mykey "hello world"
- 通过set命令为键设置新值,并覆盖原有值
redis 127.0.0.1:6379>set mykey "this is a test" OK redis 127.0.0.1:6379>get mykey "this is a test"
- 获取指定Key的字符长度,等效于C库中strlen函数
redis 127.0.0.1:6379>strlen mykey (integer) 14
3.2. INCR/DECR/INCRBY/DECRBY:
- 设置Key的值为20
redis 127.0.0.1:6379>set mykey 20 OK
- 该Key的值递增1
redis 127.0.0.1:6379>incr mykey (integer) 21
- 该Key的值递减1
redis 127.0.0.1:6379>decr mykey (integer) 20
- 删除已有键
redis 127.0.0.1:6379>del mykey (integer) 1
- 对空值执行递减操作,其原值被设定为0,递减后的值为-1
redis 127.0.0.1:6379>decr mykey (integer) -1 redis 127.0.0.1:6379>del mykey (integer) 1
- 对空值执行递增操作,其原值被设定为0,递增后的值为1
redis 127.0.0.1:6379> incr mykey (integer) 1
- 将该键的Value设置为不能转换为整型的普通字符串
redis 127.0.0.1:6379>set mykey hello OK
- 在该键上再次执行递增操作时,Redis将报告错误信息
redis 127.0.0.1:6379>incr mykey (error) ERR value is not an integer or out of range redis 127.0.0.1:6379>set mykey 10 OK redis 127.0.0.1:6379>decrby mykey 5 (integer) 5 redis 127.0.0.1:6379>incrby mykey 10 (integer) 15
3.3. GETSET
- 将计数器的值原子性的递增1
redis 127.0.0.1:6379>incr mycounter (integer) 1
- 在取计数器原有值的同时,并将其设置为新值,这两个操作原子性的同时完成
redis 127.0.0.1:6379>getset mycounter 0 "1"
- 查看设置后的结果
redis 127.0.0.1:6379>get mycounter "0"
3.4: SETEX
- 设置指定Key的过期时间为10秒
redis 127.0.0.1:6379>setex mykey 10 "hello" OK
- 通过ttl命令查看一下指定Key的剩余存活时间(秒数),0表示已经过期,-1表示永不过期
redis 127.0.0.1:6379>ttl mykey (integer) 4
- 在该键的存活期内我们仍然可以获取到它的Value
redis 127.0.0.1:6379>get mykey "hello"
- 该ttl命令的返回值显示,该Key已经过期
redis 127.0.0.1:6379>ttl mykey (integer) 0
- 获取已过期的Key将返回nil
redis 127.0.0.1:6379>get mykey (nil)
3.5: SETNX
- 删除该键,以便于下面的测试验证
redis 127.0.0.1:6379>del mykey (integer) 1
- 该键并不存在,因此该命令执行成功
redis 127.0.0.1:6379>setnx mykey "hello" (integer) 1
- 该键已经存在,因此本次设置没有产生任何效果
redis 127.0.0.1:6379>setnx mykey "world" (integer) 0
- 从结果可以看出,返回的值仍为第一次设置的值
redis 127.0.0.1:6379>get mykey "hello"
3.6: SETRANGE/GETRANGE
- 设定初始值
redis 127.0.0.1:6379>set mykey "hello world" OK
- 从第六个字节开始替换2个字节(dd只有2个字节)
redis 127.0.0.1:6379>setrange mykey 6 dd (integer) 11
- 查看替换后的值
redis 127.0.0.1:6379>get mykey "hello ddrld"
- offset已经超过该Key原有值的长度了,该命令将会在末尾补0
redis 127.0.0.1:6379>setrange mykey 20 dd (integer) 22
- 查看补0后替换的结果
redis 127.0.0.1:6379>get mykey "hello ddrld\x00\x00\x00\x00\x00\x00\x00\x00\x00dd"
- 删除该Key
redis 127.0.0.1:6379>del mykey (integer) 1
- 替换空值
redis 127.0.0.1:6379>setrange mykey 2 dd (integer) 4
- 查看替换空值后的结果
redis 127.0.0.1:6379>get mykey "\x00\x00dd"
- 设置新值
redis 127.0.0.1:6379>set mykey "0123456789" OK
- 截取该键的Value,从第一个字节开始,到第二个字节结束
redis 127.0.0.1:6379>getrange mykey 1 2 "12"
- 20已经超过Value的总长度,因此将截取第一个字节后面的所有字节
redis 127.0.0.1:6379>getrange mykey 1 20 "123456789"
3.7: SETBIT/GETBIT
redis 127.0.0.1:6379>del mykey (integer) 1
- 设置从0开始计算的第七位BIT值为1,返回原有BIT值0
redis 127.0.0.1:6379> setbit mykey 7 1 (integer) 0
- 获取设置的结果,二进制的0000 0001的十六进制值为0x01
redis 127.0.0.1:6379>get mykey "\x01"
- 设置从0开始计算的第六位BIT值为1,返回原有BIT值0
redis 127.0.0.1:6379>setbit mykey 6 1 (integer) 0
- 获取设置的结果,二进制的0000 0011的十六进制值为0x03
redis 127.0.0.1:6379>get mykey "\x03"
- 返回了指定Offset的BIT值
redis 127.0.0.1:6379>getbit mykey 6 (integer) 1
- Offset已经超出了value的长度,因此返回0
redis 127.0.0.1:6379>getbit mykey 10 (integer) 0
3.8:MSET/MGET/MSETNX
- 批量设置了key1和key2两个键
redis 127.0.0.1:6379>mset key1 "hello" key2 "world" OK
- 批量获取了key1和key2两个键的值
redis 127.0.0.1:6379>mget key1 key2 1) "hello" 2) "world"
- 批量设置了key3和key4两个键,因为之前他们并不存在,所以该命令执行成功并返回1
redis 127.0.0.1:6379>msetnx key3 "stephen" key4 "liu" (integer) 1 redis 127.0.0.1:6379>mget key3 key4 1) "stephen" 2) "liu"
- 批量设置了key3和key5两个键,但是key3已经存在,所以该命令执行失败并返回0
redis 127.0.0.1:6379>msetnx key3 "hello" key5 "world" (integer) 0
- 批量获取key3和key5,由于key5没有设置成功,所以返回nil
redis 127.0.0.1:6379>mget key3 key5 1) "stephen" 2) (nil)