1、redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
2、这里我们重点介绍一下redis在springboot框架中的一些应用,主要是应用在spring-data-redis下面的RedisTemplate来实现数据的保存和删除。
3、我建立了一个工程来实现redis的各种访问。
1)项目目录结构
2)pom.xml.配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.troy</groupId>
<artifactId>springbootredis</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.7.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>1.5.7.RELEASE</version>
</dependency>
</dependencies> </project>
3)application.yml配置
spring:
redis:
host: 192.168.5.10
port: 6379
server:
port: 8082
这里说明一下:我这边redis是我自己本地搭建的。没有设置密码。
redis的搭建可以参考:http://www.cnblogs.com/ll409546297/p/6993778.html
过程中如果过存在问题可以参考:http://www.cnblogs.com/ll409546297/p/7698330.html
4)IRedisService接口包含相关的处理
public interface IRedisService { /**
* 保存String
* @param key
* @param value
* @return
*/
public Boolean setString(String key,String value); /**
* 获取String
* @param key
* @return
*/
public String getString(String key); /**
* 保存list
* @param key
* @param list
* @return
*/
public Boolean setList(String key, List<String> list); /**
* 获取list
* @param key
* @return
*/
public List<String> getList(String key); /**
* 保存mao
* @param key
* @param map
* @return
*/
public Boolean setHashMap(String key, Map<String,String> map); /**
* 获取map
* @param key
* @return
*/
public Map<String,String> getHashMap(String key); /**
* 删除reids缓存
* @param key
* @return
*/
public Boolean removeKey(String key); }
5)RedisServiceImpl实现过程
@Service
@Transactional
public class RedisServiceImpl implements IRedisService{ @Autowired
private RedisTemplate<String,String> redisTemplate; /**
* 保存String
* @param key
* @param value
* @return
*/
@Override
public Boolean setString(String key, String value) {
ValueOperations<String,String> valueOperations = redisTemplate.opsForValue();
valueOperations.set(key,value);
return true;
} /**
* 获取String
* @param key
* @return
*/
@Override
public String getString(String key) {
ValueOperations<String,String> valueOperations = redisTemplate.opsForValue();
return valueOperations.get(key);
} /**
* 保存list
* @param key
* @param list
* @return
*/
@Override
public Boolean setList(String key, List<String> list) {
ListOperations<String,String> listListOperations = redisTemplate.opsForList();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
//右边入栈,保持最后一个数据在右边
listListOperations.rightPush(key,list.get(i));
}
}
return true;
} /**
* 获取list
* @param key
* @return
*/
@Override
public List<String> getList(String key) {
ListOperations<String,String > listOperations = redisTemplate.opsForList();
return listOperations.range(key,0,-1);//-1代表最后一个数字,-2代表倒数第二个
} /**
* 保存mao
* @param key
* @param map
* @return
*/
@Override
public Boolean setHashMap(String key, Map<String, String> map) {
HashOperations<String,String,String> hashOperations = redisTemplate.opsForHash();
hashOperations.putAll(key,map);
return true;
} /**
* 获取map
* @param key
* @return
*/
@Override
public Map<String, String> getHashMap(String key) {
HashOperations<String,String,String> hashOperations = redisTemplate.opsForHash();
return hashOperations.entries(key);
} /**
* 删除reids缓存
* @param key
* @return
*/
@Override
public Boolean removeKey(String key) {
redisTemplate.delete(key);
return true;
}
}
值得注意的是:RedisTemplate是直接注入使用的,并没有做任何配置,这里要归功于spring-data-redis的集成使用。
相比于springmvc的形式,这里简化了很多步骤。
springmvc的相关搭建可以参考:http://www.cnblogs.com/ll409546297/p/7203427.html
6)最后写个一个测试controller,这个只是为了方便测试,实际开发中基本没有这么处理的。。
@RestController
@RequestMapping("/api")
public class RedisResource { @Autowired
private IRedisService redisService; /**
* 添加String
* @param map
* @return
*/
@RequestMapping(value = "/addString",method = RequestMethod.POST)
public Object addString(@RequestBody Map<String,Object> map) {
return redisService.setString(map.get("key").toString(),map.get("value").toString());
} /**
* 获取string
* @param map
* @return
*/
@RequestMapping(value = "/getString",method = RequestMethod.POST)
public Object getString(@RequestBody Map<String,Object> map) {
return redisService.getString(map.get("key").toString());
} /**
* 添加list
* @param map
* @return
*/
@RequestMapping(value = "/addList",method = RequestMethod.POST)
public Object addList(@RequestBody Map<String,Object> map) {
return redisService.setList(map.get("key").toString(), (ArrayList<String>)map.get("value"));
} /**
* 获取list
* @param map
* @return
*/
@RequestMapping(value = "/getList",method = RequestMethod.POST)
public Object getList(@RequestBody Map<String,Object> map) {
return redisService.getList(map.get("key").toString());
} /**
* 添加map
* @param map
* @return
*/
@RequestMapping(value = "/addHashMap",method = RequestMethod.POST)
public Object addHashMap(@RequestBody Map<String,Object> map) {
return redisService.setHashMap(map.get("key").toString(),(HashMap)map.get("value"));
} /**
* 获取map
* @param map
* @return
*/
@RequestMapping(value = "/getHashMap",method = RequestMethod.POST)
public Object getHashMap(@RequestBody Map<String,Object> map) {
return redisService.getHashMap(map.get("key").toString());
} /**
* 删除redis缓存
* @param map
* @return
*/
@RequestMapping(value = "/remove",method = RequestMethod.POST)
public Object remove(@RequestBody Map<String,Object> map) {
return redisService.removeKey(map.get("key").toString());
}
7)基本的使用过程就是这些,redis的服务,在使用的使用效果很不错,在做某些数据初始化的时候,效果很好。
8)看一下最后的效果
4、这是只介绍了部分比较常使用的几种方式,如果自己想处理备份或者持久化,可以自己研究一下。