redis
文章平均质量分 77
关于redis
LiZhen798
软件研发工程师
语言:Java,Go
展开
-
分布式锁代码分析
业务后台的分布式锁核心代码如下: 【问题分析】 1.在正常情况下,该段代码逻辑没用问题 2.但在网络发生抖动的情况下,可能导致用户首次上锁成功,再次上锁失败: a.调用tryLock b.运行 Long number =redis.incr(lockKey) 成功 c.网络抖动 d.运行redis.expire() 抛出网络异常,锁永远不会失效;unLock()将无法解锁,tryLock()也将失败。 3.该问题发...原创 2021-03-25 17:00:19 · 125 阅读 · 0 评论 -
一致性哈希算法的问题
本文将从如下三个方面探探一致性哈希算法 一致性哈希算法经典实用场景 一致性哈希算法通常不适合用于服务类负载均衡 面试应对之策 1、一致性哈希算法经典使用场景 在数据库存储领域如果单表数据量很大,通常会采用分库分表,同样在缓存领域同样需要分库,下面以一个非常常见的Redis分库架构为例进行阐述。 将上述3个Redis节点称之为分片,每一个节点存储部分数据,期间需要使用负载均衡算法,将数据尽量分摊到各个节点,充分发挥分布式的优势,提升系统缓存访问的性能。 在分布缓存领域,对数据存在新增与..转载 2021-03-22 18:02:12 · 361 阅读 · 0 评论 -
锁和分布式锁
目录 一、线程安全 二、JVM锁 三、分布式锁 3.1 分布式锁的概念 3.2 分布式锁的条件 3.3 分布式锁的实现方式 四、Redisson实现分布式锁原理 4.1 基于redis的分布式锁 4.1.1 加锁操作 4.1.2 解锁操作 4.1.3. 死锁 4.1.4 Redis操作的原子性 4.1.5 Redis 分布式锁演变过程 4.2 Redisson原理图 4.2.1、加锁入口 4.2.2、异步加锁方法 4.2.3、加锁lua脚本 4.2.4、存入的...原创 2021-03-22 17:00:17 · 502 阅读 · 0 评论 -
Java jedis pool的坑
目录 【问题现象】 【问题分析】 【问题原因】 【问题影响】 1.场景1 2. 场景2 【解决方法】 【后续】 【问题现象】 线上问题:业务后台同一个customerId下有两个账号accountId 1. 产生错误日志:「B cannot cast to java.lang.Long」 2. Redis通过key拿到错乱的value值 【问题分析】 1. JedisConnection是通过JedisPool进...原创 2021-03-17 16:21:25 · 548 阅读 · 0 评论 -
Redis缓存Key设置
目录 背景: 持仓缓存key设置方法及出现问题: 原因分析和解决方案: Redis缓存注意点: 背景: 春节活动期间,为了提高业务接口的平均响应时间,给业务相关接口加缓存。 持仓缓存key设置方法及出现问题: 缓存key设置方法:key用接口对应的“包名+类名+方法名+userId”设置,例如: /h5/regular/finance/myfixedfinances(用户定期总资产)缓存key为:com.XXXUserCenterController.getMyFixedProjectInf原创 2021-03-11 19:41:36 · 1974 阅读 · 0 评论 -
Redis和Zookeeper实现分布式锁
Redis实现分布式锁 Redis分布式锁实现的三个核心要素: 1.加锁 最简单的方法是使用setnx命令。key是锁的唯一标识,按业务来决定命名,value为当前线程的线程ID。 比如想要给一种商品的秒杀活动加锁,可以给key命名为 “lock_sale_ID” 。而value设置成什么呢?我们可以姑且设置成1。加锁的伪代码如下: setnx(key,1)当一个线程执行setnx返回1,说明key原本不存在,该线程成功得到了锁,当其他线程执行setnx返回0,说明key已经存在,该线程抢...原创 2021-03-09 17:36:57 · 471 阅读 · 0 评论 -
Redis中getbit的key大于(2的32次方-1)问题
春节活动中,发券、首页弹窗等判断新老用户逻辑中调用 问题描述: 调用判断新老用户接口(url),用户useId大于 2的32次方-1(4294967295)时,返回系统异常 原因分析: 设置老用户 setbit key #{useId} 1 判断老用户 if(1 == (getbit key #{useId})) 原来的设计中,redis中的老用户keyold_useId_set 以setbit方式储存的, setbit是对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit),当.原创 2021-03-08 17:39:03 · 392 阅读 · 0 评论 -
高并发下Redis如何保持数据一致性(避免读后写)
“读后写” 通常意义上我们说读后写是指针对同一个数据的先读后写,且写入的值依赖于读取的值。 关于这个定义要拆成两部分来看,一:同一个数据;二:写依赖于读。(记住这个拆分,后续会用到,记为定义一、定义二)只有当这两部分都成立时,读后写的问题才会出现。 在项目中,当面对较多的并发时,使用redis进行读后写操作,是非常容易出问题的,常常使得程序不具备鲁棒性,bug很难稳定复现(得到的值往往跟并发数...转载 2019-11-26 21:04:03 · 1590 阅读 · 0 评论 -
redis的五种数据结构原理分析
本章主要内容 简单介绍redis redis中的五种数据结构分析 应用场景分析 总结 关于Redis redis是一个开源的使用C语言编写的一个kv存储系统,是一个速度非常快的非关系远程内存数据库。它支持包括String、List、Set、Zset、hash五种数据结构。除此之外,通过复制、持久化和客户端分片等特性,用户可以很方便地将redis扩展成一个能够包含数百GB数据和每秒处...转载 2019-11-26 20:30:23 · 196 阅读 · 0 评论