0

Redis 到底是怎么实现“附近的人”这个功能的呢?

Redis 到底是怎么实现“附近的人”这个功能的呢?前言:针对“附近的人”这一位置服务领域的应用场景,常见的可使用PG、MySQL和MongoDB等多种DB的空间索引进行实现。而Redis另辟蹊径,结合其有序队列zset以及geohash编码,实现了空间搜索功能,且拥有极高的运行效率。本文将从源码角度对其算法原理进行解析,并推算查询时间复杂度。要提供完整的“附近的人”服务,最基本的是要实现“增”、“删”、“查”的功能。以下将分别进行介绍,其中会重点对查询功能进行解析。操作命令自Redis 3.2开始,Redis基于geohash和有序集合提供了地理位置相关功能。 Redis Geo模块包含了以...

阅读全文>>

0

借助Redis完成延时任务

相信我们或多或少的会遇到类似下面这样的需求:第三方给了一批数据给我们处理,我们处理好之后就通知他们处理结果。大概就是下面这个图说的。本来在处理完数据之后,我们就会马上把处理结果返回给对方,但是对方要求我们处理速度不能过快,要有一种人为处理的效果。换句话就是说,就算是处理好了,也要晚一点再执行通知操作。这就是一个典型的延时任务。延时,那还不简单,执行完之后,让它Sleep一下就好了,这样就达到目标了。Sleep一下确定是最容易实现的一种方案,但是试想一下,数据的数量不断的增加,这样Sleep真的好吗?答案是否定的。延时队列,是处理这个场景最为妥当的方案。RabbitMQ,RocketMQ,Cmq...

阅读全文>>

0

Redis 6.0 正式版终于发布了!除了多线程还有什么新功能?

Redis 6.0.1 于 2020 年 5 月 2 日正式发布了,如 Redis 作者 antirez 所说,这是迄今为止最“企业”化的版本,也是有史以来改动最大的一个 Redis 版本,同时也是参与开发人数最多的一个版本。所以在使用此版本之前,建议各位开发者先进行深入的测试再考虑投产,毕竟生产坏境无小事。好了,回到本文的重点,接下来我们来重点看下 Redis 6.0.1 给我们带来了那些新功能。Redis新功能介绍Redis 6 的更新日志,主要包含以下五部分的内容:Redis 6.0-RC1 版新功能介绍;Redis 6.0-RC2 版新功能介绍;Redis 6.0-RC3 版新功能介绍...

阅读全文>>

1

Redis从入门到精通,至少要看看这篇

常用的 SQL 数据库的数据都是存在磁盘中的,虽然在数据库底层也做了对应的缓存来减少数据库的 IO 压力。图片来自 Pexels由于数据库的缓存一般是针对查询的内容,而且粒度也比较小,一般只有表中的数据没有发生变动的时候,数据库的缓存才会产生作用。但这并不能减少业务逻辑对数据库的增删改操作的 IO 压力,因此缓存技术应运而生,该技术实现了对热点数据的高速缓存,可以大大缓解后端数据库的压力。主流应用架构客户端在对数据库发起请求时,先到缓存层查看是否有所需的数据,如果缓存层存有客户端所需的数据,则直接从缓存层返回,否则进行穿透查询,对数据库进行查询。如果在数据库中查询到该数据,则将该数据回写到缓存...

阅读全文>>

0

Sprinig Boot + Redis 实现接口幂等性,写得太好了

一、概念幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如:订单接口, 不能多次创建订单支付接口, 重复支付同一笔订单只能扣一次钱支付宝回调接口, 可能会多次回调, 必须处理重复回调普通表单提交接口, 因为网络超时等原因多次点击提交, 只能成功一次 等等二、常见解决方案唯一索引 -- 防止新增脏数据token机制 -- 防止页面重复提交悲观锁 -- 获取数据的时候加锁(锁表或锁行)乐观锁 -- 基于版本号version实现, 在更新数据那一刻校验数据分布式锁 -- redis(jedis、redisson)或zookeeper实现状态机 -- 状态变更, 更...

阅读全文>>

0

为什么Redis 单线程却能支撑高并发?

最近在看 UNIX 网络编程并研究了一下 Redis 的实现,感觉 Redis 的源代码十分适合阅读和分析,其中 I/O 多路复用(mutiplexing)部分的实现非常干净和优雅,在这里想对这部分的内容进行简单的整理。几种 I/O 模型为什么 Redis 中要使用 I/O 多路复用这种技术呢?首先,Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务,而 I/O 多路复用就是为了解决这个问题而出现的。Blocking I/...

阅读全文>>

0

Redis 高可用

主从复制#Redis 5.0 之后提供了REPLICAOF替代了之前的SLAVEOF命令来实现Master-Slave之间的数据交换 接下来我们设置主从复制模型:Master节点首先修改redis-master.conf配置文件来配置端口和安全认证bind 127.0.0.1port 6379 #端口requirepass redis #配置密码之后需要先认证,然后才能继续进行后续操作Slave节点首先修改redis-slave.conf配置文件来配置端口和安全认证bind 127.0.0.1port 6379 #端口...

阅读全文>>

0

听说Redis都会遇到并发、雪崩等难题?我用10分钟就解决了

一、Redis雪崩、穿透、并发等5大难题解决方案缓存雪崩数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。比如一个雪崩的简单过程:1、redis集群大面积故障2、缓存失效,但依然大量请求访问缓存服务redis3、redis大量失效后,大量请求转向到mysql数据库4、mysql的调用量暴增,很快就扛不住了,甚至直接宕机5、由于大量的应用服务依赖mysql和redis的服务,这个时候很快会演变成各服务器集群的雪崩,最后网站彻底崩溃。如何预防缓存雪崩:1.缓存的高可用性缓存层设计成高可用,防止缓存大面积故障。即使个别节点、个别...

阅读全文>>

0

超高性能 key-value 数据库 Redis 5.0.8 稳定版发布

前言Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。官方测评SET操作每秒钟 110000 次,GET操作每秒钟 81000 次,服务器配置如下:Linux 2.6, Xeon X3320 2.5Ghz.更新内容此版本主要是修复错误,例如修复了因错误而重新引入的安全问题,以及从原始仓库升级了 Lua 库,不过此库缺少修复程序。主要修复的错误如下:修复了 aof-child 白名单 SIGU...

阅读全文>>

0

为什么 Redisson 会有这么好用?

Redis 是最流行的 NoSQL 数据库解决方案之一,而 Java 是世界上最流行(注意,我没有说“最好”)的编程语言之一。虽然两者看起来很自然地在一起“工作”,但是要知道,Redis 其实并没有对 Java 提供原生支持。相反,作为 Java 开发人员,我们若想在程序中集成 Redis,必须使用 Redis 的第三方库。而 Redisson 就是用于在 Java 程序中操作 Redis 的库,它使得我们可以在程序中轻松地使用 Redis。Redisson 在 java.util 中常用接口的基础上,为我们提供了一系列具有分布式特性的工具类。在这篇文章里,我会给你们介绍 Redisson 的...

阅读全文>>