Redis 简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis 安装
mac 下安装也可以使用 homebrew。
- 执行 brew install redis
- 启动 redis,可以使用后台服务启动 brew services start redis。或者直接启动:redis-server
整合Redis
一、导入Maven依赖
在Maven pom.xml文件中加入Redis包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId></dependency>
二、SpringBoot配置文件中配置Redis连接
# Redis 配置
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0
三、封装Redis操作
public class RedisManager {
private static final String TAG = RedisManager.class.getSimpleName();
@Autowired
private RedisTemplate redisTemplate;
/**
* 写入缓存
*
* @param key
* @param value
* @param <T>
* @return
*/
public <T extends Serializable> boolean setValue(String key, T value) {
return setValue(key, value, 0L);
}
/**
* 读取缓存
*
* @param key
* @param cls
* @param <T>
* @return
*/
public <T extends Serializable> T getValue(String key, Class<T> cls) {
ValueOperations<String, T> operations = redisTemplate.opsForValue();
T result = operations.get(key);
return result;
}
/**
* 写入缓存设置时效时间
*
* @param key
* @param value
* @return
*/
public <T extends Serializable> boolean setValue(String key, T value, Long expireTime) {
boolean result = false;
try {
ValueOperations<String, T> operations = redisTemplate.opsForValue();
operations.set(key, value);
if (expireTime > 0) {
redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
}
result = true;
} catch (Exception e) {
LogManager.getLogger(TAG).debug(e);
}
return result;
}
/**
* 批量删除对应的value
*
* @param keys
*/
public void remove(final String... keys) {
for (String key : keys) {
remove(key);
}
}
/**
* 批量删除key
*
* @param pattern
*/
public void removePattern(final String pattern) {
Set<Serializable> keys = redisTemplate.keys(pattern);
if (keys.size() > 0) {
redisTemplate.delete(keys);
}
}
/**
* 删除对应的value
*
* @param key
*/
public void remove(final String key) {
if (exists(key)) {
redisTemplate.delete(key);
}
}
/**
* 判断缓存中是否有对应的value
*
* @param key
* @return
*/
public boolean exists(final String key) {
return redisTemplate.hasKey(key);
}
}