添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
2、在yaml里配置redis
spring:
redis:
host: 8.136.84.238
port: 6379
password: 18081736467xr
lettuce:
pool:
max-active: 8 #连接池最大连接数
jedis:
pool:
max-wait: -1 #最大阻塞等待时间(使用负值表示没有限制)
max-idle: 8 #最大空闲连接
min-idle: 0 #最小空闲连接
connect-timeout: 30000
RedisTemplate对五种类型的操作方式如下:
redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set
或者:
redistempalate.boundValueOps
redistempalate.boundSetOps
redistempalate.boundListOps
redistempalate.boundHashOps
redistempalate.boundZSetOps
opsForXXX和boundXXXOps的区别?
前者获取一个operator,但是没有指定操作的对象(key),可以在一个连接(事务)内操作多个key以及对应的value;
后者获取了一个指定操作对象(key)的operator,在一个连接(事务)内只能操作这个key对应的value。
使用的不同
Value(值)类型
package com.example.blog.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.Feature;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.thymeleaf.util.StringUtils;
import java.io.Serializable;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@Component
public class RedisUtils
{
@Autowired
private RedisTemplate<String,String> redisTemplate;
/**
* 写入缓存,并加上缓存生效时间
* @param key
* @param value
* @param expireTime
* @param timeUnit
* @return
*/
public boolean set(final String key, String value, Long expireTime, TimeUnit timeUnit)
{
boolean result = false;
try {
redisTemplate.boundValueOps(key).set(value,expireTime,timeUnit);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 查看过期时间,单位:小时
* @param key
* @return
*/
public double getExpire(String key)
{
return redisTemplate.getExpire(key)/3600.0;
}
/**
* 设置过期时间,传的单位为秒
* @param key
* @param timeout
* @param timeUnit
* @return
*/
public Boolean expire(String key, long timeout, TimeUnit timeUnit)
{
return redisTemplate.expire(key, timeout, timeUnit);
}
/**
* 批量删除
* @param keys
* @return
*/
public boolean remove(final String... keys)
{
boolean result = false;
boolean flag = false;
if(keys.length > 0)
{
for (String key : keys)
{
if(!StringUtils.isEmpty(key))
{
Boolean delete = redisTemplate.delete(key);
if(!delete)
{
flag = true;
}
result = delete;
}else
{
flag = true;
}
}
}
if(flag)
{
return false;
}else {
return result;
}
}
/**
* 将redis存储的key转换为一个对象(前提是用JSON.toJSONString(Object)转换的)
* redisTemplate.opsForValue().set("TOKEN_"+token, JSON.toJSONString(sysUser),1, TimeUnit.DAYS);
* @param key
* @param o
* @return
*/
public Object toObject(String key,Class o)
{
String value = redisTemplate.boundValueOps(key).get();
Object object = JSON.parseObject(value, o);
return object;
}
public boolean remove(final String key)
{
boolean result = false;
if(exists(key))
{
redisTemplate.delete(key);
result = true;
}
return result;
}
public boolean exists(final String key)
{
return redisTemplate.hasKey(key);
}
public String get(final String key)
{
if(!StringUtils.isEmpty(key))
{
return redisTemplate.boundValueOps("key").get();
}else
{
return null;
}
}
}
List类型:
Map类型:
Hash类型:
Set类型:
用到再写~
下面是一些redis常用的命令:
设置k-v
set key "value"
通过key获取value
获取所有keys
通过key判断是否有该value
查看过期时间(单位:秒)