先简单介绍下redis:
redis以字典结构存储数据,允许其他应用通过TCP协议读写字典中的内容。作为一个高性能的key-value数据库具有多样的数据模型、持久化与主从同步的特征。
redis有个很重要的特点是它可以实现持久化数据,能通过使用rdb快照或者aof的日志方式两种方式实现数据持久化。前者是将内存中的数据不断写入磁盘,性能较高,但可能引起一定程度的数据丢失;后者则是记录每次更新的日志,性能较低,但无数据丢失情况发生。
目前,redis支持包含字符串类型、散列类型、列表类型、集合类型、有序集合类型在内的键值数据类型。如今,越来越多的人将redis用作缓存、队列系统等。
以下是springboot集成redis的java代码实现,希望对你有所帮助:
//application.properties |
//添加redis依赖 |
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> |
#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-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接超时时间(毫秒)
spring.redis.timeout=5000
|
//一个类加上@Service注解后,将自动注册到Spring容器; //@Component、@Repository、@Controller注解也有类似功能 |
@Service
public class RedisService {
private final RedisDao redisDao;
@Autowired
public RedisService(RedisDao redisDao) {
this.redisDao = redisDao;
}
public Boolean add(String id,String name) {
return redisDao.cacheValue(id, name,-1);
}
public Boolean del(String id) {
return redisDao.removeValue(id);
}
public String find(String id) {
return redisDao.getValue(id);
}
} |
//dao层,记得加上@Repository注解,将RedisDao注入给Service |
@Repository
public class RedisDao {
/**
* 日志记录
*/
private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
private final RedisTemplate<String, String> redisTemplate;
@Autowired
public RedisDao(RedisTemplate<String,String> redisTemplate) {
this.redisTemplate = redisTemplate;
}
/**
* 缓存数据
* @param id 不为空
* @param name
* @param time 设置过期时间
* @return
*/
public boolean cacheValue(String id, String name, long time) {
try {
ValueOperations<String, String> ops = redisTemplate.opsForValue();
ops.set(id, name);
if (time > 0) {
redisTemplate.expire(id, time, TimeUnit.SECONDS);
}
return true;
} catch (Throwable t) {
LOGGER.error("缓存[" + id + "]失败, value[" + name + "]", t);
}
return false;
}
/**
* 判断缓存数据是否存在
* @param id
* @return
*/
public boolean containsKey(String id) {
try {
return redisTemplate.hasKey(id);
} catch (Throwable t) {
LOGGER.error("不存在该key[" + id + ", Codeor[" + t + "]");
}
return false;
}
/**
* 查询缓存数据
*
* @param id
* @return string
*/
public String getValue(String id) {
try {
ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
return valueOps.get(id);
} catch (Throwable t) {
LOGGER.error("查询失败[" + id + ", Codeor[" + t + "]");
}
return null;
}
/**
* 删除缓存数据
*
* @param id
* @return boolean
*/
public boolean removeValue(String id) {
try {
redisTemplate.delete(id);
return true;
} catch (Throwable t) {
LOGGER.error("删除失败id[" + id + ", Codeor[" + t + "]");
}
return false;
}
} |
//@RestController为@ResponseBody和@Controller的组合注解 |
@RestController
public class RedisController {
@Autowired
private RedisService redisService;
@RequestMapping(value = "/hey", method = RequestMethod.GET)
public String hello() {
return "morning";
}
@RequestMapping(value = "/add/{id}/{name}", method = RequestMethod.GET)
public Boolean add( @PathVariable("id") String id,@PathVariable("name") String name) {
return redisService.add(id,name);
}
@RequestMapping(value = "/del/{id}", method = RequestMethod.GET)
public Boolean del(@PathVariable("id") String id) {
return redisService.del(id);
}
@RequestMapping(value = "/get/{id}", method = RequestMethod.GET)
public String find(@PathVariable("id") String id) {
return redisService.find(id);
}
} |