Jedis分布式+序列化

2024-08-22 01:32
文章标签 分布式 序列化 jedis

本文主要是介绍Jedis分布式+序列化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

由于代码中用不到jedis了,做个记录,万一以后还用的着呢,对吧
由于我是要用到双机热备,所以用到了主从redis ,服务器中的配置详见上一篇文章,这里是springboot中的使用和配置
首先是在application.properties文件中配置redis


spring.redis.host=10.5.133.213
spring.redis.port=6379
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1
spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=10.5.133.219:26380
spring.redis.timeout=0

spring.redis.sentinel.master=mymaster是主redis的名字,spring.redis.sentinel.nodes=10.5.133.219:26380是sentinel的ip和端口,这里可以配置多个,但是我只用到一个,所以就配置了一个
spring.reids.timout 这个我一开始是放到前面的,可以代码运行不起来,报错,最后放到了最后一行,就可以了,没有详细研究这个是为什么

用jedis,还要配置他的连接池,这个是在代码中配置的

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;import java.util.ArrayList;
import java.util.List;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Configuration
@EnableCaching
public class RedisCacheConfiguration extends CachingConfigurerSupport {Logger logger = LoggerFactory.getLogger(RedisCacheConfiguration.class);@Value("${spring.redis.host}")private String host;@Value("${spring.redis.port}")private int port;@Value("${spring.redis.timeout}")private int timeout;@Value("${spring.redis.pool.max-idle}")private int maxIdle;@Value("${spring.redis.pool.max-wait}")private long maxWaitMillis;@Value("${spring.redis.sentinel.nodes}")private String sentinelMaster;/* @Value("${spring.redis.password}")private String password;*/@Beanpublic ShardedJedisPool redisPoolFactory() {// 生成多机连接信息列表int m=sentinelMaster.toString().indexOf(":");List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();shards.add( new JedisShardInfo("10.5.133.213", 6379) );shards.add( new JedisShardInfo(sentinelMaster.toString().substring(0, m),Integer.parseInt(sentinelMaster.toString().substring(m+2))) );// 生成连接池配置信息JedisPoolConfig config = new JedisPoolConfig();config.setMaxIdle(10);config.setMaxTotal(30);config.setMaxWaitMillis(3*1000);// 在应用初始化的时候生成连接池ShardedJedisPool pool = new ShardedJedisPool(config, shards);return pool;}}

这里是分布式的连接池,两个,一个主一个从,当从主切换到从的时候,一开始出现了一个错误,因为从是只读,所以不能写入,然后将主从的redis.conf中的

slave-read-only yes  改为no

这样就可以写入了。

然后使用jedis连接池

@AutowiredShardedJedisPool jedisPool;public void moveAllMap(){ShardedJedis jedis = jedisPool.getResource();TrainTraceData trainTraceData=new TrainTraceData();trainTraceData.setServTag(servTag);byte[] ll = SerializeUtil. serialize(trainTraceData);jedis.set( "good".getBytes(),ll);byte[] value = jedis.get( "good".getBytes());Object object = SerializeUtil. unserialize(value);           if(object!= null){TrainTraceData goods=(TrainTraceData) object;System. out.println(goods.getServTag());}System. out.println(jedis.del( "good".getBytes()));
}import java.io.ObjectOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;public class SerializeUtil {public static byte[] serialize(Object object) {ObjectOutputStream oos = null;ByteArrayOutputStream baos = null;try {// 序列化baos = new ByteArrayOutputStream();oos = new ObjectOutputStream(baos);oos.writeObject(object);byte[] bytes = baos.toByteArray();return bytes;} catch (Exception e) {System.out.println("====错误===="+e);}return null;}public static Object unserialize( byte[] bytes) {ByteArrayInputStream bais = null;try {// 反序列化bais = new ByteArrayInputStream(bytes);ObjectInputStream ois = new ObjectInputStream(bais);return ois.readObject();} catch (Exception e) {}return null;}
}

这篇关于Jedis分布式+序列化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1094856

相关文章

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

Redis分布式锁使用及说明

《Redis分布式锁使用及说明》本文总结了Redis和Zookeeper在高可用性和高一致性场景下的应用,并详细介绍了Redis的分布式锁实现方式,包括使用Lua脚本和续期机制,最后,提到了RedLo... 目录Redis分布式锁加锁方式怎么会解错锁?举个小案例吧解锁方式续期总结Redis分布式锁如果追求

Java中JSON字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

开源分布式数据库中间件

转自:https://www.csdn.net/article/2015-07-16/2825228 MyCat:开源分布式数据库中间件 为什么需要MyCat? 虽然云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库又无法将其替代。如果传统数据易于扩展,可切分,就可以避免单机(单库)的性能缺陷。 MyCat的目标就是:低成本地将现有的单机数据库和应用平滑迁移到“云”端

laravel框架实现redis分布式集群原理

在app/config/database.php中配置如下: 'redis' => array('cluster' => true,'default' => array('host' => '172.21.107.247','port' => 6379,),'redis1' => array('host' => '172.21.107.248','port' => 6379,),) 其中cl

基于MySQL实现的分布式锁

概述 在单机时代,虽然不需要分布式锁,但也面临过类似的问题,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制,即当某个线程获取到这个资源后,就立即对这个资源进行加锁,当使用完资源之后,再解锁,其它线程就可以接着使用了。例如,在JAVA中,甚至专门提供了一些处理锁机制的一些API(synchronize/Lock等)。 但是到了分布式系统的时代,这种

Kafka 分布式消息系统详细介绍

Kafka 分布式消息系统 一、Kafka 概述1.1 Kafka 定义1.2 Kafka 设计目标1.3 Kafka 特点 二、Kafka 架构设计2.1 基本架构2.2 Topic 和 Partition2.3 消费者和消费者组2.4 Replica 副本 三、Kafka 分布式集群搭建3.1 下载解压3.1.1 上传解压 3.2 修改 Kafka 配置文件3.2.1 修改zookeep

Redis 客户端Jedis使用---连接池

Jedis 是Redis 的Java客户端,通过一段时间的使用,jedis基本实现redis的所有功能,并且jedis在客户端实现redis数据分片功能,Redis本身是没有数据分布功能。 一、下载jedis 代码 jedis 代码地址:https://github.com/xetorthio/jedis 再次感受到开源的强大。呵呵,大家有时间可以看看源码。 二、项目中如何使用Jedi