聊聊redis的事务操作

2018-09-19
阅读 4 分钟
5.4k
序 本文主要研究一下redis的事务操作 命令 multi与exec 命令行 {代码...} lettuce实例 {代码...} 部分执行 命令行 {代码...} lettuce实例 {代码...} multi与discard 命令行 {代码...} lettuce实例 {代码...} check and set {代码...} 小结 reids提供multi exec/discard指令,类似open commit/rollback transaction,不过...

聊聊redis的slowlog与latency monitor

2018-09-18
阅读 3 分钟
4.8k
redis在2.2.12版本引入了slowlog,用于记录超过指定执行时间的命令,这个执行时间不包括诸如与客户端通信的IO操作耗时,是实实在在的命令执行的耗时。主要有如下操作:

聊聊LettucePoolingConnectionProvider

2018-09-17
阅读 5 分钟
4k
spring-data-redis-2.0.10.RELEASE-sources.jar!/org/springframework/data/redis/connection/lettuce/LettucePoolingConnectionProvider.java

[case37]聊聊lettuce的shareNativeConnection参数

2018-09-16
阅读 16 分钟
10.4k
spring-data-redis-2.0.10.RELEASE-sources.jar!/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java

聊聊redisTemplate对lettuce的封装

2018-09-15
阅读 13 分钟
7.5k
spring-data-redis-2.0.10.RELEASE-sources.jar!/org/springframework/data/redis/core/RedisTemplate.java

聊聊spring-data-redis的连接池的校验

2018-09-14
阅读 13 分钟
7k
spring-data-redis/2.0.10.RELEASE/spring-data-redis-2.0.10.RELEASE-sources.jar!/org/springframework/data/redis/connection/lettuce/LettucePoolingConnectionProvider.java

聊聊lettuce的sentinel连接

2018-09-13
阅读 8 分钟
7.9k
lettuce-core-5.0.4.RELEASE-sources.jar!/io/lettuce/core/RedisClient.java

redis的sentinel模式故障演练

2018-09-12
阅读 11 分钟
2.6k
序 本文主要研究一下redis的sentinel模式的failover 启动 {代码...} 这里使用redis-cluster的docker-compose文件进行演示 master日志 {代码...} slave日志 {代码...} 主从切换 docker-compose ps {代码...} 停止master节点: {代码...} 查看sentinel日志: {代码...} 查看新的master {代码...} 可以看到MASTER MODE enabl...

聊聊lettuce的指标监控

2018-09-11
阅读 9 分钟
6.5k
lettuce-core-5.0.4.RELEASE-sources.jar!/io/lettuce/core/event/metrics/DefaultCommandLatencyEventPublisher.java

聊聊redis的HealthIndicator

2018-09-10
阅读 3 分钟
5.4k
spring-boot-actuator-2.0.4.RELEASE-sources.jar!/org/springframework/boot/actuate/redis/RedisHealthIndicator.java

[case36]RedisTemplate读取slowlog

2018-09-09
阅读 3 分钟
2.1k
序 本文主要研究一下如何使用RedisTemplate(lettuce类库)读取slowlog maven {代码...} redisAsyncCommands.slowlogGet {代码...} 这里使用lettuce的redisAsyncCommands的slowlogGet方法获取slowlog 不过这里返回的是List<Object>,需要自己解析一下,具体详见下面的slowlog定义 slowlog {代码...} 这里定义了slowl...

redis的GEO实战

2018-09-08
阅读 3 分钟
4k
序 本文主要研究一下redis的GEO的使用 相关命令 geoadd 时间复杂度为O(log(N)) {代码...} 添加经纬度信息 geopos 时间复杂度为O(log(N)) {代码...} 查找指定key的经纬度信息,可以指定多个key,批量返回 geodist 时间复杂度为O(log(N)) {代码...} 返回两个地方的距离,可以指定单位,比如米m,千米km,英里mi,英尺ft ge...

redis的HyperLogLog实战

2018-09-07
阅读 2 分钟
3.2k
序 本文主要研究一下redis的HyperLogLog的用场 相关命令 pfadd 每添加一个元素的复杂度为O(1) {代码...} 添加元素到HyperLogLog中,如果内部有变动返回1,没有返回0 pfcount 作用域单个HyperLogLog时,复杂度为O(1),作用于多个HyperLogLog时,复杂度为O(N) {代码...} 返回该HyperLogLog的近似基数,如果是指定多个Hyper...

redis的bitset实战

2018-09-06
阅读 2 分钟
5.2k
序 本文主要研究一下redis的bitset数据结构的用场 相关命令 SETBIT 时间复杂度为O(1) {代码...} GETBIT 时间复杂度为O(1) {代码...} BITOP 时间复杂度为O(N) {代码...} 主要做bitset的and、or、xor、not操作,结果存在新的bitset中,注意时间复杂度为O(N) BITPOS 时间复杂度为O(N) {代码...} 返回指定bitset中在指定起始...

聊聊spring-boot-starter-data-redis的配置变更

2018-09-05
阅读 2 分钟
12.6k
以前是spring-boot的1.4.x版本的(spring-data-redis为1.7.x版本),最近切到2.0.4.RELEASEB版本(spring-data-redis为2.0.5.RELEASE版本),发现配置有变更。

聊聊sentinel的SystemSlot

2018-09-04
阅读 5 分钟
2.6k
sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/system/SystemSlot.java

jib自定义entrypoint

2018-09-03
阅读 2 分钟
5.6k
序 本文主要研究一下jib自定义entrypoint的用场 maven {代码...} 这里在container标签下面自定义了entrypoint,然后注入环境变量,这样就不用将jvm的配置写死在pom文件中了 原本jib默认生成的entrypoint是引号模式的,比如 {代码...} 这种模式貌似不能支持环境变量,因此需改为没有引号的模式,使用sh -c java命令来启动...

[case35]bucket4j-spring-boot-starter小试牛刀

2018-09-02
阅读 3 分钟
2.9k
序 本文主要研究一下如何使用bucket4j-spring-boot-starter进行限流 maven {代码...} 配置 开启缓存 {代码...} application.yml {代码...} 这里设置了名为buckets的缓存,过期时间为1h,容量为1000000 设置的rate-limits每10秒5个token 验证 {代码...} 访问/actuator {代码...} 小结 bucket4j-spring-boot-starter使用bu...

bucket4j使用实例

2018-09-01
阅读 3 分钟
5.6k
序 本文主要演示一下bucket4j的几个使用实例 maven {代码...} rate limit {代码...} 这里使用simple方法构造Bandwidth,进而构建bucket实例 scheduler {代码...} 输出实例 {代码...} 前面5个token消耗完之后,后续每隔12秒消耗一个token 小结 bucket4j类库是一款优秀的java限流类库,可以用来限流,也可以用作简单调度。...

聊聊Guava的RateLimiter

2018-08-31
阅读 10 分钟
3.5k
guava-26.0-jre-sources.jar!/com/google/common/util/concurrent/RateLimiter.java

聊聊leaky bucket算法的实现

2018-08-30
阅读 2 分钟
8.9k
序 本文主要研究一下leaky bucket算法的实现 leaky bucket算法 bucket以一定速率滴水,相当于增加桶容量 bucket有其容量限制,请求过来时bucket满,则直接被抛弃 请求到来时,如果bucket不满,则放入bucket,相当于放行 简单实现 {代码...} 这个实现设计了lastLeakTimestamp字段,用于计算时间差,以及在这个时间段内需...

聊聊java9的classloader

2018-08-29
阅读 2 分钟
3k
序 本文主要研究一下java9的classloader java9之前的classloader bootstrap classloader加载rt.jar,jre/lib/endorsed ext classloader加载jre/lib/ext application classloader加载-cp指定的类 java9及之后的classloader bootstrap classloader加载lib/modules {代码...} ext classloader更名为platform classloader,...

聊聊token bucket算法的实现

2018-08-28
阅读 3 分钟
7.5k
序 本文主要研究一下token bucket算法的实现 限流算法概述 主要有如下几种: 基于信号量Semaphore 只有数量维度,没有时间维度 基于fixed window 带上了时间维度,不过在两个窗口的临界点容易出现超出限流的情况,比如限制每分钟10个请求,在00:59请求了10次,在01:01又请求了10次,而从00:30-01:30这个时间窗口来看,这...

聊聊sentinel的FlowSlot

2018-08-27
阅读 7 分钟
3.2k
序 本文主要研究一下sentinel的FlowSlot FlowSlot com/alibaba/csp/sentinel/slots/block/flow/FlowSlot.java {代码...} FlowRuleManager.checkFlow com/alibaba/csp/sentinel/slots/block/flow/FlowRuleManager.java {代码...} 这里调用FlowRule的passCheck方法 FlowRule com/alibaba/csp/sentinel/slots/block/flow/Fl...

[case34]jib打包docker镜像实战

2018-08-26
阅读 10 分钟
4.6k
序 本文主要研究一下如何使用google的jib打包docker镜像 maven {代码...} 配置 {代码...} 这里指定base image为java:8u172-jre-alpine 同时指定生成的image名称为jib-demo:${maven.build.timestamp} container标签可以指定相关参数,比如jvmFlags指定JVM参数,ports指定expose的端口号 extraDirectory用于指定要添加的目...

聊聊sentinel的DegradeSlot

2018-08-25
阅读 6 分钟
2.7k
序 本文主要研究一下sentinel的DegradeSlot DegradeSlot com/alibaba/csp/sentinel/slots/block/degrade/DegradeSlot.java {代码...} 调用DegradeRuleManager.checkDegrade进行降级规则检测 DegradeRuleManager com/alibaba/csp/sentinel/slots/block/degrade/DegradeRuleManager.java {代码...} checkDegrade根据资源名...

聊聊sentinel的AuthoritySlot

2018-08-24
阅读 8 分钟
2.1k
com/alibaba/csp/sentinel/slots/block/authority/AuthorityRuleManager.java

聊聊sentinel的StatisticSlot

2018-08-23
阅读 6 分钟
2.3k
entry是在成功通过的时候,调用node的increaseThreadNum以及addPassRequest;不通过的话,则调用increaseBlockedQps;异常的话,则调用increaseExceptionQps

聊聊sentinel的DefaultSlotsChainBuilder

2018-08-22
阅读 4 分钟
2.2k
序 本文主要研究一下sentinel的DefaultSlotsChainBuilder DefaultSlotsChainBuilder com/alibaba/csp/sentinel/slots/DefaultSlotsChainBuilder.java {代码...} 实现build方法,返回DefaultProcessorSlotChain,通过它addLast方法构造链式调用 DefaultProcessorSlotChain com/alibaba/csp/sentinel/slotchain/DefaultPro...

聊聊sentinel的ArrayMetric

2018-08-21
阅读 12 分钟
3.1k
序 本文主要研究一下sentinel的ArrayMetric ArrayMetric com/alibaba/csp/sentinel/slots/statistic/metric/ArrayMetric.java {代码...} ArrayMetric底层使用WindowLeapArray作为数据存取 该类实现了指标的获取以及指标的新增 WindowLeapArray com/alibaba/csp/sentinel/slots/statistic/metric/WindowLeapArray.java {...