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服务器压力过大)

相关推荐
剩下了什么7 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
山峰哥7 小时前
数据库工程与SQL调优——从索引策略到查询优化的深度实践
数据库·sql·性能优化·编辑器
较劲男子汉8 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
java搬砖工-苤-初心不变8 小时前
MySQL 主从复制配置完全指南:从原理到实践
数据库·mysql
山岚的运维笔记10 小时前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
roman_日积跬步-终至千里10 小时前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
汇智信科10 小时前
打破信息孤岛,重构企业效率:汇智信科企业信息系统一体化运营平台
数据库·重构
野犬寒鸦11 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
indexsunny11 小时前
互联网大厂Java面试实战:Spring Boot微服务在电商场景中的应用与挑战
java·spring boot·redis·微服务·kafka·spring security·电商
晚霞的不甘12 小时前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d