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

相关推荐
小陈工42 分钟前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
科技小花5 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸5 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain5 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希6 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神6 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员6 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java6 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿6 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴6 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存