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


相关推荐

  • Django(74)drf-spectacular自动生成接口文档「建议收藏」

    Django(74)drf-spectacular自动生成接口文档「建议收藏」介绍drf-spectacular是为DjangoRESTFramework生成合理灵活的OpenAPI3.0模式。它可以自动帮我们提取接口中的信息,从而形成接口文档,而且内容十分详细,再也不

    2022年8月7日
    5
  • 压缩感知中的数学知识:投影矩阵(projection matrix)

    压缩感知中的数学知识:投影矩阵(projection matrix)题目:压缩感知中的数学知识:投影矩阵(projectionmatrix)========================背景========================

    2022年10月5日
    3
  • java异常处理(较详细)「建议收藏」

    java异常处理(较详细)「建议收藏」java异常处理(较详细)在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的。比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅等等。异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)Java程序在执行过程中所发生的异常…

    2022年5月20日
    58
  • 项目活动图 – 举例说明

    项目活动图 – 举例说明关键路径:从开始到结束的所有路径中,时间最长的一条为关键路径。(特点:在关键路径上,所有任务的松弛时间都为0);松弛时间:第一种方法:最晚开始时间-最早开始时间;第二种方法:关键路径的总时间-包含该任务的任务路径花的时间;(前提条件:必须不影响该任务以后的任务路径)举例:关键路径:A-B-D-G-I-K-L=22由前向后推可得出…

    2022年5月13日
    47
  • commandname「建议收藏」

    commandname「建议收藏」你怎么还是采用asp的方式来实现呢?  既然用了datagrid再后面加一个然后为你的DataGrid添加  ItemCommand事件(this.MyList.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.MyList_ItemCommand))  在这个事

    2025年8月19日
    2
  • HTTP、HTTPS常用的默认端口号

    HTTP、HTTPS常用的默认端口号端口号标识了一个主机上进行通信的不同的应用程序。1.HTTP协议代理服务器常用端口号:80/8080/3128/8081/90982.SOCKS代理协议服务器常用端口号:10803.FTP(文件传输)协议代理服务器常用端口号:214.Telnet(远程登录)协议代理服务器常用端口号:23HTTP服务器,默认端口号为80/tcp(木马Executor开放此端口)HTTPS(securelytran…

    2022年6月14日
    74

发表回复

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

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