发布时间:2024-03-01 16:30:01
发布时间:2024-03-01 16:30:01
string(字符串)是 Redis 中最简单的数据类型。我们知道,Redis 所有数据类型都是以 key 作为键,通过检索这个 key 就可以获取相应的 value 值。Redis 存在多种数据类型,比如字符串、列表、哈希散列等,它们对应的 value 结构各不相同。本节先讲解字符串的相关知识。struct sdshdr{ //记录buf数组中已使用字符的数量,等于 SDS 保存字符串的长度 int len; //记录 buf 数组中未使用的字符数量 int free; //字符数组,用于保存字符串 char buf[];从上述结构体可以看出,Redis string 将字符串存储到字符类型的
buf[]
中,并使用 len
、free
对buf[]
数组的长度和未使用的字符数进行描述。len
为 4 的 “java\0”字符串,并且未使用的字符数free
为 0。你可能注意到 buf 数组存储的字符串仍然以 C语言字符格式的“\0”结尾的,这样做的目的是为了能够重用 C语言库 在 C语言中,字符串类型的结尾以空字符串 ‘\0’来标识的。但在某些情况下,字符串可能会包含具有实际意义的“空字符”,此时 C语言就无法正确的存取这个字符了,而 Redis 通过 len 来标识字符串的总长度,从而保证了数据的二进制安全特性。
redis 127.0.0.1:6379> COMMAND KEY_NAME
SET
命令的格式如下:127.0.0.1:6379> SET key value [EX seconds|PX milliseconds] [NX|XX]其中
[]
内代表可选参数,其含义如下所示:
SET
命令演示:在 key 不存在的情况下设置过期时间为 60s:
#key的过期时间为60s,过期后自动删除 redis 127.0.0.1:6379> SET www.biancheng.net "hello编程帮" EX 60 NX OK # 查询 key 对应的值 redis 127.0.0.1:6379> GET www.biancheng.net "hello编程帮"
命令 | 说明 |
---|---|
SET key value | 用于设定指定键的值。 |
GET key | 用于检索指定键的值。 |
GETRANGE key start end | 返回 key 中字符串值的子字符。 |
GETSET key value | 将给定 key 的值设置为 value,并返回 key 的旧值。 |
GETBIT key offset | 对 key 所存储的字符串值,获取其指定偏移量上的位(bit)。 |
MGET key1 [key2..] | 批量获取一个或多个 key 所存储的值,减少网络耗时开销。 |
SETBIT key offset value | 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。 |
SETEX key seconds value | 将值 value 存储到 key中 ,并将 key 的过期时间设为 seconds (以秒为单位)。 |
SETNX key value | 当 key 不存在时设置 key 的值。 |
SETRANGE key offset value | 从偏移量 offset 开始,使用指定的 value 覆盖的 key 所存储的部分字符串值。 |
STRLEN key | 返回 key 所储存的字符串值的长度。 |
MSET key value [key value ...] | 该命令允许同时设置多个键值对。 |
MSETNX key value [key value ...] | 当指定的 key 都不存在时,用于设置多个键值对。 |
PSETEX key milliseconds value | 此命令用于设置 key 的值和有过期时间(以毫秒为单位)。 |
INCR key | 将 key 所存储的整数值加 1。 |
INCRBY key increment | 将 key 所储存的值加上给定的递增值(increment)。 |
INCRBYFLOAT key increment | 将 key 所储存的值加上指定的浮点递增值(increment)。 |
DECR key | 将 key 所存储的整数值减 1。 |
DECRBY key decrement | 将 key 所储存的值减去给定的递减值(decrement)。 |
APPEND key value | 该命令将 value 追加到 key 所存储值的末尾。 |
SET/GET
命令只能一次设置/查询一个键值对,这样虽然简单,但是效率不高。为了提高命令的执行效率,Redis 提供了可以批量操作多个字符串的读写命令 MSET/MGET(“M”代表“Many”),它们允许你一次性设置或查询多个键值对,这样就有效地减少了网络耗时。redis 127.0.0.1:6379> GETRANGE KEY_NAME start end注意,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内的闭区间)
127.0.0.1:6379> SET website www.biancheng.net OK #索引值 127.0.0.1:6379> GETRANGE website 0 4 "www.b" #使用负数索引 127.0.0.1:6379> GETRANGE website 0 -1 "www.biancheng.net" 127.0.0.1:6379>
127.0.0.1:6379> GETSET num first "6" 127.0.0.1:6379> GETSET num second "first" #查看长度值 127.0.0.1:6379> strlen num (integer) 6注意:num 之前存储的值为“6”,所以结果返回“6”。
#设置过期时间为60s 127.0.0.1:6379> SETEX www.biancheng.net 60 hello OK #查看过期时间 127.0.0.1:6379> ttl www.biancheng.net (integer) 5
#返回0,说明命令执行失败 127.0.0.1:6379> MSETNX www.biancheng.net hello title world (integer) 0 #删除重复的键 127.0.0.1:6379> del www.biancheng.net (integer) 1 #重新执行 127.0.0.1:6379> MSETNX www.biancheng.net hello title world (integer) 1由于 key 之前已经存在,所以第一次执行失败,当删除存在的后,命令就会执行成功。
redis 127.0.0.1:6379> SETRANGE KEY_NAME OFFSET VALUE
127.0.0.1:6379> SET word "hello world" OK 127.0.0.1:6379> SETRANGE word 6 www.biancheng.net (integer) 23 127.0.0.1:6379> GET word "hello www.biancheng.net"在线练习工具:https://try.redis.io/