string类型的使用以及编码方式

Redis 中所有的键的类型都是字符串类型,⼀个字符串的最⼤值不能超过 512 MB。

由于 Redis 内部存储字符串完全是按照⼆进制流的形式保存的,所以 Redis 是不处理字符集编码问题的,客⼾端传⼊的命令中使⽤的是什么字符集编码,就存储什么字符集编码。

例如输入你好,查询出来的却是\xe4\xbd\xa0\xe5\xa5\xbd
在这里插入图片描述

常见命令

set

将 string 类型的 value 设置到 key 中。如果 key 之前存在,则覆盖,⽆论原来的数据类型是什么。之前关于此 key 的 TTL 也全部失效。
语法:

 SET key value [expiration EX seconds|PX milliseconds] [NX|XX]

返回值:

  • 如果设置成功,返回 OK。
  • 如果由于 SET 指定了 NX 或者 XX 但条件不满⾜,SET 不会执⾏,并返回 (nil)。
  • NX ⸺只在 key 不存在时才进⾏设置,即如果 key 之前已经存在,设置不执⾏。
  • XX ⸺只在 key 存在时才进⾏设置,即如果 key 之前不存在,设置不执⾏。
127.0.0.1:6379> keys *
1) "key1"
2) "key"
127.0.0.1:6379> set key1 1  nx
(nil)
127.0.0.1:6379> set key 1 
OK

get

获取 key 对应的 value。如果 key 不存在,返回 nil。如果 value 的数据类型不是 string,会报错。

127.0.0.1:6379> lpush key2 1  2 3 4
(integer) 4
127.0.0.1:6379> get key2
(error) WRONGTYPE Operation against a key holding the wrong kind of value

语法:

get key

返回值:key 对应的 value,或者 nil 当 key 不存在。

127.0.0.1:6379> get key
"1"
127.0.0.1:6379> get key1
"1"

mset

⼀次性设置多个 key 的值。
语法:

MSET key value [key value ...]

返回值:永远是 OK

127.0.0.1:6379> mset key3 333 key4 444
OK

mget

⼀次性获取多个 key 的值。如果对应的 key 不存在或者对应的数据类型不是 string,返回 nil。
语法:

MGET key [key ...]

返回值:对应 value 的列表

127.0.0.1:6379> mget key key1
1) "1"
2) "1"

使⽤ mget / mset 由于可以有效地减少了⽹络时间,所以性能相较更⾼。要注意,每次批量操作所发送的键的数量也不是⽆节制的,否则可能造成单⼀命令执⾏时间过⻓,导致 Redis 阻塞

setnx

setnx 设置 key-value 但只允许在 key 之前不存在的情况下。
语法:

setnx key value

返回值:1 表⽰设置成功。0 表⽰没有设置。

127.0.0.1:6379> setnx key6 666
(integer) 1

incr

将 key 对应的 string 表⽰的数字加⼀。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错。
语法:

incr key

返回值:integer 类型的加完后的数值。

127.0.0.1:6379> incr key
(integer) 2
127.0.0.1:6379> incr key7
(integer) 1

incrby

将 key 对应的 string 表⽰的数字加上对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错。
语法:

INCRBY key decrement

返回值:integer 类型的加完后的数值。

127.0.0.1:6379> get key3
"333"
127.0.0.1:6379> incrby key3 333
(integer) 666

decr

将 key 对应的 string 表⽰的数字减⼀。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错。
语法:

DECR key

返回值:integer 类型的减完后的数值。

127.0.0.1:6379> get key
"2"
127.0.0.1:6379> decr key
(integer) 1

decrby

将 key 对应的 string 表⽰的数字减去对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错。
语法:

DECRBY key decrement

返回值:integer 类型的减完后的数值。

127.0.0.1:6379> get key3
"666"
127.0.0.1:6379> decrby key3 333
(integer) 333

incrbyfloat

将 key 对应的 string 表⽰的浮点数加上对应的值。如果对应的值是负数,则视为减去对应的值。如果key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的不是 string,或者不是⼀个浮点数,则报错。允许采⽤科学计数法表⽰浮点数。
语法:

INCRBYFLOAT key increment

返回值:加/减完后的数值。

127.0.0.1:6379> set key7 6.5
OK
127.0.0.1:6379> get key7
"6.5"
127.0.0.1:6379> incrbyfloat key7 0.5
"7"
127.0.0.1:6379> incrbyfloat key7 -1.5
"5.5"

append

如果 key 已经存在并且是⼀个 string,命令会将 value 追加到原有 string 的后边。如果 key 不存在,则效果等同于 SET 命令。
语法:

 APPEND KEY VALUE

返回值:追加完成之后 string 的⻓度。

127.0.0.1:6379> set key8 abc
OK
127.0.0.1:6379> append key8 defg
(integer) 7
127.0.0.1:6379> get key8
"abcdefg"

getrange

返回 key 对应的 string 的⼦串,由 start 和 end 确定(左闭右闭)。可以使⽤负数表⽰倒数。-1 代表倒数第⼀个字符,-2 代表倒数第⼆个,其他的与此类似。超过范围的偏移量会根据 string 的⻓度调整成正确的值。
语法:

 GETRANGE key start end

返回值:string 类型的⼦串

127.0.0.1:6379> get key8
"abcdefg"
127.0.0.1:6379> getrange key8 0 -1
"abcdefg"
127.0.0.1:6379> getrange key8 2 4
"cde"

setrange

覆盖字符串的⼀部分,从指定的偏移开始。
语法:

 SETRANGE key offset value

返回值:替换后的 string 的⻓度。

127.0.0.1:6379> get key8
"abcdefg"
127.0.0.1:6379> setrange key8 3 abc
(integer) 7
127.0.0.1:6379> get key8
"abcabcg"

strlen

获取 key 对应的 string 的⻓度。当 key 存放的类似不是 string 时,报错。
语法:

 STRLEN key

返回值:string 的⻓度。或者当 key 不存在时,返回 0。

127.0.0.1:6379> strlen key8
(integer) 7

小结:

命令执行效果时间复杂度
set key value [key value…]设置 key 的值是 valueO(k), k 是键个数
get key获取 key 的值O(1)
del key [key …]删除指定的 keyO(k), k 是键个数
mset key value [key value…]批量设置指定的 key 和 valueO(k), k 是键个数
mget key [key …]批量获取 key 的值O(k), k 是键个数
incr key指定的 key 的值 +1O(1)
decr key指定的 key 的值 -1O(1)
incrby key n指定的 key 的值 +nO(1)
decrby key n指定的 key 的值 -nO(1)
incrbyfloat key n指定的 key 的值 +nO(1)
append key value指定的 key 的值追加 valueO(1)
strlen key获取指定 key 的值的⻓度O(1)
setrange key offset value覆盖指定 key 的从 offset 开始的部分值O(n),n 是字符串⻓度, 通常视为 O(1)
getrange key start end获取指定 key 的从 start 到 end 的部分值O(n),n 是字符串⻓度, 通常视为 O(1)

内部编码

字符串类型的内部编码有 3 种:

  • int:8 个字节的⻓整型。
  • embstr:⼩于等于 39 个字节的字符串。
  • raw:⼤于 39 个字节的字符串。
    Redis 会根据当前值的类型和⻓度动态决定使⽤哪种内部编码实现。

使用场景

  1. 缓存(Cache)功能
    Redis 作为缓冲层,起到加速读写和降低后端压⼒的作⽤。
  2. 计数(Counter)功能
    视频的播放量计数点赞计数等
  3. 共享会话(Session)
    redis存储session
  4. 短信验证码
    登录时创建验证码设置失效时间,限制用户获取验证码频率等待。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/466527.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

放在你后口袋里的七种基本质量工具

以下是我反复看到的七种质量改进工具。这些质量工具中的大多数已经存在了一段时间,但这肯定不会降低它们的价值! 这些工具最大的优点是使用非常简单,并且可以在中快速使用Minitab统计软件或者从事,但你当然可以使用其他方法&…

【已解决】MySQL:常用的除法运算+精度处理+除数为0处理

目录 问题现象: 问题分析: 拓展: 1、除法运算: 拓展:MySQL中常用的几种除法运算 1、取整除法 2、浮点数除法 3、取余除法 4、向上取整除法 5、向下取整除法 2、运算结果的精度处理 1.1、浮点数 1.2、总位数 1.3、…

c++的const总结(转)

为什么使用const?采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下:…

什么是网站?为什么要搭建网站?

网站:简单来说,网站就是通过互联网来展示信息的页面集合。它可以在电脑或者手机上打开,提供各种功能,比如查看新闻、购买商品、搜索信息等。 一、建网站的目的:展示个人或企业的存在 网站建设的首要目的之一是展示个人…

十年追光者 | 一段人生故事,聆听《康岛天香》创始人李波的成长历程

​为了响应国家乡村振兴, 绿水青山就是金山银山, 中药材复兴等 国家政策,来自老家河南的李波女士,如今在海南澄迈县桥头镇 开启了她的沉香创业故事, 沉香树一直以来被誉为海南第四颗树, 从最早 20 亩沉香…

java入门 -输入和输出

输入输出 开发中大量会使用输入和输出,今天来总结一下Java语法阶段常使用的输入和输出。 输出 System.out 控制台输出信息。 不换行显示一行: System.out.print( ); System.out.print("hello "); System.out.print("java!");运行结…

JMeter压测SpringBoot项目

压力测试架构图如下: 配置JMeter 在JMeter的bin目录,双击jmeter.bat 新建一个测试计划,并右键添加线程组: 进行配置 一共会发生4万次请求。 ctrl + s保存; 添加http请求: 配置http请求: 配置断言,来判断当前请求是否成功: 正常响应如下:

Tomcat Session ID---会话保持

简单拓补图 一、负载均衡、反向代理 7-1nginx代理服务器配置 [rootdlnginx ~]#yum install epel-release.noarch -y ###安装额外源[rootdlnginx ~]#yum install nginx -y[rootdlnginx ~]#systemctl start nginx.service[rootdlnginx ~]#systemctl status nginx.service [ro…

机器人路径规划:基于Bug算法的机器人路径规划(提供Python代码)

一、Bug算法简介 Bug 算法是一种基于追踪障碍物的路径规划算法,它模拟了一种昆虫寻找巢穴的行为,因此得名Bug算法。Bug算法的基本思路是:当机器人遇到障碍物时,他会沿着障碍物的边缘行走,直到到达目标点。该算法可以分…

如何定期清理数据库中的无效数据?

企业的数据库在运行相当长一段时间后,都会出现无效数据的堆积,这些数据包含了过时、重复、错误、缺失(空字段)的数据,长期占据着宝贵的数据库空间。而在上云热潮的推动下,绝大多数企业已经将他们的业务数据…

Ingress 基于URL路由多个服务

文章目录 前言一、基于请求地址转发不同应用的pod1.创建一个nginx的pod和一个apache的pod及其各自的service2.创建ingress实现一个地址两个path分别访问nginx和apache3.验证根据域名web2.study.com的两个路径/foo和/bar来访问到不同的pod4.分别在nginx和apache的pod里创建网站目…

张驰咨询为领益智造打造精益六西格玛管理体系,助力苹果全球供应链优化

近日,领益智造精益六西格玛项目在总部启动,作为领益智造精益六西格玛管理战略合作伙伴,张驰咨询精益六西格玛咨询顾问团队已进驻领益智造总部,指导学员项目选择。作为管理创新的重要举措,领益智造在中国各大区超过10个…

1.MongoDB的特点与应用场景

什么是 MongoDB ? MongoDB 是基于 C 开发的 NOSQL 开源文档数据库 ,是最像关系型数据库的 nosql,功能也是最丰富的 nosql,它具有所以的可伸缩性,灵活性,高性能,高扩展性的优势。 大致有如下特…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Refresh)

可以进行页面下拉操作并显示刷新动效的容器组件。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 支持单个子组件。 从API version 11开始,Refresh子组件会跟随手势下拉而下移…

适口性猫粮哪个牌子肉源好性价比高?主食冻干性价比排行前十分享

随着科学养猫知识的普及,主食冻干喂养越来越受到养猫人的青睐。主食冻干不仅符合猫咪的饮食天性,还能提供均衡的营养,有助于维护猫咪的口腔和消化系统健康。然而,许多猫主人在选择主食冻干产品时感到迷茫。本文将深入探讨如何为猫…

前端基础篇-快速了解 Vue 前端框架(Vue 指令)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Vue 概述 2.0 Vue 指令 2.1 指令 - v-bind 2.2 指令 - v-model 2.3 指令 - v-on 2.4 指令 - v-if、v-else-if、v-else 2.5 指令 - v-show 2.6 指令 - v-for 3.0 生…

软件测试工程师教你如何做好职业发展规划

今天将为大家带来一篇关于软件测试工程师职业生涯阶段发展方向分析的文章,准备做测试人员和正在做测试的小伙伴们,我们一起来看一看吧。由于新时代下国内软件测试行业目前的发展迅速、需求旺盛,在国内的软件测试职位晋升一般要比国外快&#…

2024最全电商API接口 高并发请求 实时数据 支持定制 电商数据 买家卖家数据

电商日常运营很容易理解,就是店铺商品维护,上下架,评价维护,库存数量,协助美工完成制作详情页。店铺DSR,好评率,提升客服服务等等,这些基础而且每天都必须做循环做的工作。借助电商A…

宝马发生数据泄露事件,涉及中国、欧洲和美国三地

据悉,汽车巨头宝马的云存储服务器发生配置错误,导致包含敏感信息的私钥和内部数据泄露。 研究人员 Can Yoleri 在例行扫描时发现,宝马在微软 Azure 上的开发环境存储服务器被错误配置为公共访问,本应设置为私有。该存储服务器包含…