博客网站登录,怎么免费做网站教程,微信小程序开发文档,网站导航html源码概述
Redis中的字符串直接按照二进制的数据存储#xff0c;不会有任何的编码转换#xff0c;因此存放什么样#xff0c;取出来的时候就什么样。而MySQL默认的字符集是拉丁文#xff0c;如果插入中文就会失败
Redis中的字符串类型不仅可以存放文本数据#xff0c;还可以存…概述
Redis中的字符串直接按照二进制的数据存储不会有任何的编码转换因此存放什么样取出来的时候就什么样。而MySQL默认的字符集是拉丁文如果插入中文就会失败
Redis中的字符串类型不仅可以存放文本数据还可以存放整数JSONxml图片视频音频等等但是音频视频的体积很大Redis中对String类型限制大小为512mb
常用命令
SET
通过自动补全可以看到set命令的完整语法 Redis文档中语法格式说明
符号解释[ ]代表可选项[ ]和[ ]之间可以同时存在|代表或者的意思多个|只能出现一个
value后面的ex|px代表着过期时间 也就是说
set key value ex 10等价于
set key value
expire key 10通过简化代码数量减少网络通信的次数提升显效率 并且一句代码还可以保证原子性Redis分布式锁中会有所体现后面的blog会详细讲解 除此以外还可以这样写set命令
setnx
setex如果key存在新的value覆盖了旧的value数据的类型可能会被改变key的生存时间也会失效
演示代码
使用flushall可以清除Redis中所有key
ex nx xx setnx
setnx key secondssetex
setex key value secondspsetex
psetex key millionsecondsGET
获取key对应的value 需要注意的是get只适用于字符串类型如果是其他类型则会报错
MSET 一次插入多个键值对key和value交替写时间复杂度O(N)N是key的数量
MGET 一次获取多个value时间复杂度O(N)N是key的数量
增减命令
将string类型的value当作数字进行加减操作时间复杂度都是O1
命令操作incrvalue 1incrbyvalue ndecrvalue - 1decrbyvalue - nincrbyfloatvalue /- 小数
incr
incr key此时的key必须是一个64位内的整数操作的返回值就是value1后的结果相当于i 如果key不是合理整数则报错 如果直接incr一个不存在的key那么就会把这个key的value当作0
incrby
incrby key increment同理如果针对一个不存在的key进行incrby那么会将这个key的value当作0处理
decr
逻辑和incr一致
decr key decrby
逻辑和incrby一致
decrby key decrementincrbyfloat
其他逻辑和incrby一致但是由于没有decrbyfloat因此只能通过incrbyfloat key -n的操作来实现减法
incrbyfloat key incrementappend
如果key存在拼接key对应的value和给定字符串的内容返回拼接完的字符串有多少个字节utf8中的一个汉字通常是3个字节
append key value如果key不存在那么和直接使用set一样 如果插入汉字取出的时候客户端不会自动翻译二进制数据而是将二进制转换为十六进制 可以在Redis启动的时候加上–raw的选项就可以解决上述问题了退出Redis使用ctrl d
getrange
相当于Java中的substring切分value中的部分字符串范围由start和end确定左闭右闭区间
Redis中的下标从1开始并且支持负数如果是-1那就代表倒数第一个元素 len - 1
getrange key start end但是由于中文一般是3个字节那么在使用getrange后切割的结果可能不是一个完整的汉字了
setrange
将字符串中的部分子串替换为别的内容返回值是替换之后的字符串长度
setrange key offset value其中的offset是从第几个字节开始替换替换的长度就是value的长度 如果对一个不存在的key进行setrange并不会报错而是在偏移量之前添加空字节0x00
同样的如果value是一段中文那么setrange可能会出错
strlen
获取字符串的长度单位是字节如果value不是string类型则报错如果key不存在返回0
strlen keyString的编码方式
编码方式说明int64位/8字节的整数embstr压缩字符串 小于等于39个字节的字符串raw普通字符串 大于39个字节的字符串
通过object encoding key可以查看对应key的编码方式 在Redis中存储小数其实和存储一个字符串一样因此每次对小数进行算数操作都需要把字符串转换为小数然后再进行计算算完再转为小数
string类型的应用场景
作为缓存直接返回数据 上述策略中随着时间推移越来越多的key从mysql中存入Redis使Redis的数据变得过多那么有如下两种解决方案
设置key的过期时间Redis提供淘汰策略
计数功能 Redis中只记录视频的播放次数并且异步同步数据到统计数据的数据库
共享会话 http中的cookie是用来实现用户信息的保存的其需要session的配合完成。服务器这边存储了用户的数据而cookie是让浏览器存储用户的身份标识sessionId
但如果应用了分布式系统存在多个应用服务器。与用户登录时可能将用户会话信息存储在a服务器中但是用户下次访问请求可能发送到c服务器中而c服务器中没有用户的会话信息
解决方法是所有的服务器都把用户的会话信息存放在Redis中
手机验证码
服务器将用户的手机号当作key验证码当作value存放在Redis中并设置过期时间用户在指定时间内提交验证码给服务器服务器通过手机号向Redis获得正确的验证码并与用户发送过来的进行比对返回true或false