Redis + Jedis + Spring

来源:互联网 发布:索尼网络电视机 编辑:程序博客网 时间:2024/06/04 18:05

参考一下这篇文章: http://snowolf.iteye.com/blog/1666908


也可以借鉴一下这个的思路,仅供参考:

package com.ttpod.cache.impl;


import com.ttpod.cache.Cache;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;


import java.util.Map;
import java.util.concurrent.TimeUnit;


/**
 * date: 12-9-27 上午10:01
 *
 * @author: long.chen@ttpod.com
 */
public class RedisImpl implements Cache {
    /**
     * 1 day
     */
    private static final int DEFAULT_TIME_TO_LIVE = 24 * 3600;


    private int timeToLive = DEFAULT_TIME_TO_LIVE;


    private StringRedisTemplate redisTemplate;


    private final RedisSerializer<Object> objSer = new JdkSerializationRedisSerializer();




    public void setTimeToLive(int timeToLive) {
        this.timeToLive = timeToLive;
    }




    public void setRedisTemplate(StringRedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }


    @Override
    public void set(String key, final Object value, final int expire) {
        if(value instanceof Map){
            redisTemplate.opsForHash().putAll(key, (Map) value );
            redisTemplate.expire(key, expire, TimeUnit.SECONDS);
        }else{
            final byte[] rawKey = rawKey(key);
            redisTemplate.execute(new RedisCallback<Object>() {
                @Override
                public Object doInRedis(RedisConnection connection) throws DataAccessException {
                    connection.openPipeline();
                    connection.set(rawKey,objSer.serialize(value));
                    connection.expire(rawKey,expire);


                    return connection.closePipeline();
                }
            });
        }
    }


    @Override
    public void set(String key, Object value) {
        set(key,value,timeToLive);
    }


    @Override
    public Object get(String key) {
        final byte[] rawKey = rawKey(key);


        return redisTemplate.execute(new RedisCallback<Object>() {
            @Override
            public Object doInRedis(RedisConnection connection) throws DataAccessException {
                byte[] value = connection.get(rawKey);


                return value == null ? null : objSer.deserialize(value);
            }
        });
    }


    @Override
    public void delete(String key) {
        redisTemplate.delete(key);
    }


    @Override
    public void flushAll() {
        redisTemplate.execute(new RedisCallback<Object>() {
            @Override
            public Object doInRedis(RedisConnection connection) throws DataAccessException {
                connection.flushAll();


                return null;
            }
        });
    }




    private byte[] rawKey(String key) {
        return redisTemplate.getStringSerializer().serialize(key);
    }
}


原创粉丝点击