ssm框架下redis的集成

ssm框架的配置和redis的介绍安装及命令见链接:

Linux下Redis的安装与卸载

Windows下Redis的安装与卸载

Redis命令参考

IDEA下spring+spring mvc+mybatis+mysql+maven框架搭建

添加Maven依赖:

在pom.xml文件中添加redis依赖,如下:

<!--import redis dependency-->
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.0.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.1.0</version>
</dependency>

 

建立redis.properties资源文件:

将redis服务的常用配置从项目中分离出来,方便项目的移植和管理。

redis.key.prefix=redis_key
redis.host=localhost
redis.port=6379
redis.maxIdle=300
redis.maxActive=600
redis.maxWait=1000
redis.testOnBorrow=true

 

建立抽闲类AbstractBaseRedisDao类

建立AbstractBaseRedisDao.java类:

package com.demon.util.redis.service;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;

import javax.annotation.Resource;

/**
 * @author [email protected]
 * @date 2018/3/22 14:02
 */
public abstract class AbstractBaseRedisDao<K, V> {
    @Resource
    private RedisTemplate<K, V> redisTemplate;

    /**
     * 设置redisTemplate
     *
     * @param redisTemplate the redisTemplate to set
     */
    public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    /**
     * 获取 RedisSerializer
     * <br>------------------------------<br>
     */
    RedisSerializer<String> getRedisSerializer() {
        return redisTemplate.getStringSerializer();
    }
}

 

建立RedisService接口,封装相应的Redis操作:

新建RedisService.java:

package com.demon.util.redis.service;

import java.util.List;

/**
 * @author [email protected]
 * @date 2018/3/22 14:05
 */
public interface RedisService {
    /**
     * @param key   key
     * @param value value
     * @description set a key to redis
     */
    boolean add(String key, String value);

    /**
     * @param keys   keys
     * @param values values
     * @description 批量增加
     */
    boolean addByList(List<String> keys, List<String> values);

    /**
     * @param key key
     * @description delete a key from redis
     */
    void delete(String key);

    /**
     * @param key key
     * @value value new value
     * @description update
     */
    boolean update(String key, String newValue);

    /**
     * @param key key
     * @description get a value by key
     */
    String get(String key);
}

 

添加RedisServiceImpl实现类:

package com.demon.util.redis.service;

import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import redis.clients.jedis.ShardedJedis;

import javax.annotation.Resource;
import java.io.Serializable;
import java.util.List;

/**
 * @author [email protected]
 * @date 2018/3/22 14:17
 */
public class RedisServiceImpl extends AbstractBaseRedisDao implements RedisService {
    @Resource
    private RedisTemplate<Serializable, Serializable> redisTemplate;

    public boolean add(final String key, final String value) {
        return redisTemplate.execute((RedisCallback<Boolean>) redisConnection -> {
            RedisSerializer<String> redisSerializer = getRedisSerializer();
            byte[] keyByte = redisSerializer.serialize(key);
            byte[] valuesByte = redisSerializer.serialize(value);
            return redisConnection.setNX(keyByte, valuesByte);
        });
    }

    public boolean addByList(final List<String> keys, final List<String> values) {
        return redisTemplate.execute(redisConnection -> {
            final RedisSerializer<String> redisSerializer = getRedisSerializer();
            //TODO resolve the for not loop problem
            for (int i = 0; i < values.size(); i++) {
                byte[] keyByte = redisSerializer.serialize(keys.get(i));
                byte[] valueByte = redisSerializer.serialize(values.get(i));
                return redisConnection.setNX(keyByte, valueByte);
            }
            return true;
        }, false, false);
    }

    public void delete(String key) {
        redisTemplate.execute((RedisCallback<Long>) redisConnection -> {
            RedisSerializer<String> redisSerializer = getRedisSerializer();
            byte[] keyByte = redisSerializer.serialize(key);
            return redisConnection.del(keyByte);
        });
    }

    public boolean update(final String key, final String newValue) {
        if (get(key) == null) {
            throw new NullPointerException("数据不存在,key = " + key);
        }
        return redisTemplate.execute((RedisCallback<Boolean>) redisConnection -> {
            RedisSerializer<String> redisSerializer = getRedisSerializer();
            byte[] keyByte = redisSerializer.serialize(key);
            byte[] newValueByte = redisSerializer.serialize(newValue);
            redisConnection.set(keyByte, newValueByte);
            return true;
        });
    }

    public String get(final String key) {
        return redisTemplate.execute((RedisCallback<String>) redisConnection -> {
            RedisSerializer<String> redisSerializer = getRedisSerializer();
            byte[] keyByte = redisSerializer.serialize(key);
            byte[] value = redisConnection.get(keyByte);
            return redisSerializer.deserialize(value);
        });
    }
}

可以根据Redis命令实现相应的方法,这里实现了全部的Redis操作:

java之redis篇(spring-data-redis整合)

扫描二维码关注公众号,回复: 1037173 查看本文章

添加测试:

测试省略。

以上です、

簡単ですが、ここで終わります!

猜你喜欢

转载自blog.csdn.net/youyou_0826/article/details/79658257
今日推荐