Redis
文章平均质量分 79
spring_root
学海无涯
展开
-
基于Redis实现分布式锁
对于单机多线程来说,在 Java 中,我们通常使用类、关键字这类 JDK 自带的本地锁来控制一个JVM进程内的多个线程对本地共享资源的访问。下面是我对本地锁画的一张示意图。从图中可以看出,这些线程访问共享资源是互斥的,同一时刻只有一个线程可以获取到本地锁访问共享资源。分布式系统下,不同的服务/客户端通常运行在独立的 JVM 进程上。如果多个 JVM 进程共享同一份资源的话,使用本地锁就没办法实现资源的互斥访问了。于是,分布式锁就诞生了。举个例子:系统的订单服务一共部署了 3 份,都对外提供服务。原创 2023-10-31 17:35:25 · 145 阅读 · 0 评论 -
缓存和数据库一致性问题
如何保证缓存和数据库一致性,这是一个老生常谈的话题了。但很多人对这个问题,依旧有很多疑惑: 到底是更新缓存还是删缓存? 到底选择先更新数据库,再删除缓存,还是先删除缓存,再更新数据库? 为什么要引入消息队列保证一致性? 延迟双删会有什么问题?到底要不要用? ... 这篇文章,我们就来把这些问题讲清楚。这篇文章干货很多,希望你可以耐心读完。引入缓存提高性能我们从最简单的场景开始讲起。如果你的业务处于起步阶段,流量非常小,那无论是读请求还原创 2021-09-30 14:09:43 · 238 阅读 · 1 评论 -
Redis 面试题/知识点总结!(2021 最新版)
本文是开源项目 JavaGuide 其中的一篇文章。项目地址:https://github.com/Snailclimb/JavaGuide另外,这篇文章之前发过,不过,我最近对其进行了重构完善并且修复了很多小问题。所以,在公号再同步一下!内容很硬!强烈建议小伙伴们花 15分钟左右阅读一遍!1. 简单介绍一下 Redis 呗!简单来说Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是Redis 的数据是存在内存中的,也就是它是内存数据库,所以读写速度非常快,因此...原创 2021-08-01 13:49:00 · 405 阅读 · 0 评论 -
如何使用Redis实现电商系统的库存扣减?
在日常开发中有很多地方都有类似扣减库存的操作,比如电商系统中的商品库存,抽奖系统中的奖品库存等。解决方案 使用mysql数据库,使用一个字段来存储库存,每次扣减库存去更新这个字段。 还是使用数据库,但是将库存分层多份存到多条记录里面,扣减库存的时候路由一下,这样子增大了并发量,但是还是避免不了大量的去访问数据库来更新库存。 将库存放到redis使用redis的incrby特性来扣减库存。 分析在上面的第一种和第二种方式都是基于数据来扣减库存。基于数据库单库存第一原创 2021-08-01 11:03:51 · 623 阅读 · 1 评论 -
单线程不香吗?Redis6.0为何引入多线程?
Redis 作为一个基于内存的缓存系统,一直以高性能著称,因没有上下文切换以及无锁操作,即使在单线程处理情况下,读速度仍可达到 11 万次/s,写速度达到 8.1 万次/s。但是,单线程的设计也给 Redis 带来一些问题: 只能使用 CPU 一个核 如果删除的键过大(比如 Set 类型中有上百万个对象),会导致服务端阻塞好几秒 QPS 难再提高 针对上面问题,Redis 在 4.0 版本以及 6.0 版本分别引入了 Lazy Free 以及多线程 IO,逐步向多线程过..原创 2021-07-28 22:14:26 · 74 阅读 · 0 评论 -
基于jedis的Redis工具类
/** * 基于jedis的redis操作工具类 */public final class RedisUtils { /* 除了该工具类提供的方法外,还可以在外面调用getJedis()方法,获取到jedis实例后,调用它原生的api来操作 */ /** * 获取jedis对象,并选择redis库。jedis默认是0号库,可传入1-16之间的数选择库存放数据 * 原则上使用一个redis库存放数据,通过特定的key的命令规则来区分不同的数据.原创 2021-07-20 16:54:28 · 188 阅读 · 0 评论 -
讲讲Redis都有哪些监控指标?
监控指标 性能指标:Performance 内存指标: Memory 基本活动指标:Basic activity 持久性指标: Persistence 错误指标:Error 性能指标:Performance Name Description latency Redis响应一个请求的时间 instantaneous_ops_per_sec 平均每秒处理请求总数 hi rate(calculated) 缓存命中率(计原创 2021-07-14 15:44:38 · 97 阅读 · 0 评论 -
支撑直播百亿请求的 Redis 集群是如何工作的
一、背景随着直播元年开启,越来越多的直播产品如春笋般出现,在拉动营收的过程中,产品竭尽全力思考着各种活动来刺激用户的消费欲望,而这类活动的基础形式就是榜单,在2016年我们基于cmem及扫描流水表的方式来实现榜单排名,2017开始,我们对原有系统进行重构,使用redis作为我们的榜单基础存储,在重构的过程中接到调研redis分布式解决方案的任务之后,比对业内各种开源产品,最后定下Codi...原创 2019-11-16 10:30:18 · 282 阅读 · 0 评论 -
Redis从入门到精通
由于数据库的缓存一般是针对查询的内容,而且粒度也比较小,一般只有表中的数据没有发生变动的时候,数据库的缓存才会产生作用。但这并不能减少业务逻辑对数据库的增删改操作的 IO 压力,因此缓存技术应运而生,该技术实现了对热点数据的高速缓存,可以大大缓解后端数据库的压力。主流应用架构客户端在对数据库发起请求时,先到缓存层查看是否有所需的数据,如果缓存层存有客户端所需的数据,则直接从缓存层返回,...原创 2019-10-15 11:24:49 · 145 阅读 · 0 评论 -
redis 总结
主要内容redis 简介 为什么要用 redis /为什么要用缓存 为什么要用 redis 而不用 map/guava 做缓存? redis 和 memcached 的区别 redis 常见数据结构以及使用场景分析 redis 设置过期时间 redis 内存淘汰机制 redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复) redis 事务 缓存雪崩和缓...原创 2019-08-30 16:07:45 · 148 阅读 · 0 评论 -
spring初识redis
一、为什么要使用缓存管理(1)提升系统性能(2)避免自己实现缓存池(3)减少代码量,增加代码可读性(4)当然最终目的肯定是为了让自己有更多的可控时间了二、注解使用进入到包org.springframework.cache.annotation内我们可以发现里面有不少注解一般常用Cacheable、CacheEvict、CachePut。2.1Cacheable这个注解里面...原创 2019-08-27 17:52:51 · 129 阅读 · 0 评论 -
Redis之内存回收机制
前几天出去面试遇到过一道面试题:Redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现?问题描述:一个依赖于定时器任务的生成的接口列表数据,时而有,时而没有。怀疑是 Redis过期删除策略排查过程长,因为手动执行定时器,Set 数据没有报错,但是 Set 数据之后不生效。Set 没报错,但是 Set 完再查的情况下没数据,开始怀疑 Redis 的过期...原创 2019-09-27 14:15:20 · 133 阅读 · 0 评论 -
使用 Redis Hyperloglog,轻松统计 UV 数据
如果你正在开发一个基于“事件”的应用程序,该应用程序可以处理来自不同用户的许多请求,那么你很大可能希望能够计算滑动窗口或指定时间范围内不同的用户操作。计数不同用户行为的最快方法之一是写一个类似SELECT COUNT(DISTINCT user)的 SQL。但是,如果实时数据的量达到了上百万条,这可能会很昂贵。你可能会想到另一种方法,就是将用户保存在一个 Redis set 集合中,因为 ...原创 2019-10-08 10:18:10 · 279 阅读 · 0 评论