文章目录
- 一、多个数据操作
- 1、设置多个键值对
- 2、获取多个键对应的值
- 3、当键不存在时设置多个键值对
- 二、值的范围操作
- 1、获取值的范围内容
- 2、设置值的范围内容
- 三、值的时间操作
- 1、设置键值对同时设置过期时间
- 2、设置新值并获取旧值
- 四、简单动态字符
一、多个数据操作
1、设置多个键值对
执行
mset key1 value1 key2 value2 ...
命令 , 可以 向 Redis 数据库中设置多个键值对数据 ;
代码示例 : 使用一条命令 , 向 redis 数据库中插入 name=Tom
, age=18
两个键值对数据 ;
127.0.0.1:6379> mset name Tom age 18
OK
127.0.0.1:6379>
127.0.0.1:6379> get name
"Tom"
127.0.0.1:6379> get age
"18"
127.0.0.1:6379>
2、获取多个键对应的值
执行
mset key1 key2 ...
命令 , 可以 从 Redis 数据库中 读取 多个键 对应的数据 ;
代码示例 : 使用一条命令 , 向 redis 数据库中插入 name=Tom
, age=18
两个键值对数据 ;
127.0.0.1:6379> mset name Tom age 18
OK
127.0.0.1:6379>
127.0.0.1:6379> get name
"Tom"
127.0.0.1:6379> get age
"18"
127.0.0.1:6379> mget name age
1) "Tom"
2) "18"
127.0.0.1:6379>
3、当键不存在时设置多个键值对
执行
msetnx key1 value1 key2 value2 ...
命令 , 可以向 Redis 数据库中设置多个键值对数据 ;
该操作是 原子操作 , 如果 其中有 键 key 存在 , 则所有的 键值对 插入失败 ;
代码示例 : 插入 name1=Jerry age1=16
键值对成功 , 因为 name1 和 age1 都不存在 , 插入 name2=Jack age=10
键值对失败 , 因为 age 键已经存在 , 由于该操作是原子操作 , 整个操作都以失败告终 ;
127.0.0.1:6379> msetnx name1 Jerry age1 16
(integer) 1
127.0.0.1:6379> mget name1 age1
1) "Jerry"
2) "16"
127.0.0.1:6379> msetnx name2 Jack age 10
(integer) 0
127.0.0.1:6379> keys *
1) "name1"
2) "age"
3) "age1"
4) "name"
127.0.0.1:6379>
二、值的范围操作
1、获取值的范围内容
执行
getrange key 0 2
命令 , 获取 键 key 对应的值的 从 0 开始 到 2 结束 的内容 , 其中包括 0 和 2 两个边界索引对应的值 ;
上述操作 类似于 Java 中的 String#subString 函数 ;
代码示例 : 获取 name1
键对应的 Jerry
值的 从 0 开始到 2 结束的范围内容 , 为 Jer
;
127.0.0.1:6379> get name1
"Jerry"
127.0.0.1:6379> getrange name1 0 2
"Jer"
127.0.0.1:6379>
2、设置值的范围内容
执行
setrange key 2
命令 , 设置 键 key 对应的值的 从 2 开始 的内容 , 相当于在值的 2 索引位置插入内容 , 并覆盖后面的值 ; 索引 2 位置的值也被覆盖了 ;
代码示例 : 设置 name1
键对应的 Jerry
值的 从 2 开始 的范围内容 , 最终变成 Je123
;
127.0.0.1:6379> setrange name1 2 123
(integer) 5
127.0.0.1:6379> get name1
"Je123"
127.0.0.1:6379>
三、值的时间操作
1、设置键值对同时设置过期时间
执行
setex key 20 value
命令 , 可以 向 Redis 数据库中设置 key=value 键值对数据 , 并同时为该键值对数据 设置 20 秒过期时间 ;
代码示例 :
127.0.0.1:6379> setex name2 20 Tom
OK
127.0.0.1:6379> ttl name2
(integer) 16
127.0.0.1:6379> ttl name2
(integer) 10
127.0.0.1:6379> ttl name2
(integer) 3
127.0.0.1:6379> ttl name2
(integer) -2
127.0.0.1:6379>
2、设置新值并获取旧值
执行
getset key value
命令 , 可以 向 Redis 数据库中设置 key=value 键值对数据 , 并 同时获取 该 键 key 之前的值 ;
代码示例 :
127.0.0.1:6379> get name
"Tom"
127.0.0.1:6379> getset name Jerry
"Tom"
127.0.0.1:6379> get name
"Jerry"
127.0.0.1:6379>
四、简单动态字符
Redis 字符串数据 本质是 简单动态字符串 ;
该 字符串 类似于 List 集合 , 其内存分配机制是 : 预先分配冗余空间 , 减少内存分配的频率 ;
如果 字符串 实际长度为 length , 实际上分配的空间高于实际长度
扩容机制 :
- 字符串小于 1MB 时 , 每次扩容增加一倍 ;
- 字符串大于 1MB , 每次扩容会多增加 1MB 空间 ;