redisson

对比Memcached和Redis,谁才是适合你的缓存?

孤街醉人 提交于 2020-07-28 11:23:56
Memcached vs Redis 近期公司采购软件,评估时,某软件谈到使用了 Memcached 和 Redis 缓存。在本文中,将研究这两个流行的缓存的异同,方便理解和记忆。 1. Memcached 与 Redis 通常,我们会考虑在处理大量数据时使用** 缓存 提高性能。** Memcached 是一个分布式内存缓存系统,设计简单易用,非常适合用作缓存或会话存储。 Redis 是一个内存中的数据结构存储,它提供了一系列丰富的特性。它作为缓存、数据库、消息代理和队列非常有用。 2. 安装 2.1. 安装 Memcached 下载最新版的 Memcached 包并执行make进行安装 : $ wget http://memcached.org/latest $ tar -zxvf memcached-1.6.3.tar.gz $ cd memcached-1.6.3 $ ./configure && make && make test && sudo make install 2.2. 安装 Redis 相似的, 安装最新版本的 Redis server : $ wget http://download.redis.io/releases/redis-5.0.8.tar.gz $ tar xzf redis-5.0.8.tar.gz $ cd redis-5.0.8 $

Redis 分布式锁(一)

这一生的挚爱 提交于 2020-07-28 06:38:48
前言 本文力争以最简单的语言,以博主自己对分布式锁的理解,按照自己的语言来描述分布式锁的概念、作用、原理、实现。如有错误,还请各位大佬海涵,恳请指正。分布式锁分两篇来讲解,本篇讲解客户端,下一篇讲解redis服务端。 概念 如果把分布式锁的概念搬到这里,博主也会觉得枯燥。博主这里以举例的形式来描绘它。 试想一种场景,在一个偏远小镇上的火车站,只有一个售票窗口。 火车站来了10名旅客,前往售票窗口购买火车票,旅客只能排队购票,排到第一的旅客,可以与售票员沟通,买票。 好啦,以上就是一个分布式锁的场景,我们来分析一下每一个细节。 每位旅客可以理解为一个系统或者线程。他们在竞争售票员的工作时间。 是不是觉得分布式锁也不是什么高大上的概念。有同学会问,锁到底在哪里呢?还是买票场景,我们看看锁长什么样子。 我们深入想一下,这10位旅客本来是并行的(没有买票前,他们有的在吃饭,有的在玩手机,等等等),而到了买票的时候,就必须排队(串行),而不是一起买票。 没错,就是在特定的场景下,将并行的场景,变成串行,就是分布式锁的奥义所在。 作用 分布式锁的作用不但非常大,而且非常多。 在软件设计中,比如电商秒杀活动。商家预备了1000件货物,也就只有这1000件货,有1500人参与秒杀,可以理解为1500个线程来排队购买商品。那就必须将这1500个线程排个队(比如按照时间),设置一把锁,一个购买过程结束

面试被问 Redis 锁,我哭了 qaq

落花浮王杯 提交于 2020-07-25 14:34:10
谈起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回来了,回手就是把其他进程的锁删了,如图: 还是刚才那张图,将T5时刻改成了锁超时,被redis释放。 进程B在T6开开心心拿到锁不到一会,进程A操作完成,回手一个del,就把锁释放了。 当进程B操作完成,去释放锁的时候(图中T8时刻): 找不到锁其实还算好的

基于Redis的分布式锁实现(转)

喜夏-厌秋 提交于 2020-07-24 11:21:11
前言 本篇文章主要介绍基于Redis的分布式锁实现到底是怎么一回事,其中参考了许多大佬写的文章,算是对分布式锁做一个总结 分布式锁概览 在多线程的环境下,为了保证一个代码块在同一时间只能由一个线程访问,Java中我们一般可以使用synchronized语法和ReetrantLock去保证,这实际上是本地锁的方式。但是现在公司都是流行分布式架构,在分布式环境下,如何保证不同节点的线程同步执行呢? 实际上,对于分布式场景,我们可以使用分布式锁,它是控制分布式系统之间 互斥访问共享资源 的一种方式。 比如说在一个分布式系统中,多台机器上部署了多个服务,当客户端一个用户发起一个数据插入请求时,如果没有分布式锁机制保证,那么那多台机器上的多个服务可能进行并发插入操作,导致数据重复插入,对于某些不允许有多余数据的业务来说,这就会造成问题。而分布式锁机制就是为了解决类似这类问题,保证多个服务之间互斥的访问共享资源,如果一个服务抢占了分布式锁,其他服务没获取到锁,就不进行后续操作。大致意思如下图所示(不一定准确): 分布式锁的特点 分布式锁一般有如下的特点: 互斥性: 同一时刻只能有一个线程持有锁 可重入性: 同一节点上的同一个线程如果获取了锁之后能够再次获取锁 锁超时:和J.U.C中的锁一样支持锁超时,防止死锁 高性能和高可用: 加锁和解锁需要高效,同时也需要保证高可用,防止分布式锁失效

Redis实现分布式锁全局锁—Redis客户端Redisson中分布式锁RLock实现

孤人 提交于 2020-07-24 02:57:10
1. 前因 以前实现过一个Redis实现的全局锁, 虽然能用, 但是感觉很不完善, 不可重入, 参数太多等等. 最近看到了一个新的Redis客户端Redisson, 看了下源码, 发现了一个比较好的锁实现RLock, 于是记录下. 2. Maven依赖 org.redisson redisson 1.2.1 3. 初试 Redisson中RLock的使用很简单, 来看看一个最简单的例子. import org.redisson.Redisson; import org.redisson.core.RLock; public class Temp { public static void main(String[] args) throws Exception { Redisson redisson = Redisson.create(); RLock lock = redisson.getLock("haogrgr"); lock.lock(); try { System.out.println("hagogrgr"); } finally { lock.unlock(); } redisson.shutdown(); } } 来源: oschina 链接: https://my.oschina.net/u/4281386/blog/4299868

使用Jedis操作Redis数据库

心已入冬 提交于 2020-05-07 19:39:54
Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java、C、C#、C++、php、Node.js、Go等。 在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用 Jedis和Redisson 。 在企业中用的最多的就是 Jedis ,Jedis同样也是托管在github上,地址:https://github.com/xetorthio/jedis。 使用Jedis时,需要导入两个jar包: Jedis的基本操作是: Jedis官方文档: http://xetorthio.github.io/jedis/ Jedis的常用API是: Jedis的基本操作是: @Test public void testJedisSingle(){ // 1 设置ip地址和端口 Jedis jedis = new Jedis("localhost", 6379 ); // 2 设置数据 jedis.set("name", "qingmu" ); // 3 获得数据 String name = jedis.get("name" ); System.out.println(name); // 4 释放资源 jedis.close(); } jedis连接池的使用: jedis连接资源的创建与销毁是很消耗程序性能

基于Redis的Java布隆过滤器

半腔热情 提交于 2020-05-04 00:27:04
通过在优锐课的java学习分享中,对于 Redis 有了更深的理解。了解如何通过 Redis Java客户端Redisson在Java和Redis中使用Bloom过滤器。我们可以看到,码了很多专业的相关知识, 分享给大家参考学习。 布隆过滤器是一种概率数据结构,用于有效测试集合中是否存在元素。 使用 Bloom筛选器可以帮助减少键/值对的昂贵磁盘查找次数。 使用 Java编程语言,开发人员可以使用各种预先构建的Bloom过滤器数据结构,包括Google的Guava核心Java库中的“ BloomFilter类”。 Redis是一种开源的内存中数据结构存储,可用于实现NoSQL数据库。 但是,Java与开箱即用的Redis不兼容。 Java开发人员必须使用Redis Java客户端才能访问功能,例如Bloom过滤器。 在本文中,我们将讨论如何通过Redis Java客户端Redisson在Java和Redis中使用Bloom过滤器。 使用 Redisson在Redis和Java中使用Bloom过滤器 Redisson是Redis的超快速,轻量级Java客户端,提供许多常见的Java对象和功能,包括Bloom过滤器。 以下示例代码演示了如何通过 RBloomFilter接口在Redisson中使用Bloom过滤器: Java 1 RBloomFilter<SomeObject>

Redis之上的分布式Java队列

[亡魂溺海] 提交于 2020-05-02 10:15:09
最近学习的势头大涨,码了很多干货。分享给大家参考学习! 通过优锐课的java学习笔记中,了解到关于 让我们使用Redisson Java框架讨论六种不同类型的基于Redis的分布式队列。 1、在 Redis中使用队列 Redis是一个功能强大的工具,支持从字符串和列表到映射和流的许多不同类型的数据结构。 开发人员将Redis用于多种目的,包括用于数据库,缓存和消息代理。 像任何消息代理一样, Redis需要以正确的顺序发送消息。 可以根据消息的年龄或某些其他预定义的优先级等级发送消息。 为了存储这些未决消息, Redis开发人员需要队列数据结构。 Redisson是使用Redis和Java进行分布式编程的框架,它提供了许多分布式数据结构(包括队列)的实现。 Redisson通过提供Java API使Redis开发更加容易。 Redisson不需要开发人员学习Redis命令,而是包括所有众所周知的Java接口,例如Queue和BlockingQueue。 Redisson还处理Redis中繁琐的幕后工作,例如连接管理,故障转移处理和数据序列化。 2、基于 Redis的分布式Java队列 Redisson提供了Java中基本队列数据结构的多个基于Redis的实现,每种实现都有不同的功能。 这使 你 可以选择最适合 你 目的的队列类型。 下面,我们将使用 Redisson

SpringBoot使用Redis 数据访问解决方案(连接池、Pipleline及分布式)

笑着哭i 提交于 2020-04-30 12:46:11
Redis操作是单线程的,使用连接池可以减少连接的创建,redis连接池有两种方式:Jedis(JedisPool) 和 Lettuce(LettucePool)。 Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server。在Lettuce和Jedis之外还有Redission ,Redisson:实现了分布式和可扩展的Java数据结构。 Redis 客户端Jedis和Lettuce的区别 Jedis Jedis在实现上是直接连接的Redis Server,如果在多线程环境下是非线程安全的。每个线程都去拿自己的 Jedis 实例,当连接数量增多时,资源消耗阶梯式增大,连接成本就较高了。这个时候只有使用连接池,为每个Jedis实例增加物理连接。 Lettuce Lettuce的连接是基于Netty的,Netty 是一个多线程、事件驱动的 I/O 框架。连接实例可以在多个线程间共享,当多线程使用同一连接实例时,是线程安全的。Lettuce连接实例(StatefulRedisConnection)可以在多个线程间并发访问,应为StatefulRedisConnection是线程安全的,所以一个连接实例(StatefulRedisConnection)就可以满足多线程环境下的并发访问,当然这个也是可伸缩的设计

史上最全Redis面试题及答案

纵然是瞬间 提交于 2020-04-28 23:18:51
1、什么是Redis? 2、Redis相比memcached有哪些优势? 3、Redis支持哪几种数据类型? 4、Redis主要消耗什么物理资源? 5、Redis的全称是什么? 6、Redis有哪几种数据淘汰策略? 7、Redis官方为什么不提供Windows版本? 8、一个字符串类型的值能存储最大容量是多少? 9、为什么Redis需要把所有数据放到内存中? 10、Redis集群方案应该怎么做?都有哪些方案? 11、Redis集群方案什么情况下会导致整个集群不可用? 12、MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据? 13、Redis有哪些适合的场景? 14、Redis支持的Java客户端都有哪些?官方推荐用哪个? 15、Redis和Redisson有什么关系? 16、Jedis与Redisson对比有什么优缺点? 17、Redis如何设置密码及验证密码? 18、说说Redis哈希槽的概念? 19、Redis集群的主从复制模型是怎样的? 20、Redis集群会有写操作丢失吗?为什么? 21、Redis集群之间是如何复制的? 22、Redis集群最大节点个数是多少? 23、Redis集群如何选择数据库? 24、怎么测试Redis的连通性? 25、Redis中的管道有什么用? 26、怎么理解Redis事务? 27