分片集群:横向扩展
简单来讲,如果一个实例扛不住写压力,我们是否可以部署多个实例,然后把这些实例按照一定的规则组织起来,作为一个整体对外提供服务,这样就可以解决集中写一个实例的瓶颈问题了。
问题转化为:如何组织多个实例
规则:
- 每个节点各自存储一部分数据,所有节点的数据之和才是全量数据
- 制定一个路由规则,对于不同的key,路由到固定的一个实例上进行读写
而分片集群根据路由规则所在的位置不同,还可以分为两类: - 客户端分片:key的路由规则放在客户端来做。缺点是客户端需要维护这个路由规则,需要耦合道业务代码里。还可以把路由规则封装为一个模块,当需要使用的时候,集成这个模块,这就是Redis Cluster采用的方案。
服务端分片:在客户端和服务端之间增加一个中间代理层,也就是我们经常听到的proxy,数据的路由规则放在proxy层维护。proxy层会把请求根据规则转发到对应的Redis节点上,而且当集群横向扩容的时候,客户端也是无感的。
String类型
基础的键值对类型 key表示名字 value表示值用法:
- SET key value :设置指定key的值为value,存在的话就更新值
- GET key:获取key的值
- DEL key:删除key
- INCR key:将key中的数值增加1,初始值为0
- DECR key:将key中的数值减少1
业务场景
缓存
背景:
用于缓存经常访问的数据,比如数据库查询到的结果、网页的内容等,提高访问速度并降低数据库压力
具体案例:
比如在app里,用户个人主页的信息,如头像、昵称等数据通常不会频繁变动,但是会被频繁的查询。每次用户访问个人主页或是查看其他用户个人主页的时候,都直接从数据库里查询信息会导致不必要的数据库负载
优点:
- 快速数据访问:Redis是内存数据库,读写能力高,大幅度降低了数据访问延迟,提高用户体验
- 减轻数据库压力:缓存频繁访问的静态数据,显著减少数据库查询,从而保护数据库资源,延长数据库寿命
- 高并发支持:处理大量用户的同时访问,保证系统在溜了高峰期的稳定性
- 灵活的缓存策略:易于实现缓存数据的更新和失效,结合适当的缓存过期合数据同步机制,保证数据的实时性和一致性
具体方案:
以商城的商品信息为例,当商品信息更新时,相应的缓存也更新或失效。
这里延伸出的一个问题是如何保持数据一致性