Spring + Jedis集成Redis

来源:互联网 发布:shell中执行linux命令 编辑:程序博客网 时间:2024/05/01 05:51

1、pom.xml引入资源;

1
2
3
4
5
6
7
8
9
10
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.7.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.8.0</version>
</dependency>

2、配置redis的配置文件,这里只配置单点数据库,后面会介绍redis集群的配置,这里就不多说了;

 spring-redis.xml配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!-- 读取配置文件信息 -->
<context:property-placeholder ignore-unresolvable="true" location="classpath:*.properties"/>
 
<!-- Redis 配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxTotal" value="${redis.maxActive}" />
    <property name="maxIdle" value="${redis.maxIdle}" />
    <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
    <property name="testOnBorrow" value="true" />
</bean>
 
<!-- redis单节点数据库连接配置 -->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <property name="hostName" value="${redis.host}" />
    <property name="port" value="${redis.port}" />
    <property name="password" value="${redis.password}" />
    <property name="poolConfig" ref="jedisPoolConfig" />
</bean>
 
<!-- redisTemplate配置,redisTemplate是对Jedis的对redis操作的扩展,有更多的操作,封装使操作更便捷 -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
    <property name="connectionFactory" ref="jedisConnectionFactory" />
</bean>

 redis.properties文件配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#redis的服务器地址
redis.host=这里写你的ip
#redis的服务端口
redis.port=6379
#密码
redis.password=这里写你的密码
#链接数据库
redis.default.db=0
#客户端超时时间单位是毫秒
redis.timeout=100000
#最大连接数
redis.maxActive=300
#最大空闲数
redis.maxIdle=100
#最大建立连接等待时间
redis.maxWaitMillis=1000

3、接着,具体实现代码;

 序列化和反序列化工具类:

复制代码
public class SerializerUtil {    /**     * 序列化     * @param object     * @return     */    public static byte[] serializeObj(Object object) {        ObjectOutputStream oos = null;        ByteArrayOutputStream baos = null;        try {            baos = new ByteArrayOutputStream();            oos = new ObjectOutputStream(baos);            oos.writeObject(object);            byte[] bytes = baos.toByteArray();            return bytes;        } catch (Exception e) {            throw new RuntimeException("序列化失败!", e);        }    }    /**     * 反序列化     * @param bytes     * @return     */    public static Object deserializeObj(byte[] bytes) {        if (bytes == null){            return null;        }        ByteArrayInputStream bais = null;        try {            bais = new ByteArrayInputStream(bytes);            ObjectInputStream ois = new ObjectInputStream(bais);            return ois.readObject();        } catch (Exception e) {            throw new RuntimeException("反序列化失败!", e);        }    }}
复制代码

操作实现类,这里只提供了3个实现方法,其他的可以按照自己需求自己实现:

复制代码
@Componentpublic class RedisCache {    @Resource    private RedisTemplate<String, String> redisTemplate;    /**     * 添加缓存数据     * @param key     * @param obj     * @param <T>     * @return     * @throws Exception     */    public <T> boolean putCache(String key, T obj) throws Exception {        final byte[] bkey = key.getBytes();        final byte[] bvalue = SerializerUtil.serializeObj(obj);        boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {            @Override            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {                return connection.setNX(bkey, bvalue);            }        });        return result;    }    /**     * 添加缓存数据,设定缓存失效时间     * @param key     * @param obj     * @param expireTime     * @param <T>     * @throws Exception     */    public <T> void putCacheWithExpireTime(String key, T obj, final long expireTime) throws Exception {        final byte[] bkey = key.getBytes();        final byte[] bvalue = SerializerUtil.serializeObj(obj);        redisTemplate.execute(new RedisCallback<Boolean>() {            @Override            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {                connection.setEx(bkey, expireTime, bvalue);                return true;            }        });    }    /**     * 根据key取缓存数据     * @param key     * @param <T>     * @return     * @throws Exception     */    public <T> T getCache(final String key) throws Exception {        byte[] result = redisTemplate.execute(new RedisCallback<byte[]>() {            @Override            public byte[] doInRedis(RedisConnection connection) throws DataAccessException {                return connection.get(key.getBytes());            }        });        if (result == null) {            return null;        }        return (T) SerializerUtil.deserializeObj(result);    }}
复制代码

4、测试代码;

复制代码
    @Test    public void test7() throws Exception{        List<String> list = new ArrayList<String>();        list.add("测试list");        list.add("测试list2");                Map<String,Object> map = new HashMap<String, Object>();        map.put("test*","测试数据");        map.put("测试数据","啥的");        map.put("listTest",list);        redisCache.putCache("testMap",map);        Map<String,Object> mapResult = redisCache.getCache("testMap");        System.out.print(mapResult.toString());    }
复制代码

结果:

0 0
原创粉丝点击