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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python基础(3)—八种数据类型

    Python基础(3)—八种数据类型Python的八种数据类型八种数据类型分别是:number(数字)、string(字符串)、Boolean(布尔值)、None(空值)list(列表)、tuple(元组)、dict(字典)、set(集合)。下面,我将这八种类型的相关知识,做一个梳理。 1.number(数字类型)2.string(字符串类型)3.Boolean(布尔值)与空值4.list…

    2022年6月10日
    30
  • python 请在微信客户端打开_如何实现‘请在微信客户端打开链接’

    python 请在微信客户端打开_如何实现‘请在微信客户端打开链接’想要实现请在微信客户端打开链接在代码中加入以下代码即可varua=navigator.userAgent.toLowerCase();varisWeixin=ua.indexOf(‘micromessenger’)!=-1;varisAndroid=ua.indexOf(‘android’)!=-1;varisIos=(ua.indexOf(‘iphone’)!=…

    2022年6月7日
    104
  • windebug调试方法_java怎么远程调试

    windebug调试方法_java怎么远程调试关于WCF的调试,MSDN给出如下说明,可能是由于我的水平问题,个人无法完全看懂,所以自己总结了一点WCF的调试技巧。仅供参考。如何开始调试WCF服务: 通常WCF可以部署成Windowsservice和Webservice。1.对于WebService通常后缀都是*.svc对于这类我通常有2种方式对其调试a.      新建一个控制台程序,通过AddwebR

    2025年6月20日
    5
  • 距离和相似度度量方法

    距离和相似度度量方法http://blog.csdn.net/pipisorry/article/details/45651315在机器学习和数据挖掘中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别。最常见的是数据分析中的相关分析,数据挖掘中的分类和聚类算法,如K最近邻(KNN)和K均值(K-Means)等等。不同距离度量的应用场景根据数据特性的不同,可以采用不同的度量方法。whi…

    2022年6月19日
    35
  • HTML网页调用 网易云 音乐播放器代码

    HTML网页调用 网易云 音乐播放器代码表现形式一:单曲播放调用代码:&amp;lt;iframeframeborder=&quot;no&quot;border=&quot;0&quot;marginwidth=&quot;0&quot;marginheight=&quot;0&quot;width=100%height=86src=&quot;http://music.163.com/outchain/player?type=2&am

    2022年6月20日
    54
  • ios事件-触摸事件3(UIButton 和 pointInSide()、hitTest()、touchesBegan()、touchesMoved()、touchesEnded()的关系)

    ios事件-触摸事件3(UIButton 和 pointInSide()、hitTest()、touchesBegan()、touchesMoved()、touchesEnded()的关系)ios事件-触摸事件3(UIButton和pointInSide()、hitTest()、touchesBegan()、touchesMoved()、touchesEnded()、touchesCancelled()的关系)先看效果图本文中,凡是看到xxx(),即表示xxx是一个函数或者方法!!!事件分为事件传递和事件响应,其中,事件响应又称事件处理。具体代码ButtonVC的代码…

    2022年7月25日
    16

发表回复

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

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