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

相关推荐
ShuiShenHuoLe2 小时前
maven配置阿里源
java·数据库·maven
码农爱学习2 小时前
C语言结构体对齐是怎么计算
java·c语言·数据库
小杨同学492 小时前
C 语言实战:堆内存存储字符串 + 多种递归方案计算字符串长度
数据库·后端·算法
小码编匠2 小时前
完美替代 Navicat,一款开源免费、集成了 AIGC 能力的多数据库客户端工具!
数据库·后端·aigc
linuxxx1102 小时前
正则匹配应用小案例
数据库·正则表达式
末日汐3 小时前
磁盘与文件系统
linux·运维·数据库
win x3 小时前
Redis集群
java·数据库·redis
qq_12498707533 小时前
基于Spring Boot的“味蕾探索”线上零食购物平台的设计与实现(源码+论文+部署+安装)
java·前端·数据库·spring boot·后端·小程序
七夜zippoe3 小时前
缓存策略:从本地到分布式架构设计与Python实战
分布式·python·缓存·lfu·lru