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

相关文章

集中式版本控制与分布式版本控制——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

Python---文件IO流及对象序列化

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 前文模块中提到加密模块,本文将终点介绍加密模块和文件流。 一、文件流和IO流概述         在Python中,IO流是用于输入和输出数据的通道。它可以用于读取输入数据或将数据写入输出目标。IO流可以是标准输入/输出流(stdin和stdout),也可以是文件流,网络流等。

Spring Cloud整合Seata实现分布式事务

文章目录 1.Seata1.1 官网1.2 下载1.3 通过安装包运行seata1.3.1 解压seata-server-1.3.0.zip1.3.2 修改 conf/file.conf 配置文件1.3.3 修改conf/registry.conf配置文件1.3.4 添加seata配置信息到nacos1.3.5 配置seata服务端数据库表结构1.3.6 启动seata 2.Spring

ELK+Spring Cloud搭建分布式日志中心

ELK+Spring Cloud搭建分布式日志中心 1.ELK简介2.资源包下载3.Elasticsearch安装3.1 解压Elasticsearch3.2 修改Elasticsearch的配置文件3.3 修改系统配置3.4 启动Elasticsearch 4.ElasticSearch-head插件安装5.Logstash安装6.Kibana安装7.SpringCloud集成logsta

Redis进阶(七):分布式锁

在分布式系统下,涉及到多个节点访问同一个公共资源的情况,此时需要通过 锁 进行互斥控制:避免出现 线程安全问题。 1.分布式锁的基本实现 超卖问题: 解决: 采用redis实现分布式锁 可用采取:在购票的时候,操作过程中需要先加锁。在redis上设置一个key - value,完成上述买票操作,再把key - value 删掉。如果发现key - value 存在,就加锁失败,无法进