建设网站所采用的技术方案,wordpress sql插件,电子商务网站建设与管理实训总结,团购网站为什么做不走缓存过期时间很重要#xff01;redis是单线程的
对于内存过多的3中方案#xff1a;
惰性删除#xff1a;
在定时删除的基础上#xff0c;对于已经过期了的数据#xff0c;redis的随机选择算法一直没有选中这个数据#xff0c;所以导致它就一直没被删除#xff0c;但是…缓存过期时间很重要redis是单线程的
对于内存过多的3中方案
惰性删除
在定时删除的基础上对于已经过期了的数据redis的随机选择算法一直没有选中这个数据所以导致它就一直没被删除但是查询操作一旦查到它就把它给删了这就是惰性删除
定时删除
创建一个定时器到点删除这种方式对cpu不好得让cpu维护定时器
定期删除
每隔一段时间对数据进行一次检查删除过期的key。至于检查多少删除多少由算法决定。
内存淘汰策略8种策略 缓存穿透要查的redis没有就到mysql查第二次依旧如此这就是缓存穿透
缓存雪崩热点数据因过期被删除导致大量请求涌mysql
一大堆数据同时过了有效期然后又有很多对这些数据的需求
解决方案普通数据过期时间随机热点数据永不过期
redis突然挂掉导致重启后内存数据都没了 持久化为了在突然断电后重启能恢复到之前的状态
RDB默认开启一次遍历全部数据然后备份到本地dump.rdb快照方式
手动触发阻塞当前redis直到rdb完成。save 命令
自动触发save 60 1000 命令 60秒内如果超过1千个key被修改则写入到dump.rdb文件中fork子进程。
AOF默认关闭 把写命令记录下来像mysql一样写入到.aof文件中文件追加方式
先把记录放到临时缓冲区域aof_buf
但是慢慢的.aof文件会变得很庞大所以有了.aof压缩在.aof压缩的过程中新建了一个aof_rewrite_bur区把操作写到这个缓冲取等压缩完毕再把aof_rewrite_bur写入新的.aof文件中.aof一旦压缩完毕立马用新的.aof替换旧.aof
AOF3中策略
always收到命令就写效率最慢但是持久化最彻底
everysec每秒钟写一次
no依赖系统默认是30秒写一次
reids4.0推出了RDB-AOF混合方式而且默认启用 主从复制 高可用
默认redis是一个服务器运行的多个redis服务器的情况
一个当主节点负责写入和同步主节点执行完命令后会通知到其他子字节命令传播为了主节点和子节点的数据同步。 当一个子节点挂了主节点有游标复制偏移量每次发缓存给子节点游标就会标记一下所以子节点挂了主节点就知道从哪一步开始发缓存了。当主节点挂掉子节点中的其中一个会变成主节点这件事由哨兵redis服务器做哨兵不用存取数据专门管理主节点挂掉的情况其实哨兵也不止一个因为会有哨兵挂掉的情况哨兵每隔10秒跟主节点确认还有那些子节点还有每隔1秒的跟所有节点的心跳机制但是由会出现1个哨兵觉得一个节点挂了剩下2个哨兵觉得这个节点没挂那它就没挂。子节点变成主节点由硬件性能进行排序或者子节点中跟主节点断开时间最短的子节点变成新的主节点或者参考数据偏移量最大的。
集群没写
参考B站视频【趣话Redis第一弹】我是RedisMySQL大哥被我坑惨了_哔哩哔哩_bilibili redis-cli.exe 客户端 输命令的
redis-server 服务的 默认是开启运行的 5种类型Sting、Hash、List、set、zsetsorted set
String
存set name tom 取get name
删del name
值加一incr age 不需要初始化 值减一decr age
keys * 拿到所有的key
exists name name是否存在
expire name 10 设置过期时间10秒 persist name 取消过期时间 Hash存实体类
hset user name tom
hset user age 18
hget user name
hget user age
hdel user name
hexists user name name是否存在
hincrby user age 10 加10只有加没有减
hkeys user 拿user里的所有key
hvals user 拿user里的所有value
hgetall user key和value都拿 List队列
rpush names tom 从右边添加
lpush
lrange names 5 10 从左边拿5开始10结束下标从0开始
lrange names 0 -1 拿全部
lpop names 弹出最左边的keyname的value 弹出去就没了
rpop names
llen names 列表长度
insert names before tom jack 在tom前面插入一个jack
insert names after
lset names 0 tom tom的下标变成0它成为了第一位
lrem names 1 tom 删除1个tom
lindex names 0 通过下标获取value Set不可重复乱序
sadd names tom jack
smembers names 遍历所有value
srem names tom 删除tom
spop names 2 从names里随机弹出2个(3.0.5不支持)
sdiff name1s name2s 差集 name1s有且name2s没有的
sinter name1s name2s 交集
sunion name1s name2s 并集 Sorted set(Zset)
zadd nams 100 tom
zrange names 0 -1 withscores 升序查询 withscores 并且显示score
zrevrange 降序
zrank names tom 返回升序的tom下标
zrevrank 降序
zcard names 返回names的集合的个数
zincrby names tom 100 给tom加100分
zrangebyscore names 100 200 按[100200)分数的范围正序返回value
zrevrangebycore 降序
zrem nams tom 删除names里面的tom 可读性前缀
set user:1 tom
set user:2 jack
keys user:* 查所有的key
rename user:1 user:2 重命名 事务
redis的命令是原子性的所以批量执行指令时中间某条指令错误并不会导致前面的指令回滚后面的指令也不会停
multi 事务开始
exec 事务结束
当在做事务的时候别的客户端发来了请求需要等到时候后才会执行 在SpringBoot项目中使用jedis
导包
dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactId
/dependency