SpringBoot整合redis

bootstrap.yml配置中在spring:下一层添加

配置redis服务器的IP端口以及连接池的参数设置

redis:
    host: 10.15.255.15
    port: 6379
    database: 5
    lettuce:
      pool:
        max-active: 1024
        max-wait: -1
        max-idle: 50
        min-idle: 0

pom.xml配置中加入maven依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
	<exclusions>
		<!--表示不适用lettuce而用下面的Jeids代替-->
		<exclusion>
			<groupId>io.lettuce</groupId>
			<artifactId>lettuce-core</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<!--Jedis客户端-->
<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
</dependency>

RedisTemplate

  • 是什么?  Spring封装了RedisTemplate对象来进行对Redis的各种操作,它支持所有的Redis原生的api。RedisTemplate位于spring-data-redis包下。RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅。
  • 怎么用?编写RedisConfig配置类,配置
@Configuration
@EnableCaching
public class RedisConfig {

    @Bean(name = "redisTemplate")
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        final RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>();
        template.setConnectionFactory(connectionFactory);
        //设置key和value的序列化规则
        template.setValueSerializer(new GenericToStringSerializer<String>(String.class));
        template.setKeySerializer(new StringRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }
}
  • 封装redis的基本操作类
@Service
public class RedisBase {

    /**
     * redisTemplate
     */
    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * 删除缓存
     * 根据key精确匹配删除
     * 
     * @param key key
     */
    public void deleteKey(String... key) {
        if (key != null && key.length > 0) {
            if (key.length == 1) {
                redisTemplate.delete(key[0]);
            } else {
                redisTemplate.delete(CollectionUtils.arrayToList(key));
            }
        }
    }

    /**
     * 取得缓存(字符串类型)
     * 
     * @param key key
     * @return String
     */
    public String getString(String key) {
        final String value = (String) redisTemplate.boundValueOps(key).get();
        return value;
    }

    /**
     * 将value字符串对象写入缓存
     * 
     * @param key key
     * @param value value
     */
    public void setString(String key, String value) {
        redisTemplate.opsForValue().set(key, value);
    }

    /**
     * 将value对象写入缓存
     * 
     * @param key key
     * @param value value
     */
    public void set(String key, Object value) {
        if (value.getClass().equals(String.class)) {
            redisTemplate.opsForValue().set(key, value.toString());
        }

    }

    /**
     * 指定缓存的失效时间
     * 
     * @param key key
     * @param timeout timeout
     *            失效时间(秒)
     */
    public void expire(String key, long timeout) {
        if (timeout > 0) {
            redisTemplate.expire(key, timeout, TimeUnit.SECONDS);
        }
    }

    /**
     * 获取过期时间
     * @param key
     * @return
     */
    public Long getExpire(String key) {
        return redisTemplate.boundValueOps(key).getExpire();
    }

    /**
     * 模糊查询keys
     * 
     * @param pattern pattern
     * @return set
     */
    public Set<String> keys(String pattern) {
        return redisTemplate.keys(pattern);
    }

    /**
     * 计数器
     * 
     * @param key key
     */
    public void increment(String key) {
        redisTemplate.opsForValue().increment(key, 1);
    }

    /**
     * 可设置步长计数器
     * @param key
     * @param step
     */
    public Long increment(String key, Long step) {
        return redisTemplate.opsForValue().increment(key, step);
    }

    /**
     * 首次设置返回true
     * @param key
     * @param value
     * @return
     */
    public Boolean setIfAbsent(String key, Object value) {
        return redisTemplate.opsForValue().setIfAbsent(key, value);
    }

    /**
     * 批量设置hash键值对
     * @param key
     * @param dataMap
     */
    public void putAll(String key, Map<Object, Object> dataMap) {
        redisTemplate.boundHashOps(key).putAll(dataMap);
    }

    /**
     * 设置hash键值对
     * @param key
     * @param hkey
     * @param hval
     */
    public void put(String key, Object hkey, Object hval) {
        redisTemplate.boundHashOps(key).put(hkey, hval);
    }

    /**
     * 获取单个hash键值对的值
     * @param key
     * @param hkey
     * @return
     */
    public Object get(String key, Object hkey) {
        return redisTemplate.boundHashOps(key).get(hkey);
    }

    /**
     * 批量获取hash键值对得值
     * @param key
     * @param keys
     * @return
     */
    public List<Object> multiGet(String key, List<String> keys) {
        return redisTemplate.boundHashOps(key).multiGet(Collections.singleton(keys));
    }

    /**
     * 获取hash单个键值对
     * @param key
     * @return
     */
    public Map<Object, Object> entries(String key) {
        return redisTemplate.boundHashOps(key).entries();
    }

}

然后编写启动服务,编写测试类。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值