spring配置文件详解_jedis连接redis集群

spring配置文件详解_jedis连接redis集群[b]JedisCache[/b][code="java"]importjava.io.IOException;importjava.util.Set;importorg.springframework.beans.factory.InitializingBean;importorg.springframework.util.Assert;importre…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
[b]JedisCache[/b]


import java.io.IOException;
import java.util.Set;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import com.my.utils.serialization.KryoSerializationUtils;

public class JedisCache implements InitializingBean {

private JedisPool jedisPool;

public void setJedisPool(JedisPool jedisPool) {
this.jedisPool = jedisPool;
}

public void putObject(String key, Object object) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
jedis.set(key.getBytes(), KryoSerializationUtils.serialize(object));
}
catch (Exception ex) {
handleException(ex, jedisPool, jedis);
}
finally {
if (jedis != null && jedis.isConnected()) {
jedisPool.returnResource(jedis);
}
}
}

public void putObject(String key, Object object, int expirationInSeconds) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
jedis.setex(key.getBytes(), expirationInSeconds, KryoSerializationUtils.serialize(object));
}
catch (Exception ex) {
handleException(ex, jedisPool, jedis);
}
finally {
if (jedis != null && jedis.isConnected()) {
jedisPool.returnResource(jedis);
}
}
}

public Object getObject(String key) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return (Object) KryoSerializationUtils.deserialize(jedis.get(key.getBytes()));
}
catch (Exception ex) {
handleException(ex, jedisPool, jedis);
}
finally {
if (jedis != null && jedis.isConnected()) {
jedisPool.returnResource(jedis);
}
}
return null;
}

public void removeObject(String key) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
jedis.del(key.getBytes());
}
catch (Exception ex) {
handleException(ex, jedisPool, jedis);
}
finally {
if (jedis != null && jedis.isConnected()) {
jedisPool.returnResource(jedis);
}
}
}

public boolean exists(String key) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.exists(key.getBytes());
}
catch (Exception ex) {
handleException(ex, jedisPool, jedis);
}
finally {
if (jedis != null && jedis.isConnected()) {
jedisPool.returnResource(jedis);
}
}
return false;
}

public long expire(String key, int expirationInSeconds) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.expire(key.getBytes(), expirationInSeconds);
}
catch (Exception ex) {
handleException(ex, jedisPool, jedis);
}
finally {
if (jedis != null && jedis.isConnected()) {
jedisPool.returnResource(jedis);
}
}
return 0L;
}

public Set<String> keys(final String pattern) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.keys(pattern);
}
catch (Exception ex) {
handleException(ex, jedisPool, jedis);
}
finally {
if (jedis != null && jedis.isConnected()) {
jedisPool.returnResource(jedis);
}
}
return null;
}

/**
* 运行时异常,IO异常,销毁jedis对象
*
* @param ex
* @param jedisPool
* @param jedis
*/
private void handleException(Exception ex, JedisPool jedisPool, Jedis jedis) {
if (jedis == null)
throw new NullPointerException("jedis is null, please check the redis server.");
if (ex instanceof IOException) {
jedisPool.returnBrokenResource(jedis); //销毁该对象
}
}

@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(jedisPool);
}
}

[b]application-bean.xml[/b]


<util:properties id="redisProps" location="#{T(java.lang.System).getProperty('config.local') != null ? 'classpath:redis.properties' : 'file:nfs/toc/redis.properties'}"/>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="#{redisProps['${profiles.active}.redis.maxTotal']}"/> <!-- 控制一个pool可分配多少个jedis实例 -->
<property name="maxIdle" value="#{redisProps['${profiles.active}.redis.maxIdle']}" /> <!-- 控制一个pool最多有多少个状态为idle(空闲)的jedis实例 -->
<property name="maxWaitMillis" value="#{redisProps['${profiles.active}.redis.maxWaitMillis']}" /> <!-- 表示当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException -->
<property name="testOnBorrow" value="#{redisProps['${profiles.active}.redis.testOnBorrow']}" /> <!-- 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的 -->
</bean>
<bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="destroy">
<constructor-arg name="poolConfig" ref="jedisPoolConfig" />
<constructor-arg name="host" value="#{redisProps['${profiles.active}.redis.server.host']}" />
<constructor-arg name="port" value="#{redisProps['${profiles.active}.redis.server.port']}" />
</bean>
<bean id="jedisCache" class="com.my.cache.redis.JedisCache">
<property name="jedisPool" ref="jedisPool"/>
</bean>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197239.html原文链接:https://javaforall.net

(0)
上一篇 2025年9月7日 下午8:15
下一篇 2025年9月7日 下午8:43


相关推荐

  • busybox rootfs 与 ubuntu rootfs_boot.img root

    busybox rootfs 与 ubuntu rootfs_boot.img root下载busybox的源码,解压后,设定ARCH和CROSS_COMPILE的两个基本环境变量,选择defconfig作为默认配置,大部分的busybox工具都会被编译出来。如果不指定输出目录,默认输出到根目录的_install目录下面,如果需要指定目录,配置CONFIG_PREFIX=/a/b/c/rootfs,这样make生成的/bin,/sbin,/usr三个默认文件夹就直接在rootfs目录下。makeARCH=armCROSS_COMPILE=arm…

    2022年10月6日
    4
  • CentOS下安装Git

    CentOS下安装GitCentOS 下安装 Gitbr Git nbsp 是一个版本控制软件 可按如下步骤进行源码安装 br 1 安装依赖项 br nbsp yuminstallge develexpat develcurl develzlib developenssl develbr 2 获取 Git 的源码 br cd usr local srcbr wgethttp kernel org pub software scm git git 1 7 1 tar gzbr

    2025年9月12日
    6
  • Java程序设计(基础)- 基本语法

    Java程序设计(基础)- 基本语法

    2021年7月21日
    51
  • 现代控制理论(4)——李雅普诺夫稳定性理论

    现代控制理论(4)——李雅普诺夫稳定性理论文章目录

    2026年3月17日
    2
  • pytest-allure_allure的用法

    pytest-allure_allure的用法前言allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest框架,也可以集成到Jenkins上展示高大上的报告界面。mac环境:

    2022年7月28日
    11
  • axon-saga

    axon-saga管理复杂的业务事务并不是每个命令都能够在单个ACID事务中完全执行。银行转帐是一个很常见的例子,常常作为他们的论据。人们经常认为,将资金从一个账户转移到另一个账户的交易绝对需要原子性和一致性。其实呢,不是的这样的。相反,这是不可能的。如果钱从A银行的账户转移到B银行的另一个账户?A银行是否须要锁定B银行数据库?如果转账正在进行中,银行A已经扣除了这笔款项,但银行B还没有存入该钱,这有点奇怪?事…

    2026年1月25日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号