redisson

redis分布式锁-redisson

时间秒杀一切 提交于 2021-02-20 12:43:08
定义连接池 package cn.cao.config ; import org.redisson.Redisson ; import org.redisson.api.RedissonClient ; import org.redisson.config.Config ; import org.springframework.beans.factory.annotation. Value ; import org.springframework.context.annotation. Bean ; import org.springframework.context.annotation. Configuration ; /** * redisson 配置类 * Created on 2020/11/01 */ @Configuration public class RedissonConfig { @Value ( "${spring.redis.host}" ) private String host ; @Value ( "${spring.redis.port}" ) private String port ; @Value ( "${spring.redis.password}" ) private String password ; @Bean public

SpringBoot:Redis分布式锁

这一生的挚爱 提交于 2021-01-29 09:58:58
概述 目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足 一致性 (Consistency)、 可用性 (Availability)和 分区容错性 (Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以接受的范围内即可。 在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。有的时候,我们需要保证一个方法在同一时间内只能被同一个线程执行。 基于数据库实现分布式锁; 基于缓存(Redis等)实现分布式锁; 基于Zookeeper实现分布式锁; 尽管有这三种方案,但是不同的业务也要根据自己的情况进行选型,他们之间没有最好只有更适合!但由于操作数据库需要一定的开销,会照成一定的性能问题。并且使用数据库行级锁并不一定靠谱,尤其是当我们锁表并不大的时候,所以实际开发过程中使用Redis或Zookeeper的比较多。 分布式锁特性 当我们在设计分布式锁的时候,我们应该考虑分布式锁至少要满足的一些条件,同时考虑如何高效的设计分布式锁

Redis基础、高级特性与性能调优

。_饼干妹妹 提交于 2020-12-18 05:04:51
本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍。之后概览Redis提供的高级能力,并在部署、维护、性能调优等多个方面进行更深入的介绍和指导。 本文适合使用Redis的普通开发人员,以及对Redis进行选型、架构设计和性能调优的架构设计人员。 目录 概述 Redis的数据结构和相关常用命令 数据持久化 内存管理与数据淘汰机制 Pipelining 事务与Scripting Redis性能调优 主从复制与集群分片 Redis Java客户端的选择 概述 Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库、缓存服务或消息服务使用。 Redis支持多种数据结构,包括字符串、哈希表、链表、集合、有序集合、位图、Hyperloglogs等。 Redis具备LRU淘汰、事务实现、以及不同级别的硬盘持久化等能力,并且支持副本集和通过Redis Sentinel实现的高可用方案,同时还支持通过Redis Cluster实现的数据自动分片能力。 Redis的主要功能都基于单线程模型实现,也就是说Redis使用一个线程来服务所有的客户端请求,同时Redis采用了非阻塞式IO,并精细地优化各种命令的算法时间复杂度,这些信息意味着: Redis是线程安全的(因为只有一个线程),其所有操作都是原子的,不会因并发产生数据异常

面试题:Redis 40 道

夙愿已清 提交于 2020-12-15 02:21:59
点击上方“ 码农进阶之路 ”,选择 “ 设为星标 ” 回复 “ 面经 ” 获取面试资料 1、什么是Redis? Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即master-slave模式的数据备份。 Redis 优势 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。 Redis与其他key-value存储有什么不同? Redis有着更为复杂的数据结构并且提供对他们的原子性操作

Redis,就是这么朴实无华

泪湿孤枕 提交于 2020-12-05 02:55:12
http://xjjdog.cn 对200+原创文章进行了细致的分类,阅读更流畅,欢迎收藏。 原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。任何不保留此声明的转载都是抄袭。 Redis是2009年发布的,到今天已经超过10岁了。作为必备技能之一,关于它也有聊不完的话题。本文中的任何一个点,都可以展开,完成一篇中等规模的文章。 交流和面试时,你需要用最精准的语言进行描述,那么本文比较适合你。 redis能力: 1 0W/s QPS (redis-benchmark) 1w+ 长链接 (netstat / ss) 最复杂的Zset 6kw数据 写入1k/s 读取5k/s 平均耗时5ms 持久化 (rdb) 1. 基本概览 学习一门新语言,重要的是掌握它的基本数据结构,以及这些数据结构的API。redis的这些数据结构,就类似一门语言。 Redis数据结构 常用5种,一共10种。面试时一般回答5种即可,但其他5种是加分项。 String 字符串 Hash 字典 List 列表 Set 集合 ZSet 有序集合。性能参考: 《redis的zset有多牛?请把耳朵递过来》 Pubsub 发布订阅 (不推荐使用,坑很多) Bitmap 位图 GEO 地理位置 (有限使用,附近的人) Stream 流(5.0) (与Kafka非常像) Hyperloglog

面试问Redis锁,我脸都绿了......

喜你入骨 提交于 2020-11-29 04:34:34
来自:掘金(作者:Vt 编辑:陶家龙) 原文链接: https://juejin.im/post/5e61a454e51d4526f071e1df 谈起 Redis 锁,下面三个,算是出现最多的高频词汇: Setnx RedLock Redisson Setnx 目前通常所说的 Setnx 命令,并非单指 Redis 的 setnx key value 这条命令。 一般代指 Redis 中对 Set 命令加上 NX 参数进行使用,Set 这个命令,目前已经支持这么多参数可选: SET key value [EX seconds|PX milliseconds] [NX|XX] [KEEPTTL] 当然了,就不在文章中默写 API 了,基础参数还有不清晰的,可以蹦到官网。 上图是笔者画的 Setnx 大致原理,主要依托了它的 Key 不存在才能 Set 成功的特性,进程 A 拿到锁,在没有删除锁的 Key 时,进程 B 自然获取锁就失败了。 那么为什么要使用 PX 30000 去设置一个超时时间? 是怕进程 A 不讲道理啊,锁没等释放呢,万一崩了,直接原地把锁带走了,导致系统中谁也拿不到锁。 就算这样,还是不能保证万无一失。 如果进程 A 又不讲道理,操作锁内资源超过笔者设置的超时时间,那么就会导致其他进程拿到锁,等进程 A 回来了,回手就是把其他进程的锁删了,如图: 还是刚才那张图

面试问Redis锁,我脸都绿了......

倾然丶 夕夏残阳落幕 提交于 2020-11-28 04:16:46
点击上方 “ java大数据修炼之道 ”, 选择“ 置顶或者星标 ” 与你一起成长 作者: Vt juejin.im/post/5e61a454e51d4526f071e1df 谈起 Redis 锁,下面三个,算是出现最多的高频词汇: Setnx RedLock Redisson Setnx 目前通常所说的 Setnx 命令,并非单指 Redis 的 setnx key value 这条命令。 一般代指 Redis 中对 Set 命令加上 NX 参数进行使用,Set 这个命令,目前已经支持这么多参数可选: SET key value [EX seconds|PX milliseconds] [NX|XX] [KEEPTTL] 当然了,就不在文章中默写 API 了,基础参数还有不清晰的,可以蹦到官网。 上图是笔者画的 Setnx 大致原理,主要依托了它的 Key 不存在才能 Set 成功的特性,进程 A 拿到锁,在没有删除锁的 Key 时,进程 B 自然获取锁就失败了。 那么为什么要使用 PX 30000 去设置一个超时时间? 是怕进程 A 不讲道理啊,锁没等释放呢,万一崩了,直接原地把锁带走了,导致系统中谁也拿不到锁。 就算这样,还是不能保证万无一失。 如果进程 A 又不讲道理,操作锁内资源超过笔者设置的超时时间,那么就会导致其他进程拿到锁,等进程 A 回来了

面试问Redis锁,我脸都绿了......

痞子三分冷 提交于 2020-11-25 03:19:04
来自:掘金(作者:Vt 编辑:陶家龙) 原文链接: https://juejin.im/post/5e61a454e51d4526f071e1df 谈起 Redis 锁,下面三个,算是出现最多的高频词汇: Setnx RedLock Redisson Setnx 目前通常所说的 Setnx 命令,并非单指 Redis 的 setnx key value 这条命令。 一般代指 Redis 中对 Set 命令加上 NX 参数进行使用,Set 这个命令,目前已经支持这么多参数可选: SET key value [EX seconds|PX milliseconds] [NX|XX] [KEEPTTL] 当然了,就不在文章中默写 API 了,基础参数还有不清晰的,可以蹦到官网。 上图是笔者画的 Setnx 大致原理,主要依托了它的 Key 不存在才能 Set 成功的特性,进程 A 拿到锁,在没有删除锁的 Key 时,进程 B 自然获取锁就失败了。 那么为什么要使用 PX 30000 去设置一个超时时间? 是怕进程 A 不讲道理啊,锁没等释放呢,万一崩了,直接原地把锁带走了,导致系统中谁也拿不到锁。 就算这样,还是不能保证万无一失。 如果进程 A 又不讲道理,操作锁内资源超过笔者设置的超时时间,那么就会导致其他进程拿到锁,等进程 A 回来了,回手就是把其他进程的锁删了,如图: 还是刚才那张图

藏不住了!字节跳动限定“Redis深度历险“笔记,有什么?

纵然是瞬间 提交于 2020-11-22 10:56:09
前言 我在程序员这个圈子里包括身边的程序员朋友里经常听到一句话,那就是“程序员这个职业都是吃青春饭的”,为什么这句话在网络上这么多人流传呢,我大概归纳了一下。 大概分为三点:首先这个行业毕业到30岁也工作了几年,如果不是非常热爱的,很多人会产生厌倦心理,从而转业,改行。其次就是这个行业普遍加班很多,工作强度大,很多年纪轻轻的小伙子短短几年就熬成了大叔,而且因为这个行业交流不多,导致很多该行业的人不太会沟通交流,随之的就是只能看着别人过七夕了,在这心疼这些人10秒钟。最后一点,也是最重要的一点,其实有很多人在公司里就是混日子的,不想上进,不想学习,俗称“我们只是代码的搬运工”。 为什么说是最重要的一点呢,因为这个行业的技术发展非常迅速,如果你不思进取,只想着混日子,那就只能等着被淘汰了,我觉得不单单是这个行业,很多行业都是学无止境的,持续提升自己,才能得到更好的! 经我的一位铁哥们透露,这份字节跳动内部限定的“redis深度历险笔记”,有着非常齐全的知识点和非常强大的核心原理和应用实践。 文章中会主要介绍一下其中重要的知识点和BAT常问的redis面试题,由于文章的限制,不能完全展示给大家,有需要这份“Redis深度历险笔记+BAT常问的面试题”的朋友们, 点击这里 即可快速领取! Redis深度历险笔记 Redis是用来干什么的 我们要学习Redis

SpringBoot整合Redis分布式锁Redisson(单机)

 ̄綄美尐妖づ 提交于 2020-11-22 04:34:39
环境:SpringBoot2.x maven增加配置 <!-- redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--springboot2.0的redis整合包多出lettuce连接池,需要增加commons-pool2包 1.5的版本默认采用的连接池技术是jedis 2.0以上版本默认连接池是lettuce spring boot 2.0 的操作手册有标注 大家可以去看看 地址是:https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/htmlsingle--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.2</version> </dependency> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId>