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、这是只介绍了部分比较常使用的几种方式,如果自己想处理备份或者持久化,可以自己研究一下。