前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Redis】Redis 字符串数据操作 ① ( 访问字符串值数据 | 操作数据库中的字符串数据 | 数字数据操作 | 原子操作 )

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

作者头像
韩曙亮
发布2023-03-30 19:08:50
9630
发布2023-03-30 19:08:50
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、Redis 中的 String 字符串类型


在 Redis 数据库 中 , String 字符串 类型 是 二进制安全 的 , 可以将 图片 , 视频 序列化为 字符串数据存储 , 然后取出时再反序列化为 原数据类型 ;

在 Redis 中 , 键 Key 对应的 字符串 类型的 值 Value 最高 可存储 512 MB ;

二、访问字符串值数据


1、设置字符串值数据

执行

代码语言:javascript
复制
set key value

命令 , 可以 向 当前 数据库中 添加数据 , 其中 key 是 键 , value 是对应的值 , 键值对为 key = value ;

如果 多次 向 相同的 key 中存储数据 , 后者会将前者覆盖 ;

代码示例 :

代码语言:javascript
复制
127.0.0.1:6379>
127.0.0.1:6379> set name Tom
OK
127.0.0.1:6379> get name
"Tom"
127.0.0.1:6379> set name Jerry
OK
127.0.0.1:6379> get name
"Jerry"
127.0.0.1:6379>

2、读取字符串值数据

执行

代码语言:javascript
复制
get key

命令 , 可以 读取当前 数据库 中 键 key 对应的数据 ;

3、键不存在时设置字符串值数据

执行

代码语言:javascript
复制
setnx key value

命令 , 可以 向 当前 数据库中 添加数据 , 只有当该 键 不存在时 , 才能设置成功 , 否则无法设置 ;

代码示例 : name 原来的值为 Tom , 调用 setnx 命令设置 name 值设置失败 , 如果设置 name1 值 , 则设置成功 ;

代码语言:javascript
复制
127.0.0.1:6379> get name
"Tom"
127.0.0.1:6379> setnx name Jerry
(integer) 0
127.0.0.1:6379> get name
"Tom"
127.0.0.1:6379> setnx name1 Jerry
(integer) 1
127.0.0.1:6379> get name1
"Jerry"
127.0.0.1:6379>

三、操作数据库中的字符串数据


1、追加字符串值

执行

代码语言:javascript
复制
append key value

命令 , 可以 向 key 键对应的 value 值 字符串 数据 后 , 追加一个字符串 , 追加的内容自动添加的原字符串的末尾 ;

代码示例 : 原来 name 键存储的值为 Jerry , 在后面追加一个 Cruise ;

代码语言:javascript
复制
127.0.0.1:6379> get name
"Jerry"
127.0.0.1:6379>
127.0.0.1:6379> append name Cruise
(integer) 11
127.0.0.1:6379> get name
"JerryCruise"
127.0.0.1:6379>

2、获取字符串值长度

执行

代码语言:javascript
复制
strlen key value

命令 , 可以 获取 key 键对应的 Value 字符串值 的 字符串长度 ;

代码示例 : 原来 name 键存储的值为 Tom , 长度为 3 ;

四、数字数据操作


1、数字自增 1

执行

代码语言:javascript
复制
incr key

命令 , 可以 将 键 key 中存储的 数值 自增 1 , 如果 没有该 key 键 , 则插入数据 , 值 Value 为 1 ;

该操作 只能 针对 数字 操作 , 对其它类型数据操作 无效 , 会报如下错误 :

代码语言:javascript
复制
(error) ERR value is not an integer or out of range

代码示例 :

  • age=18 的数据执行自增操作 , 存储的数据变为 19 ;
  • name=Tom 数据执行自增操作 , 直接报错 (error) ERR value is not an integer or out of range
  • 数据库中没有 age2 键 , 对 age2 进行自增操作 , 会插入 age2=1 数据 ;
代码语言:javascript
复制
127.0.0.1:6379> get age
"18"
127.0.0.1:6379>
127.0.0.1:6379> incr age
(integer) 19
127.0.0.1:6379>
127.0.0.1:6379> get age
"19"
127.0.0.1:6379> incr name
(error) ERR value is not an integer or out of range
127.0.0.1:6379>
127.0.0.1:6379> incr age2
(integer) 1
127.0.0.1:6379>
127.0.0.1:6379> get age2
"1"
127.0.0.1:6379>

2、数字自减 1

执行

代码语言:javascript
复制
decr key

命令 , 可以 将 键 key 中存储的 数值 自减 1 , 如果 没有该 key 键 , 则插入数据 , 值 Value 为 -1 ;

该操作 只能 针对 数字 操作 , 对其它类型数据操作 无效 , 会报如下错误 :

代码语言:javascript
复制
(error) ERR value is not an integer or out of range

代码示例 :

  • age=19 的数据执自减操作 , 存储的数据变为 18 ;
  • name=Tom 数据执行自增操作 , 直接报错 (error) ERR value is not an integer or out of range
  • 数据库中没有 age3 键 , 对 age3 进行自减操作 , 会插入 age3=-1 数据 ;
代码语言:javascript
复制
127.0.0.1:6379> decr age
(integer) 18
127.0.0.1:6379> decr name
(error) ERR value is not an integer or out of range
127.0.0.1:6379> decr age3
(integer) -1
127.0.0.1:6379> get age3
"-1"
127.0.0.1:6379>

3、数字增加指定步长

执行

代码语言:javascript
复制
incrby key 10

命令 , 步长值为 10 , 可以 将 键 key 中存储的 数值 增加 10 , 如果 没有该 key 键 , 则插入数据 , 值 Value 为 10 ;

该操作 只能 针对 数字 操作 , 对其它类型数据操作 无效 , 会报如下错误 :

代码语言:javascript
复制
(error) ERR value is not an integer or out of range

代码示例 :

代码语言:javascript
复制
127.0.0.1:6379> incrby age 20
(integer) 38
127.0.0.1:6379>

4、数字减少指定步长

执行

代码语言:javascript
复制
decrby key 10

命令 , 步长值为 10 , 可以 将 键 key 中存储的 数值 减少 10 , 如果 没有该 key 键 , 则插入数据 , 值 Value 为 -10 ;

该操作 只能 针对 数字 操作 , 对其它类型数据操作 无效 , 会报如下错误 :

代码语言:javascript
复制
(error) ERR value is not an integer or out of range

代码示例 :

代码语言:javascript
复制
127.0.0.1:6379> decrby age 18
(integer) 20
127.0.0.1:6379>
127.0.0.1:6379> decrby age4 10
(integer) -10
127.0.0.1:6379>

五、原子操作


以上 数值操作 incr , decr , incrby , decrby 操作 , 都是原子操作 ;

原子操作 不会被 线程调度 打断 , 如果在执行 原子操作 过程中 , 进行线程调度 , 需要等待 原子操作执行完毕后 , 才能开始进行调度 ;

在 Redis 中的 自增 , 自减 , 是原子操作 , 执行过程不可打断 ;

但是 在 Java 中 , 自增操作 不是原子操作 , 如 i++ 操作 , 由如下原子操作组成 :

  • 第一步 : 取值
  • 第二步 : 自增 +1 操作
  • 第三步 : 赋值

如果线程调度时 , 正好卡在中间步骤 , 那么 Java 自增操作就会被打断 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、Redis 中的 String 字符串类型
  • 二、访问字符串值数据
    • 1、设置字符串值数据
      • 2、读取字符串值数据
        • 3、键不存在时设置字符串值数据
        • 三、操作数据库中的字符串数据
          • 1、追加字符串值
            • 2、获取字符串值长度
            • 四、数字数据操作
              • 1、数字自增 1
                • 2、数字自减 1
                  • 3、数字增加指定步长
                    • 4、数字减少指定步长
                    • 五、原子操作
                    相关产品与服务
                    对象存储
                    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档