jedis

Java EE入门(十九)——Redis基础

只谈情不闲聊 提交于 2020-03-26 13:03:09
Java EE入门(十九)——Redis基础   iwehdio的博客园: https://www.cnblogs.com/iwehdio/ 1、redis概述 是一款高性能的NOSQL系列的非关系型数据库。 非关系型数据库:以键值对的形式存储,数据之间没有关联关系,数据存储在内存中。 是实现缓存的一种形式,如果缓存中有请求的数据则直接返回,否则再去数据库中查询。 redis 下的文件: redis.windows.conf:配置文件 redis-cli.exe:客户端。 redis-server.exe:服务器端。 先启动服务器,再打开客户端。默认端口6379。 redis 的数据结构: redis 存储的是键值对格式的数据。键 key 都是字符串,value 值有五种不同的数据结构。 value 值的数据结构包括:字符串类型(string格式)、哈希类型(map格式)、列表类型(linkedlist格式)、集合类型(set格式)、有序集合类型(sortedset格式)。 哈希类型(map格式)可以在 value 中可以再存储键值对类型的数据。 列表、集合、有序集合可以存储序列数据,集合不允许重复,有序集合中元素有顺序。 命令操作: 字符串: 存储数据: set key value 。 获取数据: get key 。 删除数据: del key 。 哈希类型: 存储数据:

java代码中操作Redis:单机redis、集群redis(spring+redis集成)

两盒软妹~` 提交于 2020-03-25 08:42:29
3 月,跳不动了?>>> 一、准备 关于redis的一些安装,可以查看我的几篇文章自行安装: Redis目录 。 一个web项目,我这边一直用的一个github项目是: https://github.com/gubaijin/buildmavenweb 导入java的Redis客户端依赖包Jedis: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> 二、单机Redis 简单单机用代码测试: Jedis jedis = new Jedis("localhost"); jedis.set("foo", "bar"); String value = jedis.get("foo"); 跟spring集成,大家可以直接点击查看: J2ee项目从0搭建(十一):在项目中集成Redis,用于数据的存储或者缓存 三、代码中连接redis集群 //使用jedis在代码中连接redis集群,因为是集群,可以自动发现,也同样只要一个地址就行了 Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>(); //Jedis Cluster will

Java连接远程Redis

一世执手 提交于 2020-03-25 05:56:07
1. 安装redis server 腾讯云直接运行: yum install redis-server ,没有yum源也可以直接wget下载。 redis-server & //后台启动redis redis-cli //使用redis 打开redis.conf文件在 NETWORK 部分有说明 /usr/local/src ################################## NETWORK ##################################### # By default, if no "bind" configuration directive is specified, Redis listens # for connections from all the network interfaces available on the server. # It is possible to listen to just one or multiple selected interfaces using # the "bind" configuration directive, followed by one or more IP addresses. # # Examples: # # bind 192.168.1.100 10.0.0.1 #

Jedis使用

丶灬走出姿态 提交于 2020-03-24 21:27:25
3 月,跳不动了?>>> Java官方推荐使用Jedis作为Redis的连接开发工具 1、Jedis 使用 1.1、添加依赖 <dependencies> <!--redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> </dependencies> 1.2、测试代码 package com.czxy; import redis.clients.jedis.Jedis; /** * @author 庭前云落 * @Date 2020/3/24 11:32 * @description */ public class TestJava { public static void main(String[] args) { //1 连接redis,new Jedis(ip地址,端口号) Jedis jedis = new Jedis("127.0.0.1", 6379); //2 设置数据,

redis 存储java对象 两种方式

拥有回忆 提交于 2020-03-24 12:00:36
根据redis的存储原理,Redis的key和value都支持二进制安全的字符串 1.利用序列化和反序列化的方式 存储java对象我们可以通过对象的序列化与反序列化完成存储于取出,这样就可以使用redis存储java对象了 第一步:先创建redisUtil package com.runtai.redis; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class RedisUtil { private static String ip="localhost"; private static int port=6379; private static int timeout=10000; private static JedisPool pool=null; static{ JedisPoolConfig config=new JedisPoolConfig(); config.setMaxTotal(1024);//最大连接数 config.setMaxIdle(200);//最大空闲实例数 config.setMaxWaitMillis(10000);//等连接池给连接的最大时间

redis+mybatis+spring

我的未来我决定 提交于 2020-03-24 11:50:54
3 月,跳不动了?>>> redis的安装 http://liuyieyer.iteye.com/blog/2078093 redis的主从高可用 http://liuyieyer.iteye.com/blog/2078095 Mybatis 的使用不多说。 Mybatis为了方便我们扩展缓存定义了一个Cache接口,看看ehcache-mybatis的源码就明白了。我们要使用自己的cache同样的实现Cache接口即可。直接上代码 public class RedisCache implements Cache { private static Log logger = LogFactory.getLog(RedisCache.class); private Jedis redisClient = createClient(); /** The ReadWriteLock. */ private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); private String id; public RedisCache(final String id) { if (id == null) { throw new IllegalArgumentException("Cache instances

Redis中使用Java代码的方式实现发布订阅流程

怎甘沉沦 提交于 2020-03-23 14:07:55
场景 Redis中的发布与订阅的概念与以命令行的方式实现发布订阅举例: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/105042049 在上面了解了Redis的发布与订阅的概念以及使用命令行的方式实现简单的发布与订阅流程后, 在Java中怎样实现发布与订阅。 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。 实现 JedisPushSub类 Jedis中的JedisPubSub类是Jedis的一个抽象类,此类定义了public/subscribe的回调方法,通过继承JedisPubSub类 重写回调方法。实现java中Redis的发布订阅。当Redis发生发布或者订阅的相关事件时会调用这些回调方法,只在 回调方法中实现自己的业务逻辑。 onMessage():发布者发布消息时,会执行订阅者的回调方法onMessage()接收发布的消息,在此方法实现消息接收后进行 自定义的业务逻辑处理。 实现订阅者 打开IDEA新建Maven项目,然后添加jedis的依赖 <dependencies> <!-- https://mvnrepository.com/artifact/redis.clients

rabbitmq系列(四)死信队列

こ雲淡風輕ζ 提交于 2020-03-23 09:53:16
一、什么是死信队列 当消息在一个队列中变成一个死信之后,它将被重新publish到另一个交换机上,这个交换机我们就叫做死信交换机,私信交换机将死信投递到一个队列上就是死信队列。具体原理如下图: 消息变成死信的三种情况: 消息被拒绝(basic.reject / basic.nack),并且requeue = false 消息TTL过期 队列达到最大长度 二、手动签收应答模式 应答模式分为两种,手动签收和自动签收,自动应答就是消费者消费了一条消息就自动告诉队列删除消息。这样的弊端就是不管消费逻辑有没有成功,都会将消息删除,这样就会造成消息丢失。而使用手动签收后,就是在消费逻辑处理成功后,手动告诉队列消费成功,然后队列再去删除这条消息。 再消费者配置文件中开启手动签收模式 spring.rabbitmq.listener.simple.acknowledge-mode = manual 在消费逻辑处理成功后手动签收,修改消费者代码 @RabbitListener(queues = QUEUE_NAME) public void receiveMessage(Message message,@Headers Map<String,Object> headers, Channel channel) throws Exception { Jedis jedis = new Jedis(

rabbitmq系列(四)死信队列

吃可爱长大的小学妹 提交于 2020-03-23 09:26:18
3 月,跳不动了?>>> 一、什么是死信队列 当消息在一个队列中变成一个死信之后,它将被重新publish到另一个交换机上,这个交换机我们就叫做死信交换机,私信交换机将死信投递到一个队列上就是死信队列。具体原理如下图: 消息变成死信的三种情况: 消息被拒绝(basic.reject / basic.nack),并且requeue = false 消息TTL过期 队列达到最大长度 二、手动签收应答模式 应答模式分为两种,手动签收和自动签收,自动应答就是消费者消费了一条消息就自动告诉队列删除消息。这样的弊端就是不管消费逻辑有没有成功,都会将消息删除,这样就会造成消息丢失。而使用手动签收后,就是在消费逻辑处理成功后,手动告诉队列消费成功,然后队列再去删除这条消息。 再消费者配置文件中开启手动签收模式 spring.rabbitmq.listener.simple.acknowledge-mode = manual 在消费逻辑处理成功后手动签收,修改消费者代码 @RabbitListener(queues = QUEUE_NAME) public void receiveMessage(Message message,@Headers Map<String,Object> headers, Channel channel) throws Exception { Jedis jedis =

分布式之延时任务方案解析

放肆的年华 提交于 2020-03-23 09:23:42
引言 在开发中,往往会遇到一些关于延时任务的需求。例如 生成订单30分钟未支付,则自动取消 生成订单60秒后,给用户发短信 对上述的任务,我们给一个专业的名字来形容,那就是 延时任务 。那么这里就会产生一个问题,这个 延时任务 和 定时任务 的区别究竟在哪里呢?一共有如下几点区别 定时任务有明确的触发时间,延时任务没有 定时任务有执行周期,而延时任务在某事件触发后一段时间内执行,没有执行周期 定时任务一般执行的是批处理操作是多个任务,而延时任务一般是单个任务 下面,我们以判断订单是否超时为例,进行方案分析 方案分析 (1)数据库轮询 思路 该方案通常是在小型项目中使用,即通过一个线程定时的去扫描数据库,通过订单时间来判断是否有超时的订单,然后进行update或delete等操作 实现 博主当年早期是用 quartz 来实现的(实习那会的事),简单介绍一下 maven项目引入一个依赖如下所示 <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.2</version> </dependency> 调用Demo类MyJob如下所示 package com.rjzheng.delay1; import org.quartz.JobBuilder;