jedis

Redis常用的简单命令演示

淺唱寂寞╮ 提交于 2020-01-17 17:38:56
package redis; import java.util.Iterator; import java.util.List; import java.util.Set; import redis.clients.jedis.Jedis; import redis.clients.jedis.SortingParams; public class RedisJava { /** * @param args */ public static void main(String[] args) { Jedis jedis = new Jedis("localhost"); System.out.println("连接redis:"+jedis.ping()); redisHashTest(jedis); //redisSortedSetTest(jedis); //redisSetTest(jedis); //redisListTest(jedis); //redisStringTest(jedis); } public static void redisHashTest(Jedis jedis) { System.out.println("****************"); //清理整个Redis jedis.flushDB(); //添加元素 jedis.hset("user"

redis 分布式锁

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

Springboot + redis + 注解 + 拦截器来实现接口幂等性校验

半世苍凉 提交于 2020-01-16 02:22:24
一、概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如: 订单接口, 不能多次创建订单 支付接口, 重复支付同一笔订单只能扣一次钱 支付宝回调接口, 可能会多次回调, 必须处理重复回调 普通表单提交接口, 因为网络超时等原因多次点击提交, 只能成功一次 等等 二、常见解决方案 唯一索引 – 防止新增脏数据 token机制 – 防止页面重复提交 悲观锁 – 获取数据的时候加锁(锁表或锁行) 乐观锁 – 基于版本号version实现, 在更新数据那一刻校验数据 分布式锁 – redis(jedis、redisson)或zookeeper实现 状态机 – 状态变更, 更新数据时判断状态 三、本文实现 本文采用第2种方式实现, 即通过redis + token机制实现接口幂等性校验 四、实现思路 为需要保证幂等性的每一次请求创建一个唯一标识token, 先获取token, 并将此token存入redis, 请求接口时, 将此token放到header或者作为请求参数请求接口, 后端接口判断redis中是否存在此token: 如果存在, 正常处理业务逻辑, 并从redis中删除此token, 那么, 如果是重复请求, 由于token已被删除, 则不能通过校验, 返回请勿重复操作提示 如果不存在, 说明参数不合法或者是重复请求, 返回提示即可 五

Spring集成jedis支持Redis3.0集群

拟墨画扇 提交于 2020-01-15 07:37:35
接着上一节,我们通过spring FactoryBean实现redis 3.0集群JedisCluster与spring集成。 http://www.linuxidc.com/Linux/2016-09/135123.htm 引用依赖: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.7.RELEASE</version> </dependency>java实现JedisCluster的FactoryBean。 package cn.slimsmart.jediscluster.spring; import java.text

SpringBoot集成:1、SpringBoot -Redis-前期

☆樱花仙子☆ 提交于 2020-01-15 04:43:22
一、概要 随着Spring Boot2.x的到来,支持的组件越来越丰富,也越来越成熟,其中对Redis的支持不仅仅是丰富了它的API,更是替换掉底层Jedis的依赖,取而代之换成了Lettuce(生菜)Lettuce和Jedis的都是连接Redis Server的客户端程序。Jedis在实现上是直连redis server,多线程环境下非线程安全,除非使用连接池,为每个Jedis实例增加物理连接。Lettuce基于Netty的连接实例(StatefulRedisConnection),可以在多个线程间并发访问,且线程安全,满足多线程环境下的并发访问,同时它是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例 二、常用的java连接框架 1、Jedis Github Jedis是Redis官方推荐的Java连接开发工具 2、redisson 官方网站 实现了分布式和可扩展的Java数据结构 3、lettuce 用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。* 官方网站 4、对比: **Jedis:**比较全面的提供了Redis的操作特性 **Redisson:**提供很多分布式相关操作服务,例如: 分布式锁 , 分布式集合 ,可通过Redis支持延迟队列 Lettuce: 主要在一些 分布式缓存 框架上使用比较多 三、spring-data

Jedis Could not get a resource from the pool

一曲冷凌霜 提交于 2020-01-15 04:32:33
Jedis Could not get a resource from the pool 一、错误描述 二、逐一排查 2.1 网络检查 2.2 JedisPool连接数设置检查 2.3 JedisPool连接池代码检查 2.4 检查是否发生nf_conntrack丢包 2.5 检查是否TIME_WAIT问题 2.6 检查是否DNS问题 三、总结 一、错误描述 使用Jedis连接池模式的时候容易出现的错误是无法获取连接池 redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool 对于这类问题的原因有几类,可以根据以下一一进行排查 二、逐一排查 2.1 网络检查 首先检查是否网络问题,可以通过 telnet host 6379 进行简单测试,连上之后auth 密码回车查看是否返回+OKrn,如果能够正确返回继续检查ping请求或者读写请求是否正常返回,操作多次排查网络问题影响。 2.2 JedisPool连接数设置检查 JedisPool使用的时候需要进行连接池的设置,用户在超过MaxTotal连接数的时候也会出现获取不到连接池的情况,这个时候可以在访问客户端上通过 netstat -an | grep 6379 | grep EST | wc -l

Is it necessary to use jedis.close()

僤鯓⒐⒋嵵緔 提交于 2020-01-14 02:55:24
问题 Hi I am new in implementing the java code, Tried the following things:- I am using jedis as redis java client-library, I have made the jedis object and used its api to print the redis information, but this all is done inside the method, So my doubt is "should I use jedis.close() to close the client connection in my code" class Information{ public void redisdetails(){ Jedis jedis = new Jedis("localhost", 6379)); Map<String, Object> info = new HashMap<>(); info.put("server", jedis.info("server"

redis整合Spring入门

南笙酒味 提交于 2020-01-13 21:09:18
首先   衷心感谢这篇博客给我入门时的启发 三颗心脏    你需要知道,spring的官方文档中已经注明,与redis整合时,spring的jar包版本不能低于4.2.6,否则不支持,会报错的哟    测试的时候请保持redis运行,不要把redis×掉了 接下来    以下是我在MyEclipse上亲测写下的博客 准备工作    除了必须的spring jar包外,你还需要用到这两个jar包(我不知道怎么传这些jar包,大家可以到maven官网上去找)      1 .jedis-2.9.0.jar      2 .commons-pools-2.6.0.jar 做两件事   1 .配置 spring 配置文件 bean1.xml(我自己的命名哈,一般应该是applicationContext.xml)    如果你在安装redis时自己设置的地址,请修改jedisPool bean中的host的value   一堆代码块: ...... <!-- 连接池配置 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!-- 最大连接数 --> <property name="maxTotal" value="30" /> <!-- 最大空闲连接数 --> <property name

redis

坚强是说给别人听的谎言 提交于 2020-01-13 18:57:28
目录 概念 什么是NOSQL NOSQL和关系型数据库比较 非关系型数据库的优势 关系型数据库的优势 总结 主流的NOSQL产品 什么是Redis 下载安装 命令操作 redis的数据结构 字符串类型:string 哈希类型:hash(map格式) 列表类型:list(linkedlist格式) 集合类型:set 有序集合类型:sortedset 通用命令 持久化 Java客户端:Jedis 概述 Jedis操作redis中的数据结构 字符串类型 string 哈希类型 hash(map格式) 列表类型 list(linkedlist格式) 集合类型 set 有序集合 sortedset jedis连接池: jedisPool jedis连接池工具类 案例 概念 简介: ​ 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。 概念: redis是一款高性能的NOSQL系列的非关系型数据库 什么是NOSQL NoSQL(NoSQL = Not Only SQL) ,意即“不仅仅是SQL”,是一项全新的数据库理念

NoSuchMethodError: org.springframework.data.repository.config.RepositoryConfigurationSource.getAttribute

旧时模样 提交于 2020-01-12 07:12:09
问题 I am trying to use spring-data-redis in a spring-boot application to work with redis. I am creating JedisConnectionFactory as follows: RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(); configuration.setHostName("localhost"); configuration.setPort(6379); JedisConnectionFactory connectionFactory = new JedisConnectionFactory(configuration); It throws the exception: Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.data.repository.config