jedis

Redis入门及应用

匿名 (未验证) 提交于 2019-12-03 00:44:02
一、什么是Redis 1、Redis概述 在我们日常的Java Web开发中,都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题。可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是主页访问量瞬间较大的时候,单一使用数据库来保存数据的系统会因为面向磁盘,磁盘读/写速度比较慢的问题而存在严重的性能弊端,一瞬间成千上万的请求到来,需要系统在极短的时间内完成成千上万次的读/写操作,这个时候往往不是数据库能够承受的,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。 2、NoSQL技术 为了克服上述的问题,Java Web项目通常会引入NoSQL技术,这是一种 基于内存的数据库 ,并且提供一定的持久化功能。Redis和MongoDB是当前使用最广泛的NoSQL,而就Redis技术而言,它的性能十分优越,可以支持每秒十几万此的读/写操作,其性能远超数据库,并且还支持集群、分布式、主从同步等配置,原则上可以无限扩展,让更多的数据存储在内存中,更让人欣慰的是它还支持一定的事务能力,这保证了高并发的场景下数据的安全和一致性。 3、Redis功能 缓存 ,毫无疑问这是Redis当今最为人熟知的使用场景,再提升服务器性能方面非常有效。 a) 排行榜 ,如果使用传统的关系型数据库来做,非常麻烦

【Redis】Redis 主从模式搭建

匿名 (未验证) 提交于 2019-12-03 00:44:02
Redis Sentinel介绍   Redis Sentinel是Redis的官方高可用性解决方案   Redis Sentinel为Redis提供高可用性。实际上,这意味着使用Sentinel可以创建一个Redis部署,可以在没有人为干预的情况下抵御某些类型的故障。   Redis Sentinel还提供其他附属任务,如监控,通知,并充当客户端的配置提供程序。   这是宏观级别的Sentinel功能的完整列表(即 大图 ): 监控 。 Sentinel会不断检查主实例和从属实例是否按预期工作。 ֪ͨ 。 Sentinel可以通过API通知系统管理员,另一台计算机程序,其中一个受监控的Redis实例出现问题。 自动故障转移 。 如果主服务器未按预期工作,Sentinel可以启动故障转移过程,其中从服务器升级为主服务器,其他其他服务器重新配置为使用新主服务器,并且使用Redis服务器的应用程序通知有关新服务器的地址。连接。 配置提供商 。 Sentinel充当客户端服务发现的权限来源:客户端连接到Sentinels,以便询问负责给定服务的当前Redis主服务器的地址。 如果发生故障转移,Sentinels将报告新地址 Redis Sentinel搭建   本例在同一台机器上搭建,实际搭建,可以分三台机器进行搭建    服务类型 角色 IP地址 端口 Redis master 127

Jedis连接Redis三种方式

匿名 (未验证) 提交于 2019-12-03 00:44:02
1、单机模式 private String addr="192.168.1.1"; private String port="6236"; private String key="key"; private Jedis jedis=new Jedis(addr,port);//Jedis获取到的Redis数据在jedis里,jedis.set("a","b");//更改key为a的值jedis.hmset(key,hash); System.out.println(jedis.get(key)); 2、分片模式 GenericObjectPoolConfig config=new GenericObjectPoolConfig(); config.setMaxIdle(32); config.setMinIdle(12); config.setTestOnBorrow(true); config.setTestOnReturn(rtrue); config.setTestWhileIdle(true); List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>(); for (int i = 0; i < shareds.size(); i++) { shards.add(new JedisShardInfo("192

redis三个框架

匿名 (未验证) 提交于 2019-12-03 00:43:02
Jedis api 在线网址:http://tool.oschina.net/uploads/apidocs/redis/clients/jedis/Jedis.html redisson 官网地址:https://redisson.org/ redisson git项目地址:https://github.com/redisson/redisson lettuce 官网地址:https://lettuce.io/ lettuce git项目地址:https://github.com/lettuce-io/lettuce-core 概念:   Jedis:是Redis的Java实现客户端,提供了比较全面的Redis命令的支持,   Redisson:实现了分布式和可扩展的Java数据结构。   Lettuce:高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。 优点:   Jedis:比较全面的提供了Redis的操作特性   Redisson:促使使用者对Redis的关注分离,提供很多分布式相关操作服务,例如,分布式锁,分布式集合,可通过Redis支持延迟队列   Lettuce:主要在一些分布式缓存框架上使用比较多 可伸缩: Jedis:使用阻塞的I/O,且其方法调用都是同步的,程序流需要等到sockets处理完I/O才能执行

Redis JedisСDemo

匿名 (未验证) 提交于 2019-12-03 00:43:02
Redis JedisСDemo 1、什么是Jedis 在常见命令中,使用各种Redis自带客户端的命令行方式访问Redis服务。 而在实际工作中却需要用到Java代码才能访问,使用第三方jar包 :Jedis就能方便地访问Redis的各种服务了。 2、jar包 使用Java操作Redis需要jedis-2.1.0.jar,如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar 3、TestJedis 这是一个很简单的Jedis应用,就是set 和get,可以看到如图所示的效果,取出了foo的值。 package redis ; import redis . clients . jedis . Jedis ; public class TestRedis { public static void main ( String [ ] args ) { Jedis jedis = new Jedis ( "localhost" ) ; //保证redis已启动 jedis . set ( "foo" , "bar" ) ; String value = jedis . get ( "foo" ) ; System . out . println ( value ) ; } } 4、TestRedisManyCommands 这是一个较为丰富的运用

redis缓存

匿名 (未验证) 提交于 2019-12-03 00:43:02
Redis 作为数据查询 Redis 作为资源的存储 redis mysql缓存模式一般采用cache Aside Pattern模式(该模式不是能够实现,缓存实现写入到数据库中,如果需要这样的,可以使用ignite缓存): 失效:应用程序先从cache取数据,没有得到,则从数据库中取数据,成功后,放到缓存中 命中:应用程序从cache中取数据,取到后返回 更新:先把数据存到数据库中,成功后,再让缓存失效(更新数据库时,并不更新Redis缓存,而是在失效操作)。 作为缓存,需要应对几个问题 缓存穿透,缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。 key不存在时,大量的数据进来查询DB 缓存雪崩,某个时间点上,大量缓存都失效了,大量请求落在数据库上,而数据库无法承受造成雪崩 缓存击穿,在并发的情况下,大量请求同时请求某一个key,而该key失效了,并发的请求就会落在数据库上,而后压垮数据库 解决这些问题的方法: 有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中

Spring--集成jedis简单实例

匿名 (未验证) 提交于 2019-12-03 00:22:01
jedis是redis的java客户端,spring将redis连接池作为一个bean配置。 redis连接池分为两种,一种是“redis.clients.jedis.ShardedJedisPool”,这是基于hash算法的一种分布式集群redis客户端连接池。 另一种是“redis.clients.jedis.JedisPool”,这是单机环境适用的redis连接池。 maven导入相关包: <!-- redis依赖包 --> < dependency > < groupId > redis.clients </ groupId > < artifactId > jedis </ artifactId > < version > 2.9.0 </ version > </ dependency > ShardedJedisPool是redis集群客户端的对象池,可以通过他来操作ShardedJedis,下面是ShardedJedisPool的xml配置,spring-jedis.xml: <? xml version="1.0" encoding="UTF-8" ?> < beans xmlns ="http://www.springframework.org/schema/beans" xmlns:xsi ="http://www.w3.org/2001/XMLSchema

Jedis set 方法参数的含义

匿名 (未验证) 提交于 2019-12-03 00:22:01
String redis.clients.jedis.Jedis.set(String key, String value, String nxxx, String expx, long time) Set the string value as value of the key. The string can’t be longer than 1073741824 bytes (1 GB). Parameters: key value nxxx NX|XX, NX -- Only set the key if it does not already exist. XX -- Only set the key if it already exist. expx EX|PX, expire time units: EX = seconds ; PX = milliseconds time expire time in the units of {@ param #expx} Returns: Status code reply 文章来源: Jedis set 方法参数的含义

jedis-sentinel原理分析

匿名 (未验证) 提交于 2019-12-03 00:15:02
原理 客户端通过连接到哨兵集群,通过发送Protocol.SENTINEL_GET_MASTER_ADDR_BY_NAME 命令,从哨兵机器中 询问master节点的信息,拿到master节点的ip和端口号以后,再到客户端发起连接。连接以后,需要在客户端建 立监听机制,当master重新选举之后,客户端需要重新连接到新的master节点 private HostAndPort initSentinels ( Set < String > sentinels , final String masterName ) { HostAndPort master = null ; boolean sentinelAvailable = false ; log . info ( "Trying to find master from available Sentinels..." ); // 有多个sentinels,遍历这些个sentinels for ( String sentinel : sentinels ) { // host:port表示的sentinel地址转化为一个HostAndPort对象。 final HostAndPort hap = HostAndPort . parseString ( sentinel ); log . fine ( "Connecting to

Redis 分布式锁的正确打开方式

走远了吗. 提交于 2019-12-02 23:06:57
前言 分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。 可靠性 首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 互斥性。在任意时刻,只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。 具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。 解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。 代码实现 组件依赖 首先我们要通过Maven引入 Jedis 开源组件,在 pom.xml 文件加入下面的代码: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> 加锁代码 正确姿势 Talk is cheap, show me the code。先展示代码,再带大家慢慢解释为什么这样实现: