Redis的value类型及编码方式介绍——string

如果value类型是string,那么我们存入的时候是什么,编码的时候就是什么,不会进行任何转换(已二进制方式存储),其不仅可以存文本数据,还包括整数,json,xml等。

我们来讲一下其类型的相关命令

1.set

之前我们提到过,set key value的用法,其还有额外的选项

我们可以把设置过期时间命令写在一块

set key value expire seconds NX\|XX

\[\]代表写不写都行,|代表只能二选一或都不选,后面的NX和XX是啥

如果选项带了NX:代表如果Redis中没有这个key,才设置,key若存在则不作为(返回nil)

XX:key存在,则更新key对应的value(以及对应的过期时间),key不存在不作为(返回nil)

如果没写此选项:key不存在,创建新键值对,key存在,覆盖原有的value(数据结构可能改变)

并且,原来的ttl也会失效

2.get

也提到过,提醒一下,一定要确保value是string类型才能get不然会报错

为了保证高效性,如果我们有多个key要设置和多个value要获取,就要输入多次get和set,然而每次都会有一定开销,为了多合一我们有mset和mget

语法:mset key1 value1 key2,value2.....

mget key1 key2 .....

除此之外,还有

setnx:给key对应的value设置过期时间(key不存在的情况下,存在则失败)

setex:设置key的过期时间(秒) psetex(毫秒)

3.加减操作命令

incr:value+1

incrby :value+n

decr: value -1

decrby : value -n

incrbyfloat : value +/- 小数

语法:incr key

返回+1后的数(对应的value必须是整数不然会报错,虽然以字符串形式存储)

并且value不可大于long long的范围

如果key不存在,就会创建key并默认value为0再加1返回1

incrby key n,其他规则和上述相同

decr key 和incr key相同,功能为减法(incrby也可以实现减法 +(-1),功能重合)

decrby key n和incrbyfloat key n同理

4.append

追加/拼接字符串

语法:append key value

在指定key后再加上value字符串(前提key对应的value是string类型)如果key不存在,此命令等同于set。成功返回拼接后的长度(字节)一个汉字三个字节(utf8)set汉字时get返回对应的编码(16进制)如果想显示汉字,启动redis时加 --raw

5.getrange

获取字符串的子串(substr)

getrange key start end(左闭右闭)下标依旧从0开始

特别的是,Redis支持负数下标 -1代表倒数第一个位置 0,-1代表整个字符串

注:切汉字需要以3字节为单位进行切割,否则会不完整

6.setrange

字符串替换

setrange key offset value

在串的第offset(偏移量开始覆盖为value)包括offset

返回替换后的长度,覆盖的时候同样注意汉字的切割问题

可以操作不存在的key,并在0,offset范围生成字节0x00

7.strlen

strlen key 返回字符串长度(字节)

string的编码方式(object encoding key查看)

int :8字节长整型(long long)

小数用字符串来存

embstr:<=39字节字符串

raw:>39字节字符串(二者不绝对)

string的应用场景

一、缓存

应用层访问数据时,先访问Redis,如果有直接返回,不再访问数据库

如果Redis没找到,读取MySQL,返回数据给应用层的同时把数据写进Redis

二、计数功能

比如利用上面的命令统计视频播放次数

三、session会话

利用Redis与负载均衡机制记录多个常用的session对话(把所有session放入Redis服务器,每个负载均衡的服务器只要去Redis查找即可),便于多次查找且对话

四、手机验证码

在有效时间内把验证码存入Redis并设置过期时间,过了时间再输入也无效了,同时有时候会显示每隔一定时间只能获取一次(防止Redis服务器压力过大)

相关推荐
bksczm20 分钟前
MySQL基础之数据类型
数据库·mysql
youm200332 分钟前
【学习笔记】reids的数据类型
redis·笔记·学习
涛思数据(TDengine)33 分钟前
存储成本降低80%,Zendure用TDengine支撑117万台设备的能源数据分析
大数据·数据库·人工智能·数据分析·时序数据库·tdengine·工业
shirsl36 分钟前
数据开发每日面试题 Day 1
大数据·数据库·sql·big data
2601_960356382 小时前
消费者洞察岗项目准备清单:SQL、问卷、用户分层与可视化
大数据·数据库·sql
西瓜拿铁好喝2 小时前
2026 语义缓存实战:把命中契约写进SPEC,MonkeyCode 云端跑通
人工智能·机器学习·缓存
三84410 小时前
redis防御加固与安全基线
数据库·redis·安全·应急响应·防御
lhldsg10 小时前
全民健身解决方案小程序开发:从0到1的技术实战
java·数据库·需求分析
SendTomo10 小时前
【技术交流】从0到1构建一个汉字学习平台:汉字吧(hanzi8.com)的技术架构猜想
redis·mysql·nginx·php·个人开发