redis整理

redis官方介绍
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

Nosql、redis
redis是Nosql中的键值(Key-Value)数据库

redis的核心
内存中的,key(String)-value存储,value有多种数据结构的形式

redis支持的数据类型有哪些?
key只能为String
value可以是:
总共有8种
5种比较常见的String、Hash、List(有序链表)、Set、sorted set(有序集合)
加上BitMap、hyperloglogs(是用来做基数统计的算法)、geospatial(地理空间相关的)

使用缓存的大致流程
数据查询时,先在缓存中进行查询,如果相关key不存在,那么在对数据库进行查询。把查询到的对象放入缓存,如果数据库查询对象为空,则不放入缓存。

redis缓存和数据库的数据一致性问题
采用策略:Cache Aside Pattern(边缘缓存模式)
数据读取:无争议,缓存查不到查数据库,然后把查到的结果放到缓存中;
数据更新:
方案一:先更新数据库,后更新(删除)缓存;
方案二:先更新(删除)缓存,后更新数据库;

方案一:在数据库更新操作正常的时候,删除缓存出错的概率很小,只有未成功删除,才会使缓存中仍然是旧数据;
方案二:先删除缓存,如果此时,查询操作进入,那么缓存就还是旧数据,此情况出现的概率很高。
故,一般采用方案一。
过期时间
注意,必须设置缓存设置过期时间,保证最终一致性

** redis的高可用是怎么保证的?**
Redis Sentinel(哨兵)是Redis官方的高可用性解决方案(来着官方文档
这个方案具体是:
监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

redis在Spring的使用中,能直接存储Obecjt对象吗?
能的,在Spring中,我们使用redis的形式如下

	@Autowired
	private RedisTemplate<String, SignParam> redisTemplate;
...
redisTemplate.opsForValue().set(cacheKey, signParam, Duration.ofMinutes(2));//设置
SignParam cacheParam = redisTemplate.opsForValue().get(cacheKey);//取出

具体实现和序列化和反序列化相关

缓存与安全
从安全角度来说,缓存也是最容易被攻击的薄弱点(缓存溢出攻击,不是缓存区溢出攻击,用大量无效的数据占满缓存空间使得系统性能断崖式下跌)。

淘汰策略
redis使用内存来保存数据,由于成本和内存限制,当存储的数据超过缓存容量时,需要对缓存的数据进⾏剔除。
⼀般的剔除策略有
FIFO 淘汰最早数据、
LRU(The Least Recently Used) 剔除最近最少使⽤、
LFU 剔除最近使⽤频率最低的数据
⼏种策略。

redis框架
Redis的三个框架:Jedis,Redisson,Lettuce
概念:
  Jedis:是Redis的Java实现客户端,提供了比较全面的Redis命令的支持,
  Redisson:实现了分布式和可扩展的Java数据结构。
  Lettuce:高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。
优点:
  Jedis:比较全面的提供了Redis的操作特性
  Redisson:促使使用者对Redis的关注分离,提供很多分布式相关操作服务,例如,分布式锁,分布式集合,可通过Redis支持延迟队列
  Lettuce:主要在一些分布式缓存框架上使用比较多

使用场景,案例
共享“内存”
分布式部署下用户token、session都可以存放redis、手机验证码
在不断变化的热点数据,单个值、列表、队列
如上面提到的网站总的注册用户数、
最新报名列表、
(医院的号源池总量和使用情况)
计算器/限速器
计算器/限速器,利用Redis中原子性的自增操作,我们可以统计类似用户点赞数、用户访问数等,这类操作如果用MySQL,频繁的读写会带来相当大的压力;限速器比较典型的使用场景是限制某个用户访问某个API的频率,常用的有抢购时,防止用户疯狂点击带来不必要的压力;
缓存
数据服务器无法接收数据时,作为缓存
分布式锁
分布式架构,需要先加锁,在操作一个多个服务都可以操作的东西,如数据库。
避免重复提交
把代表该操作的key值设置在redis中,判断。
计数器
redis是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源
分布式session
常见方案spring session + redis实现session共享
内存,速度
第一次使用 Redis,是为了在保存有数十百万用户的关系数据库里对某个条件进行查询。大家知道,要想在几百万用户中找到某条数据,是很难通过关系数据库在十几秒查询到的。于是我选择了 Redis,在不断优化后每次操作可以控制在 1 秒钟甚至更短,带给我相当大的震撼。
注册、激活。手机、邮箱的验证码
注册时邮件激活的部分使用Redis
发送邮件时使用Redis的消息队列,减轻网站压力。
排行榜
排行榜,如果使用传统的关系型数据库来做,非常麻烦,而利用Redis的SortSet数据结构能够非常方便搞定
分布式事务?
消息队列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值