redis
文章平均质量分 85
redis
swadian2008
尽管目光所及之处,只是不远的前方,即使如此,依然可以看到那里有许多值得去完成的工作在等待我们。
展开
-
使用 Redis 如何统计一亿个 keys ?
redis 中 Set、Sorted Set、Hash、List、Bitmap、HyperLogLog 的支持情况和优缺点汇总可以看到,Set 和 Sorted Set 都支持多种聚合统计,不过,对于差集计算来说,只有 Set 支持。Bitmap 也能做多个 Bitmap 间的聚合计算,包括与、或和异或操作。当需要进行排序统计时,List 中的元素虽然有序,但是一旦有新元素插入,原来的元素在 List 中的位置就会移动,那么,按位置读取的排序结果可能就不准确了。原创 2023-10-24 21:59:36 · 279 阅读 · 0 评论 -
Redis 中数据增多了,是该加内存还是加实例?
在应对数据量扩容时,虽然增加内存这种纵向扩展的方法简单直接,但是会造成数据库的内存过大,导致性能变慢。Redis 切片集群提供了横向扩展的模式,也就是使用多个实例,并给每个实例配置一定数量的哈希槽,数据可以通过键的哈希值映射到哈希槽,再通过哈希槽分散保存到不同的实例上。这样做的好处是扩展性好,不管有多少数据,切片集群都能应对。// 计算数据的Hash槽,确定具体的存储实例。原创 2022-09-28 15:22:29 · 251 阅读 · 0 评论 -
Redis 主库挂了,如何不间断服务?
哨兵机制,是实现 Redis 不间断服务的重要保证。具体来说,主从集群的数据同步,是数据可靠的基础保证;而在主库发生故障时,自动的主从切换是服务不间断的关键支撑。Redis 的哨兵机制自动完成了以下三大功能,从而实现了主从库的自动切换,可以降低 Redis 集群的运维开销:监控主库运行状态,并判断主库是否客观下线;在主库客观下线后,选取新主库;选出新主库后,通知从库和客户端。原创 2023-11-28 22:20:24 · 613 阅读 · 0 评论 -
Redis 主从库如何实现数据一致?
Redis 的主从库同步的基本原理,总结来说,有三种模式:全量复制、基于长连接的命令传播,以及增量复制。全量复制虽然耗时,但是对于从库来说,如果是第一次同步,全量复制是无法避免的,所以,我给你一个小建议:一个 Redis 实例的数据库不要太大,一个实例大小在几 GB 级别比较合适,这样可以减少 RDB 文件生成、传输和重新加载的开销。另外,为了避免多个从库同时和主库进行全量复制,给主库过大的同步压力,我们也可以采用“主 - 从 - 从”这一级联模式,来缓解主库的压力。原创 2023-02-27 21:11:05 · 1776 阅读 · 0 评论 -
Redis 如何实现快速恢复?
Redis 用于避免数据丢失的内存快照方法优势在于,可以快速恢复数据库,也就是只需要把 RDB 文件直接读入内存,这就避免了 AOF 需要顺序、逐一重新执行操作命令带来的低效性能问题。不过,内存快照也有它的局限性。它拍的是一张内存的“大合影”,不可避免地会耗时耗力。虽然,Redis 设计了 bgsave 和写时复制方式,尽可能减少了内存快照对正常读写的影响,但是,频繁快照仍然是不太能接受的。而混合使用 RDB 和 AOF,正好可以取两者之长,避两者之短,以较小的性能开销保证数据可靠性和性能。原创 2022-11-14 10:34:05 · 503 阅读 · 0 评论 -
Redis 如何避免数据丢失?
Redis 为避免数据丢失,采用了 AOF 方法。这个方法通过逐一记录操作命令,在恢复时再逐一执行命令的方式,保证了数据的可靠性。这个方法看似“简单”,但也是充分考虑了对 Redis 性能的影响。总结来说,它提供了 AOF 日志的三种写回策略,分别是 Always、Everysec 和 No,这三种策略在可靠性上是从高到低,而在性能上则是从低到高。此外,为了避免日志文件过大,Redis 还提供了 AOF 重写机制,直接根据数据库里数据的最新状态,生成这些数据的插入命令,作为新日志。原创 2022-12-07 16:26:18 · 667 阅读 · 0 评论 -
为什么单线程Redis能那么快?
Redis 单线程是指它对网络 IO 和数据读写的操作采用了一个线程,而采用单线程的一个核心原因是避免多线程开发的并发控制问题。单线程的 Redis 也能获得高性能,跟多路复用的 IO 模型密切相关,因为这避免了 accept() 和 send()/recv() 潜在的网络 IO 操作阻塞点。原创 2022-10-18 09:28:06 · 142 阅读 · 0 评论 -
Redis 的底层数据结构
/ 因地制宜去使用数据结构Redis 之所以能快速操作键值对,一方面是因为 O(1) 复杂度的哈希表被广泛使用,包括 String、Hash 和 Set,它们的操作复杂度基本由哈希表决定,另一方面,Sorted Set 也采用了 O(logN) 复杂度的跳表。不过,集合类型的范围操作,因为要遍历底层数据结构,复杂度通常是 O(N)。这里,我的建议是:用其他命令来替代,例如可以用 SCAN 来代替,避免在 Redis 内部产生费时的全集合遍历操作。原创 2022-10-12 09:11:25 · 327 阅读 · 0 评论 -
键值数据库的基本架构
至此,我们构造了一个简单的键值数据库 SimpleKV。可以看到,前面两步我们是从应用的角度进行设计的,也就是应用视角;后面四步其实就是 SimpleKV 完整的内部构造,可谓是麻雀虽小,五脏俱全。SimpleKV 包含了一个键值数据库的基本组件,对这些组件有了了解之后,后面在学习 Redis 这个丰富版的 SimpleKV 时,就会轻松很多。// 从骨架开始,理清脉络为了支持更加丰富的业务场景,Redis 对这些组件或者功能进行了扩展,或者说是进行了精细优化,从而满足了功能和性能等方面的要求。原创 2022-09-26 17:54:33 · 868 阅读 · 0 评论 -
Redisson实现分布式锁
1、Redisson简介Redis 是最流行的 NoSQL 数据库解决方案之一,而 Java 是世界上最流行(注意,没有说“最好”)的编程语言之一。虽然两者看起来很自然地在一起“工作”,但是要知道,Redis 其实并没有对 Java 提供原生支持。相反,作为 Java 开发人员,我们若想在程序中集成 Redis,必须使用 Redis 的第三方库。而 Redisson 就是用于在 Java 程序中操作 Redis 的库,它使得我们可以在程序中轻松地使用 Redis。Redisson 在 java.ut原创 2022-03-07 22:27:21 · 19292 阅读 · 8 评论 -
redis实现分布式锁(案例)
目录1、业务场景引入2、基础环境准备3、Redis实现分布式锁4、分布式锁测试1、业务场景引入模拟一个电商系统,服务器分布式部署,系统中有一个用户下订单的接口,用户下订单之前需要获取分布式锁,然后去检查一下库存,确保库存足够了才会给用户下单,然后释放锁。由于系统有一定的并发,所以会预先将商品的库存保存在redis中,用户下单的时候会更新redis的库存。2、基础环境准备2.1.1.准备库存数据库-- ------------------------------ Ta原创 2022-03-06 21:42:32 · 1939 阅读 · 2 评论 -
分布式锁实现原理(redis实现)
首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:互斥性。在任意时刻,只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。 具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。 解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。下边是代码实现,首先我们要通过Maven引入Jedis开源组件,在pom.xml文件加入下面的代码:<dependenc原创 2022-03-06 16:59:34 · 742 阅读 · 0 评论 -
SpringBoot中使用redis(单机+集群)
目录引入依赖参数配置测试访问RedisTemplate相关配置集群版Spring Boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多NoSQL数据库一样提供了自动化配置的支持,包括:Redis, MongoDB, Elasticsearch, Solr和Cassandra。Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。引入依赖Spring Boot提供数据访问框架Spring Data原创 2022-03-03 16:19:24 · 4030 阅读 · 0 评论 -
redis 工具类封装
目录1-在springboot项目的pom.xml2-在application.properties中配置redis参数3-编写redis的配置类4-编写redis的工具类5-测试类RedisController.java1-在springboot项目的pom.xml在配置文件里加入redis的jar依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.or原创 2022-02-20 20:31:16 · 463 阅读 · 0 评论 -
redis集群搭建(5.0后版本)
一、Redis Cluster(Redis集群)简介redis是一个开源的key value存储系统,受到了广大互联网公司的青睐。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里用的是redis6.2.5版本。redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点;redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实原创 2022-02-19 22:06:35 · 252 阅读 · 0 评论 -
Redis安装和入门
目录一、Redis介绍二、安装redis环境配置前端启动后台启动非本地连接,禁用保护模式一、Redis介绍Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表、哈希、集合和有序集合5种。支持在服务器端计算集合的并、交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务器。Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称原创 2021-08-11 20:21:24 · 161 阅读 · 0 评论