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

相关推荐
fen_fen19 小时前
Oracle建表语句示例
数据库·oracle
砚边数影20 小时前
数据可视化入门:Matplotlib 基础语法与折线图绘制
数据库·信息可视化·matplotlib·数据可视化·kingbase·数据库平替用金仓·金仓数据库
orange_tt21 小时前
Djiango配置Celery
数据库·sqlite
云小逸21 小时前
【nmap源码学习】 Nmap网络扫描工具深度解析:从基础参数到核心扫描逻辑
网络·数据库·学习
肉包_5111 天前
两个数据库互锁,用全局变量互锁会偶发软件卡死
开发语言·数据库·c++
霖霖总总1 天前
[小技巧64]深入解析 MySQL InnoDB 的 Checkpoint 机制:原理、类型与调优
数据库·mysql
ALex_zry1 天前
Redis Cluster 分布式缓存架构设计与实践
redis·分布式·缓存
此刻你1 天前
常用的 SQL 语句
数据库·sql·oracle
それども1 天前
分库分表的事务问题 - 怎么实现事务
java·数据库·mysql
·云扬·1 天前
MySQL Binlog 配置指南与核心作用解析
数据库·mysql·adb