Redis04-SpringDataRedis
SpringDataRedisSpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis
提供了对不同Redis客户端的整合(Lettuce和Jedis)提供了RedisTemplate统一API来操作Redis支持Redis的发布订阅模型支持Redis哨兵和Redis集群支持基于Lettuce的响应式编程支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化支持基于Redis的JDKCollection实现
SpringDataRedis快速入门
API
返回值类型
说明
redisTemplate.opsForValue()
ValueOperations
操作String数据类型
redisTemplate.opsForHash()
HashOperations
操作Hash类型数据
redisTemplate.opsForList()
ListOperations
操作List类型数据
redisTemplate.opsForSet()
SetOperat ...
Redis03-Jedis
Jedis样例程序
1.引入依赖
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.7.0</version></dependency>
2.建立连接
private Jedis jedis;@BeforeEachvoid setUp() { //建立连接 jedis = new Jedis("192.168.150.101",6379); //设置密码 jedis.auth("123456"); //选择库 jedis.select(0);}
测试String
@Testvoid testString() { //插入数据,方法名称就是redis命令名称,非常简单 String result = jedis.set("name", &qu ...
Redis02-命令
Redis数据结构介绍Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样:
数据类型
样例
类型
String
hello world
基本类型
Hash
{name: “Jack”,age:21}
基本类型
List
[A ->B ->C ->C]
基本类型
set
{A,B,C}
基本类型
SortedSet
{A: 1,B:2,C:3}
基本类型
GEO
{A:( 120.3, 30.5)}
特殊类型
BitMap
0110110101110101011
特殊类型
HyperLog
0110110101110101011
特殊类型
命令文档
Redis官网命令文档
help @xxxx
通用命令help @generic
常用命令
命令
描述
KEYS pattern
查询符和模版的所有key(通常使用通配符模糊匹配)不建议在生产环境上使用(redis单线程,执行此命令则会等待)
DEL key [key …]
删除一个/多个指定的k ...
Redis00-基础
NoSQL
SQL
NoSQL
数据结构
结构化(Structured)
非结构化
数据关联
关联的(Relational)
无关联的
查询方式
SQL查询
非SQL
事务特性
事务ACID
BASE
存储方式
磁盘
内存
扩展性
垂直
水平
使用场景
1)数据结构固定2)相关业务对数据安全性、—致性要求较高
1)数据结构不固定2)对—致性、安全性要求不高3)对性能要求高
RedisRedis诞生于2009年全称是Remote Dictionary Server,远程词典服务器,是一个基于内存的键值型NoSQL数据库。
特征:
键值( key-value)型,value支持多种不同数据结构,功能丰富
单线程,每个命令具备原子性
低延迟,速度快(基于内存、IO多路复用、良好的编码)
支持数据持久化
支持主从集群、分片集群
支持多语言客户端
安装与启动启动
redis-server redis.conf
查看
ps -ef | grep redis
开机自启
vi /etc/systemd/system/redis.service
内容如 ...
Redis00-基础
基于Redis以及SpringBoot,实现了较为完整的业务流程
使用Redis解决了集群模式下的Session共享问题。
使用拦截器实现了用户的登陆校验功能和登录时间刷新功能。
使用Redis进行缓存,降低了数据库查询压力,解决了缓存穿透,雪崩,击穿的问题。
使用Redis与简单的Lua脚本实现了Redis操作的原子化,实现高可用,解决了用户秒杀资格的检测,同时使用了乐观锁解决了超卖问题。
==使用Redis解决了集群模式下的Session共享问题。==
SpringCloud05-Nacos
简单的介绍了SpringCloud中的Nacos。
Nacos注册中心启动startup.cmd -m standalone
注册与发现由于SpringCloud Commons定义了统一的接口规范
所以只需要改变引入的依赖和地址即可
在cloud-demo父工程中添加spring-cloud-alilbaba的管理依赖:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.5.RELEASE</version> <type>pom</type> <scope>import</scope></dependency>
注释掉order-service和user-service中原有的eureka依赖。
添加nacos的客 ...
MySQL12-MVCC多版本并发控制
基本概念
当前读
读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。对于我们日常的操作,如:select … lock in share mode(共享锁),select … for update、update、insert、delete(排他锁)都是一种当前读。
快照读
简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。
1.Read Committed:每次select,都生成一个快照读。
2.Repeatable Read:开启事务后第一个select语句才是快照读的地方。
3.erializable:快照读会退化为当前读。
MVCC
全称Multi-Version Concurrency Control,多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突,快照读为My5QL实现MVCC提供了一个非阻塞读功能。MVCC的具体实现,还需要依赖于数据库记录中的三个隐式字段、undo log日志、readview.
实现原理
记录中的隐式字段
隐式字 ...
SpringCloud03-Eureka
简单的介绍了SpringCloud中的注册中心Eureka。
提供者与消费者
服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)
服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)
提供者与消费者角色其实是相对的
一个服务可以同时是服务提供者和服务消费者
Eureka注册中心服务调用出现的问题
服务消费者该如何获取服务提供者的地址信息?
服务提供者启动时向eureka注册自己的信息
eureka保存这些信息
消费者根据服务名称向eureka拉取提供者信息
如果有多个服务提供者,消费者该如何选择?
服务消费者利用负载均衡算法,从服务列表中挑选一个
消费者如何感知服务提供者健康状态?
服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态eureka会更新记录服务列表信息,心跳不正常会被剔除消费者就可以拉取到最新的信息
解决URL的硬编码问题
Eureka的作用
在Eureka架构中,微服务角色有两类:
EurekaServer:服务端,注册中心
记录服务信息
心跳监控
EurekaC ...
SpringCloud04-Ribbon负载均衡
简单的介绍了SpringCloud中的Ribbon负载均衡。
负载均衡原理负载均衡流程Ribbon拦截请求寻找Eureka返回服务列表,进行负载均衡
负载均衡策略IRule
内置负载均衡规则类
规则描述
RoundRobinRule
简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。
AvailabilityFilteringRule
对以下两种服务器进行忽略: (1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。(2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的\.\.ActiveConnectionsLimit属性进行配置。
weightedResponseTimeRule
为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
Zone ...
SpringCloud02-服务拆分
简单的介绍了SpringCloud中的服务拆分。
服务拆分注意事项:
1.不同微服务,不要重复开发相同业务
2.微服务数据独立,不要访问其它微服务的数据库
3.微服务可以将自己的业务暴露为接口,供其它微服务调用
远程调用如何进行远程调用呢,让其中一个微服务发起http请求,返回需要的数据即可
步骤:
1.注册RestTemplate
/** * 创建一个RestTemplate并且注入Spring容器 * @return */@Beanpublic RestTemplate restTemplate(){ return new RestTemplate();}
2.利用RestTemplate发起http请求
restTemplate.getForObject(url, User.class); //自动反序列化为json数据