RedisRedis 字符串数据操作 ② ( 多个数据操作 | 值的范围操作 | 值的时间操作 | 简单动态字符 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RedisRedis 字符串数据操作 ② ( 多个数据操作 | 值的范围操作 | 值的时间操作 | 简单动态字符 )相关的知识,希望对你有一定的参考价值。

文章目录





一、多个数据操作




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 ...

命令 , 可以 在 对应的 键 key 不存在时 , 向 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 空间 ;

以上是关于RedisRedis 字符串数据操作 ② ( 多个数据操作 | 值的范围操作 | 值的时间操作 | 简单动态字符 )的主要内容,如果未能解决你的问题,请参考以下文章

RedisRedis 字符串数据操作 ① ( 访问字符串值数据 | 操作数据库中的字符串数据 | 数字数据操作 | 原子操作 )

RedisRedis 列表 List 操作 ( 查询操作 | 根据下标获取元素 | 获取列表长度 | 增操作 | 插入值 | 删操作 | 移除值 | 修改操作 | 设置列表指定索引的值 )

RedisRedis的常规操作命令

深入了解 RedisRedis 数据类型及操作

RedisRedis 有序集合 Zset 操作 ( 简介 | 查询操作 | 增加操作 | 删除操作 | 修改操作 )

Redis基础