微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,给你呈现不一样的技术视角。 大家好,我是 Kaito。 这篇文章我想和你聊一聊 Redis 的最佳实践。 你的项目或许已经使用 Redis 很长时间了,但在使用过程中,你可能还会或多或少地遇到以下问题: 我的 Redis 内存为什么增长这么快? 为什么我的 Redis 操作延迟变大了? 如何降低 Redis 故障发生的频率? 日常运维 Redis 需要注意什么? 部署 Redis 时,如何做好资源规划? Redis 监控重点要关注哪些指标…

2021年4月7日 0条评论 3点热度 阅读全文

背景:手下新人在初次使用springboot整合redis,大部分人习惯从网上检索到一份配置,然后不知其所以然的复制粘贴到项目中,网上搜索到的配置良莠不齐但又万变不离其宗。由于springboot最大化地简化了整合redis需要的配置,在用户只需要在配置文件(application.*)中配置少量参数就可以使用官方默认提供的RedisTemplate和StringRedisTemplate来操作redis。由于官方提供的*RedisTemplate提供的功能有限,难以针对java的复杂数据类型进行序列化,且采用直连…

2021年4月7日 0条评论 5点热度 阅读全文

文章目录 redis为什么快 上下文切换 为什么采用单线程 redis的I/O多路复用 epoll与select/poll区别 select/poll的几大缺点 用户态拷贝到内核态 epoll IO多路复用模型实现机制 epoll 优势详解 底层实现 总结 redis为什么快 Redis采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由C语言编写,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。主要设计如下:(单线程和NIO会做详细的讲述) 完全基于内存,绝大部分请求是纯粹的内存操作,…

2021年4月7日 0条评论 2点热度 阅读全文

前言 之前我们谈到的限流解决方案中提到了在分布式环境下,可以使用redis结合lua进行限流,与网关层限流不同的是,基于Redis+Lua的分布式限流属于服务端限流 使用redis做限流原因 在前面的章节中,我们了解到,Redis是作为缓存组件而使用,在实际业务中Redis大部分操作都是纯内存操作,性能十分优异 redis是线程安全的,天然具有线程安全的特性,支持原子性操作 限流服务不仅需要承接超高QPS,还要保证限流逻辑的执行层面具备线程安全的特性,利用Redis这些特性做限流,既能保证线程安全,也能保证性能 基…

2021年4月7日 0条评论 2点热度 阅读全文

前言 redis在互联网公司的项目中基本上都会使用到,这得益于redis丰富的数据结构和高效的底层存储结构,接下来会通过几篇文章探讨并总结一些redis在实际项目中的使用 环境准备 window或者linux下,安装一个redis服务,linux下可以参考网上的安装教程,windows下直接官网下载后,双击bin目录下的redis.bat即可运行 同时为方便java中使用redis的操作与学习,使用springboot快速搭建一个工程,以便对比 需要导入的基本依赖, <dependencies> <…

2021年4月7日 0条评论 2点热度 阅读全文

前言 在上一篇中,我们利用mysql数据库的行锁特性,实现了一个简单的分布式锁,但是从经验即可判断,数据库的分布式锁实现,在高并发场景下性能方面应该会大打折扣,当然,如果能够提前预判系统的并发并不算太大,这种实现也是没问题的,下面介绍下分布式锁的第二种实现,基于redis实现分布式锁 redis分布式锁原理 redis实现分布式锁的原理其实非常简单,即通过一个 Setnx的命令进行实现,即: SET resource_key_name resource_key_value NX PX 10000 简单解释下: re…

2021年4月7日 0条评论 2点热度 阅读全文

前言 抢购问题不仅是电商类项目中一个重要的业务,也是许多开发人员在进阶过程中绕不开的问题,关于抢购,如果理清了前后的逻辑和里面涉及到的几个关键性的问题,问题就迎刃而解了 抢购中的几个常见问题 如何设计抢购功能?(表结构,以及整体的抢购思路) 不借助中间件如何实现抢购?(不借助redis) 怎么利用redis解决抢购中的超卖问题 怎么提升抢购的整体并发? 上图是抢购中的两个重要步骤,对于抢购用户,抽象来讲,服务端只需要完成对待抢购商品的锁定以及锁定后的下单操作即可 分开来说,商品名额锁定阶段,活动期间待抢购商品数量是…

2021年4月7日 0条评论 3点热度 阅读全文

前言 在上一篇,讨论了积分排行榜基于mysql的实现方案,并且在文章的末尾我们抛出了一个问题,就是当用户量越来越大的时候,性能的问题将会成为此功能的瓶颈,因此需要寻找更好的解决方案 在Redis中,提供了一个叫做SortedSet的数据结构,该数据结构有2个特性,有序性和数据的可压缩性,利用这2个特点,结合上篇分析到的积分排行的业务场景,下面来尝试下如何利用Redis的这种数据结构来实现topN的积分排行榜吧 实现思路 用户签到插入积分时,同时插入到zset中 获取topN的排行信息时候,直接从zset中取出用户的…

2021年4月7日 0条评论 8点热度 阅读全文

前言 在上一篇,我们简单介绍了redis数据类型中的String和hash两种常用数据类型的使用,本篇继续探讨redis数据结构中的另一种,list 列表 list简介 Redis列表是简单的字符串列表,可以按照插入顺序排序。 list存储多个数据,对进入list存储结构区域的数据通过先后顺序进行区分 底层采用类似双向链表的结构实现 一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素) 基本操作 操作list时,既然说到底层是双向链表结构,就存在一个左和右的顺序问题,使…

2021年4月7日 0条评论 3点热度 阅读全文

一、现象 在该项目中,多个微服务使用一台Redis虚拟机,项目开发完成后,进入试运行阶段,在项目平稳运行五天后,Redis使用的虚拟机内存在某一时刻突然飙升,很短的时间内内存耗尽,Redis虚拟机宕机,所有微服务连接Redis超时无法使用。 二、问题排查 怀疑在某一时刻出现大量写入数据导致内存飙升。我们的业务存到redis的数据量几乎是可以预估的,应该向之前一样平稳,除非对方公司突然增加很多合作方,但是并没有这样的情况。为了确认不是这个原因所导致的,我们查看了Redis的Info,看到Redis使用的峰值也才5Mb…

2021年4月7日 0条评论 3点热度 阅读全文
1456782000