spring 使用redis集群配置

上面两篇介绍了redis集群的配置合一些基本的概念,所以接下来当然是要在项目中使用咯,redis的java支持已经做的非常好了,所以我们来试着使用这些api来进行redis的操作,首先我们需要操作redis的架包:

    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.7.3</version>
    </dependency>

我们需要做的仅仅是在spring配置文件中注入这些基本类,然后自己实现dao,下面是配置文件:

复制代码
<context:property-placeholder ignore-unresolvable="true" location="classpath:yonyou.properties" />
    
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="1000"/> 
        <property name="maxIdle" value="10"/> 
        <property name="minIdle" value="1"/>
        <property name="maxWaitMillis" value="30000"/> 
        <property name="testOnBorrow" value="true"/> 
        <property name="testOnReturn" value="true"/> 
        <property name="testWhileIdle" value="true"/>
        <!-- <property name="testWhileIdle" value="true"/> -->
    </bean>
    
       <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool" destroy-method="destroy">
        <constructor-arg ref="jedisPoolConfig"/> 
        <constructor-arg>
      <!--如果以后需要扩展集群,只需要复制一份redis,修改端口,然后在这里配置即可--> <list> <bean class="redis.clients.jedis.JedisShardInfo"> <constructor-arg index="0" value="127.0.0.1"/> <constructor-arg index="1" value="6379"/> <constructor-arg index="2" value="instance:01"/> </bean> <bean class="redis.clients.jedis.JedisShardInfo"> <constructor-arg index="0" value="127.0.0.1"/> <constructor-arg index="1" value="6380"/> <constructor-arg index="2" value="instance:02"/> </bean> <bean class="redis.clients.jedis.JedisShardInfo"> <constructor-arg index="0" value="127.0.0.1"/> <constructor-arg index="1" value="6381"/> <constructor-arg index="2" value="instance:03"/> </bean> </list> </constructor-arg> </bean> <!--java帮我们同步sentinel的信息,将主从信息同步到客户端来--> <bean class="redis.clients.jedis.JedisSentinelPool"> <constructor-arg index="0" value="mymaster"/> <constructor-arg index="1"> <set> <value>127.0.0.1:26379</value> </set> </constructor-arg> <constructor-arg index="2" ref="jedisPoolConfig"/> </bean>
复制代码

上面配置好了以后,我们就相当于将redis集群给映射过来了,下来我们只需要做一些操作,涉及到数据的CRUD.

复制代码
package com.yonyou.hotusm.module.nosql.redis;

import redis.clients.jedis.ShardedJedis;
//这个接口是操作sharedJedis
public interface RedisDataSource {
    
    public abstract ShardedJedis getRedisClient();
    public void returnResource(ShardedJedis shardedJedis);
    public void returnResource(ShardedJedis shardedJedis,boolean broken);
}
复制代码

实现:

复制代码
package com.yonyou.hotusm.module.nosql.redis;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

@Repository("redisDataSource")
public class RedisDataSourceImpl implements RedisDataSource {

    private static final Logger log = LoggerFactory.getLogger(RedisDataSourceImpl.class);

    @Autowired
    private ShardedJedisPool    shardedJedisPool;

    public ShardedJedis getRedisClient() {
        try {
            ShardedJedis shardJedis = shardedJedisPool.getResource();
            return shardJedis;
        } catch (Exception e) {
            log.error("getRedisClent error", e);
        }
        return null;
    }

    public void returnResource(ShardedJedis shardedJedis) {
        shardedJedisPool.close();
        //shardedJedisPool.returnResource(shardedJedis);
    }

    public void returnResource(ShardedJedis shardedJedis, boolean broken) {
        if (broken) {
            shardedJedisPool.close();
            //shardedJedisPool.returnBrokenResource(shardedJedis);
        } else {
            shardedJedisPool.close();
            //shardedJedisPool.returnResource(shardedJedis);
        }
    }
}
复制代码

 下面就是操作jedis的具体类了:

复制代码
@Repository("jedisTemplate")
public class JedisTemplate {

    private static final Logger log = LoggerFactory.getLogger(JedisTemplate.class);

    @Autowired
    private RedisDataSource     redisDataSource;

    public void disconnect() {
        ShardedJedis shardedJedis = redisDataSource.getRedisClient();
        shardedJedis.disconnect();
    }

    /**
     * 设置单个值
     * 
     * @param key
     * @param value
     * @return
     */
    public String set(String key, String value) {
        String result = null;

        ShardedJedis shardedJedis = redisDataSource.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean broken = false;
        try {
            result = shardedJedis.set(key, value);
        } catch (Exception e) {
            e.printStackTrace();
            log.error(e.getMessage(), e);
            broken = true;
        } finally {
            redisDataSource.returnResource(shardedJedis, broken);
        }
        return result;
    }

    /**
     * 获取单个值
     * 
     * @param key
     * @return
     */
    public String get(String key) {
        String result = null;
        ShardedJedis shardedJedis = redisDataSource.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }

        boolean broken = false;
        try {
            result = shardedJedis.get(key);

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            broken = true;
        } finally {
            redisDataSource.returnResource(shardedJedis, broken);
        }
        return result;
    }
复制代码

真正的还有很多操作,list,set,哈希什么的,我就不把代码贴出来了,看看api就知道了

对于Spring项目中使用Redis集群配置,你可以按照以下步骤进行操作: 1. 首先,确保你已经在项目中添加了Spring Data Redis的依赖。你可以在项目的`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 2. 在项目的配置文件(如`application.properties`或`application.yml`)中,配置Redis的连接信息。对于Redis集群,你需要提供多个节点的连接信息。示例配置如下: ```yaml spring: redis: cluster: nodes: <redis-node-1>:<port>, <redis-node-2>:<port>, <redis-node-3>:<port> ``` 其中,`<redis-node-1>:<port>`表示Redis集群中的一个节点的主机名(或IP地址)和端口号。你可以根据实际情况添加更多节点的连接信息。 3. 可选地,你可以配置一些其他的Redis相关属性,例如连接超时时间、密码等。以下是一些常用的配置示例: ```yaml spring: redis: cluster: nodes: <redis-node-1>:<port>, <redis-node-2>:<port>, <redis-node-3>:<port> timeout: 2000 # 连接超时时间(单位:毫秒) password: <redis-password> # Redis密码(如果有的话) ``` 4. 在你的代码中,你可以使用`RedisTemplate`或`StringRedisTemplate`来操作Redis集群。例如,你可以使用`StringRedisTemplate`来存储和获取键值对: ```java @Autowired private StringRedisTemplate redisTemplate; public void setValue(String key, String value) { redisTemplate.opsForValue().set(key, value); } public String getValue(String key) { return redisTemplate.opsForValue().get(key); } ``` 这样,你就可以在Spring项目中成功配置使用Redis集群了。希望对你有所帮助!如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值