Spring-Data-Redis集群配置和RedisTemplate用法

来源:互联网 发布:新网域名过户到阿里云 编辑:程序博客网 时间:2024/05/27 21:49

使用SpringData更加方便我们对关系型数据库和非关系型数据库更好的操作,封装了通用的代码,使得操作更加快捷简单。
一、使用Spring-data-redis Jar包准备
spring-data-redis 需要在1.7 版本以上,他会依赖一些包,比如说 spring-data-commons ,在spring-data-x 系列里,都要依赖这个包。如果你之前项目里使用到了spring-data-x 系列的包,可能需要升级,因为都共同依赖了spring-data-commons ,但是在当前集群要使用的spring-data-redis 中 spring-data-commons 必须要1.12.x 版本以上,这个问题要注意一下。

手动添加jar包 : 相关包下载地址

二、开始配置

1.在spring-application.xml中加入如下代码

<import resource="spring-redis.xml"/>

2.创建redis配置文件spring-redis.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:p="http://www.springframework.org/schema/p"      xmlns:context="http://www.springframework.org/schema/context"      xmlns:jee="http://www.springframework.org/schema/jee"     xmlns:tx="http://www.springframework.org/schema/tx"      xmlns:aop="http://www.springframework.org/schema/aop"      xsi:schemaLocation="              http://www.springframework.org/schema/beans             http://www.springframework.org/schema/beans/spring-beans-4.2.xsd              http://www.springframework.org/schema/context             http://www.springframework.org/schema/context/spring-context-4.2.xsd">    <!-- 加载配置属性文件 按需加载 --><!-- <context:property-placeholder    ignore-unresolvable="true" location="classpath:redis.cluster.properties" /> --><!-- 配置Cluster --> <bean id="redisClusterConfiguration"    class="org.springframework.data.redis.connection.RedisClusterConfiguration">    <property name="maxRedirects" value="3"></property>    <!-- 节点配置 -->    <property name="clusterNodes">        <set>            <bean class="org.springframework.data.redis.connection.RedisClusterNode">                <constructor-arg name="host" value="120.99.158.113 "></constructor-arg>                <constructor-arg name="port" value="7000"></constructor-arg>            </bean>            <bean class="org.springframework.data.redis.connection.RedisClusterNode">                <constructor-arg name="host" value="120.99.158.113 "></constructor-arg>                <constructor-arg name="port" value="7001"></constructor-arg>            </bean>            <bean class="org.springframework.data.redis.connection.RedisClusterNode">                <constructor-arg name="host" value="120.99.158.113 "></constructor-arg>                <constructor-arg name="port" value="7002"></constructor-arg>            </bean>            <bean class="org.springframework.data.redis.connection.RedisClusterNode">                <constructor-arg name="host" value="112.42.136.189"></constructor-arg>                <constructor-arg name="port" value="7003"></constructor-arg>            </bean>            <bean class="org.springframework.data.redis.connection.RedisClusterNode">                <constructor-arg name="host" value="112.42.136.189"></constructor-arg>                <constructor-arg name="port" value="7004"></constructor-arg>            </bean>            <bean class="org.springframework.data.redis.connection.RedisClusterNode">                <constructor-arg name="host" value="112.42.136.189"></constructor-arg>                <constructor-arg name="port" value="7005"></constructor-arg>            </bean>        </set>    </property></bean><bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">    <property name="maxIdle" value="100" />    <property name="maxTotal" value="600" /></bean> <bean id="stringRedisSerializer"        class="org.springframework.data.redis.serializer.StringRedisSerializer" /><bean id="jedisConnectionFactory"    class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">    <constructor-arg ref="redisClusterConfiguration" />    <constructor-arg ref="jedisPoolConfig" /></bean><!-- redis 访问的模版 --><bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">    <property name="connectionFactory" ref="jedisConnectionFactory" />    <!-- 添加如下序列化配置解决key乱码问题以及令keys()方法生效 -->    <property name="keySerializer" ref="stringRedisSerializer"/>    <property name="hashKeySerializer" ref="stringRedisSerializer"/></bean> </beans>

集群已经集成完成

三、redis操作工具类

import java.util.ArrayList;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.data.redis.core.BoundSetOperations;import org.springframework.data.redis.core.HashOperations;import org.springframework.data.redis.core.ListOperations;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.ValueOperations;import org.springframework.stereotype.Service;@Servicepublic class RedisUtil<T> {    @Autowired @Qualifier("redisTemplate")    public RedisTemplate redisTemplate;    /**     * 缓存基本的对象,Integer、String、实体类等     * @param key 缓存的键值     * @param value 缓存的值     * @return  缓存的对象     */    public <T> ValueOperations<String,T> setCacheObject(String key,T value)    {        System.out.println(key+"*****"+value.toString());        ValueOperations<String,T> operation = redisTemplate.opsForValue();         operation.set(key,value);        return operation;    }    /**     * 获得缓存的基本对象。     * @param key  缓存键值     * @param operation     * @return   缓存键值对应的数据     */    public <T> T getCacheObject(String key/*,ValueOperations<String,T> operation*/)    {        ValueOperations<String,T> operation = redisTemplate.opsForValue();         return operation.get(key);    }    /**     * 缓存List数据     * @param key  缓存的键值     * @param dataList 待缓存的List数据     * @return   缓存的对象     */    public <T> ListOperations<String, T> setCacheList(String key,List<T> dataList)    {        ListOperations listOperation = redisTemplate.opsForList();        if(null != dataList)        {            int size = dataList.size();            for(int i = 0; i < size ; i ++)            {                listOperation.rightPush(key,dataList.get(i));            }        }        return listOperation;    }    /**     * 获得缓存的list对象     * @param key 缓存的键值     * @return  缓存键值对应的数据     */    public <T> List<T> getCacheList(String key)    {        List<T> dataList = new ArrayList<T>();        ListOperations<String,T> listOperation = redisTemplate.opsForList();        Long size = listOperation.size(key);        for(int i = 0 ; i < size ; i ++)        {            dataList.add((T) listOperation.leftPop(key));        }        return dataList;    }    /**     * 获得缓存的list对象范围     * @param key 缓存的键值 arg1到arg2     * @return  缓存键值对应的数据     */    public <T> List<T> getCacheListIndex(String key, long arg1, long arg2)    {        List<T> dataList = new ArrayList<T>();        ListOperations<String,T> listOperation = redisTemplate.opsForList();        dataList = listOperation.range(key, arg1, arg2);        return dataList;    }    /**     * 缓存Set     * @param key  缓存键值     * @param dataSet 缓存的数据     * @return   缓存数据的对象     */    public <T> BoundSetOperations<String,T> setCacheSet(String key,Set<T> dataSet)    {        BoundSetOperations<String,T> setOperation = redisTemplate.boundSetOps(key);         /*T[] t = (T[]) dataSet.toArray();        setOperation.add(t);*/        Iterator<T> it = dataSet.iterator();        while(it.hasNext())        {            setOperation.add(it.next());        }        return setOperation;    }    /**     * 获得缓存的set     * @param key     * @param operation     * @return     */    public Set<T> getCacheSet(String key/*,BoundSetOperations<String,T> operation*/)    {        Set<T> dataSet = new HashSet<T>();        BoundSetOperations<String,T> operation = redisTemplate.boundSetOps(key);        Long size = operation.size();        for(int i = 0 ; i < size ; i++)        {            dataSet.add(operation.pop());        }        return dataSet;    }    /**     * 缓存Map     * @param key     * @param dataMap     * @return     */    public <T> HashOperations<String,String,T> setCacheMap(String key,Map<String,T> dataMap)    {        HashOperations hashOperations = redisTemplate.opsForHash();        if(null != dataMap)        {            for (Map.Entry<String, T> entry : dataMap.entrySet()) {                 /*System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); */                hashOperations.put(key,entry.getKey(),entry.getValue());            }         }        return hashOperations;    }    /**     * 获得缓存的Map     * @param key     * @param hashOperation     * @return     */    public <T> Map<String,T> getCacheMap(String key/*,HashOperations<String,String,T> hashOperation*/)    {        Map<String, T> map = redisTemplate.opsForHash().entries(key);        /*Map<String, T> map = hashOperation.entries(key);*/        return map;    }    /**     * 缓存Map     * @param key     * @param dataMap     * @return     */    public <T> HashOperations<String,Integer,T> setCacheIntegerMap(String key,Map<Integer,T> dataMap)    {        HashOperations hashOperations = redisTemplate.opsForHash();        if(null != dataMap)        {            for (Map.Entry<Integer, T> entry : dataMap.entrySet()) {                 /*System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); */                hashOperations.put(key,entry.getKey(),entry.getValue());            }         }        return hashOperations;    }    /**     * 获得缓存的Map     * @param key     * @param hashOperation     * @return     */    public <T> Map<Integer,T> getCacheIntegerMap(String key/*,HashOperations<String,String,T> hashOperation*/)    {        Map<Integer, T> map = redisTemplate.opsForHash().entries(key);        /*Map<String, T> map = hashOperation.entries(key);*/        return map;    }

到这里基本已经配置成功了.最后可以写一个方法测试一下

@Autowired @Qualifier("redisTemplate")    public RedisTemplate redisTemplate;@RequestMapping(value="/test",produces = "text/html;charset=UTF-8")    public void test(){        try {            redisCache.setCacheObject("key123", "456");            String value= redisCache.getCacheObject("key123");            System.out.println(value);        }    }
阅读全文
3 0
原创粉丝点击