redis 初识(技术点概括)

一级缓存 二级 三级 需查询

redis启动

redis是内存数据库,所以速度快

五大类型—String list set map zset
keys *
set name shenyifei
EXISTS name
move name
EXPIRE name 10
ttl name
type name
APPEND name “19950305”
STELEN name
set step 0
incr step
decr step
INCRBY step 10
set name “ShenYiFei,Helloworld”
GETRANGE name 0 3
GETRANGE name 0 -1

setex (set with expire) # 设置过期时间

setnx (set if not exist) # 不存在在设置 (在分布式锁中会常常使用!)

mset name a name1 b name2 c
mget name name1 name 2

第二种类型 -List。。。。。。

三种特殊数据类型
Geosptatial 地理位置
Hyperloglog 基数 不重复元素(一个人访问一个网站多次,但是还是算作一个人)
Bitmap 打卡 只有0和1两个状态

事务
开启事务(mult)。。。。。。执行事务(exec)
放弃事务 DISCARD

监控watch 相当于乐观锁,加在multi前面,防止执行事务时,另外一个线程修改数据

Jedis相当于JDBC java操作redis中间件
通过JSONobject 来操作

Springboot 进行整合
不采用jedis 而是用lettuce(Netty技术),不存在线程不安全情况,可以减少线程数据,NIO
源码的泛型 是<object, object>,所以每次整合redisTemplate 就需要重写<Stirng,Object>
一般redisTemplate都是进行自定义
自带模板用redisTemplate.opsFor…接类型(五大类型加三个额外类型)
注意,redis如果没有进行序列化 用Json传递对象会报错,解决办法 自带的jdk序列化 或者自定义一个
自己的redistemplate模板 实现五种类型的序列化----脚本(写好的)

redis conf文件----

========================================================

内存达到上限的六种策略
1、volatile-lru:只对设置了过期时间的key进行LRU(默认值)
2、allkeys-lru : 删除lru算法的key
3、volatile-random:随机删除即将过期key
4、allkeys-random:随机删除
5、volatile-ttl : 删除即将过期的
6、noeviction : 永不过期,返回错误

AOF 默认是不开启的 假如两个一起开启 会先才采用AOF

RDB和AOF 持久化的两种方式
RDB
可以自己设置 默认90s 改一次 300s改10次 60s 改。。。。根据条件自己保存
持久化过程
父进程会fork一个子进程,将内存内容写入一个临时的一个RDB的文件,快照写入完成后覆盖原来额
正式RDB文件,主进程不进行任何的IO操作,确保了较高的性能。RDB的缺点是最后一次持久化的数据可能丢死
redis默认的是RDB
优点:适合大规模的数据恢复 对数据的完整性要求不高
缺点:宕机了,最后一次数据会没掉,fork进程时会占用一定的内存

AOF
每秒记录一次,最慢也是3s记录一次
以日志形式来记录每个操作(读操作不记录),只许追加不修改。如果aof文件大于64m会fork一个新的
的进程进行重写
优缺点
优点:文件完整性好 只会丢失一点点数据 不同步 效率高
缺点: aof比较臃肿,文件修复速度慢 运行速度也比较慢

性能建议(原文)
因为RDB文件只用作后备用途,建议只在Slave上持久化RDB文件,而且只要15分钟备份一次就够
了,只保留 save 900 1 这条规则。
如果Enable AOF ,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自
己的AOF文件就可以了,代价一是带来了持续的IO,二是AOF rewrite 的最后将 rewrite 过程中产
生的新数据写到新文件造成的阻塞几乎是不可避免的。只要硬盘许可,应该尽量减少AOF rewrite
的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上,默认超过原大小100%大小重
写可以改到适当的数值。
如果不Enable AOF ,仅靠 Master-Slave Repllcation 实现高可用性也可以,能省掉一大笔IO,也
减少了rewrite时带来的系统波动。代价是如果Master/Slave 同时倒掉,会丢失十几分钟的数据,
启动脚本也要比较两个 Master/Slave 中的 RDB文件,载入较新的那个,微博就是这种架构。

redis可以发布订阅,也可以进行建群聊(简单的)
通过 PUBLISH 、SUBSCRIBE 和 PSUBSCRIBE 等命令实现发布和订阅功能

redis主从复制(一般最少都是一主二从)可以通过docker进行主从复制的搭建

哨兵模式 sentinel conf一般都是网上找先配置好 然后启动
一旦,主机宕机了,根据投票数自动将丛库转换成主库,当然,哨兵也有可以进行集群

这里的哨兵有两个作用
通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服
务器,修改配置文件,让它们切换主机。

Redis缓存穿透和雪崩 还有一个击穿
缓存穿透就是redis缓存找不到(没命中) 会去持久层数据库找,如果大量缓存没有命中 会给
数据库造成很大压力
解决方案
布隆过滤器: 对有可能的关键字进行hash进行存储,在控制层进行校验 不符合规则的丢弃,减少压力
2、返回一个空对象存储起来当缓存,设置过期时间即可,不过会占用大量空间还有可能缓存和数据库的数据不一致

缓存击穿
一个热点Key非常热点,大并发,一旦关键字缓存期一过,会击穿数据库
解决1.热点永不过期
2.加互斥锁(分布式锁),只有一个线程进去,其他线程等待

缓存雪崩
和击穿差不多 一瞬间宕机了 缓存过期失效 突然迎来高并发 没有缓存层了存储层直接挂掉
解决方案
集群(异地多活)
限流降级熔断
数据预热

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本火锅店餐系统采用Java语言和Vue技术,框架采用SSM,搭配Mysql数据库,运行在Idea里,采用小程序模式。本火锅店餐系统提供管理员、用户两种角色的服务。总的功能包括菜品的查询、菜品的购买、餐桌预定和订单管理。本系统可以帮助管理员更新菜品信息和管理订单信息,帮助用户实现在线的餐方式,并可以实现餐桌预定。本系统采用成熟技术开发可以完成餐管理的相关工作。 本系统的功能围绕用户、管理员两种权限设计。根据不同权限的不同需求设计出更符合用户要求的功能。本系统中管理员主要负责审核管理用户,发布分享新的菜品,审核用户的订餐信息和餐桌预定信息等,用户可以对需要的菜品进行购买、预定餐桌等。用户可以管理个人资料、查询菜品、在线餐和预定餐桌、管理订单等,用户的个人资料是由管理员添加用户资料时产生,用户的订单内容由用户在购买菜品时产生,用户预定信息由用户在预定餐桌操作时产生。 本系统的功能设计为管理员、用户两部分。管理员为菜品管理、菜品分类管理、用户管理、订单管理等,用户的功能为查询菜品,在线餐、预定餐桌、管理个人信息等。 管理员负责用户信息的删除和管理,用户的姓名和手机号都可以由管理员在此功能里看到。管理员可以对菜品的信息进行管理、审核。本功能可以实现菜品的定时更新和审核管理。本功能包括查询餐桌,也可以发布新的餐桌信息。管理员可以查询已预定的餐桌,并进行审核。管理员可以管理公告和系统的轮播图,可以安排活动。管理员可以对个人的资料进行修改和管理,管理员还可以在本功能里修改密码。管理员可以查询用户的订单,并完成菜品的安排。 当用户登录进系统后可以修改自己的资料,可以使自己信息的保持正确性。还可以修改密码。用户可以浏览所有的菜品,可以查看详细的菜品内容,也可以进行菜品的餐。在本功能里用户可以进行餐。用户可以浏览没有预定出去的餐桌,选择合适的餐桌可以进行预定。用户可以管理购物车里的菜品。用户可以管理自己的订单,在订单管理界面里也可以进行查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值