博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第 8 章 Spring Data
阅读量:6617 次
发布时间:2019-06-25

本文共 5047 字,大约阅读时间需要 16 分钟。

8.1. Spring Data Redis

8.1.1. pom.xml

org.springframework.boot
spring-boot-starter-redis

8.1.2. springframework-servlet.xml

例 8.1. Spring Data Redis Example

8.1.3. Controller

package cn.netkiller.controller;import javax.annotation.Resource;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.ListOperations;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.StringRedisSerializer;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import cn.netkiller.model.User;@Controllerpublic class CacheController {	// inject the actual template	@Autowired	private RedisTemplate
template; // inject the template as ListOperations @Resource(name = "redisTemplate") private ListOperations
listOps; @RequestMapping("/cache") public ModelAndView cache() { String message = ""; User user = new User(); user.setId("1"); user.setName("Neo"); user.setAge(30); String key = "user"; listOps.leftPush(key, user.toString()); message = listOps.leftPop(key); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new StringRedisSerializer()); template.opsForValue().set("key", user.toString()); return new ModelAndView("index/index", "variable", message); }}

8.1.4. index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"    pageEncoding="ISO-8859-1"%>
Insert title here

${variable}

8.1.5. 删除 key

private void cleanNewToday() {		long begin = System.currentTimeMillis();        		redisTemplate.delete("news:today");            long end = System.currentTimeMillis();		logger.info("Schedule clean redis {} 耗时 {} 秒", "cleanNewFlash()", (end-begin) / 1000 );	}

8.1.6. 测试

请求URL http://your.domain.com/your.html

[root@master ~]# redis-cli redis 127.0.0.1:6379> keys *1) "\xac\xed\x00\x05t\x00\x04user"2) "key"redis 127.0.0.1:6379> get key"\xac\xed\x00\x05t\x00\x1dUser [id=1, name=Neo, age=30]"
[提示] 提示

Spring Redis 默认使用 Byte数据类型存储Key,在redis-cli中会看到 "\xac\xed\x00\x05t\x00\x04" 前缀不方便get操作,所以我们会设置使用字符串,通过 template.setKeySerializer(new StringRedisSerializer()); 实现

8.1.7. ZSET 数据类型

//添加 一个 set 集合SetOperations
set = redisTemplate.opsForSet();set.add("Member", "neo");set.add("Member", "36");set.add("Member", "178cm");//输出 set 集合System.out.println(set.members("Member"));//添加有序的 set 集合ZSetOperations
zset = redisTemplate.opsForZSet();zset.add("zMember", "neo", 0);zset.add("zMember", "36", 1);zset.add("zMember", "178cm", 2);//输出有序 set 集合System.out.println(zset.rangeByScore("zMember", 0, 2));
package cn.netkiller.api.restful;import java.util.Set;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import common.pojo.ResponseRestful;@RestController@RequestMapping("/news")public class NewsRestController {	@Autowired	private RedisTemplate
redisTemplate; @RequestMapping(value = "/flash/{count}") public ResponseRestful flash(@PathVariable("count") long count) { if(count == 0L) { count=10L; } Set
news = this.redisTemplate.opsForZSet().reverseRange("news:flash", 0, count); if (news == null) { return new ResponseRestful(false, 10, "没有查询到结果", news); } return new ResponseRestful(true, 0, "返回数据: " + news.size() + " 条", news); } public void addRecentUser(long userId, String name) { String key = RedisKeyGenerator.genRecentBrowsingPositionsKey(String.valueOf(userId)); // 获取已缓存的最近浏览的职位 ZSetOperations
zSetOperations = redisTempalte.opsForZSet(); //zset内部是按分数来排序的,这里用当前时间做分数 zSetOperations.add(key, name, System.currentTimeMillis()); zSetOperations.removeRange(key, 0, -6); } }

8.1.8. Hash

HashOperations
hash = redisTemplate.opsForHash();Map
map = new HashMap
();map.put("name", "neo");map.put("age", "36");hash.putAll("member", map);System.out.println(hash.entries("member"));

8.1.9. List

ListOperations
list = redisTemplate.opsForList();list.rightPush("books", "Linux");list.rightPush("books", "Java");System.out.println(list.range("books", 0, 1));

原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

你可能感兴趣的文章
Money 20/20 | 未来金融数字化转型:数字化半径与全栈式战略观
查看>>
蚂蚁金服首席数据科学家漆远:AI技术开放,与业界融合共创
查看>>
J2Cache二级缓存'没有自动更新'
查看>>
玩转iOS开发:装逼技术RunTime的应用(三)
查看>>
从基础概念到实现,小白如何快速入门PyTorch
查看>>
用深度学习自动生成HTML代码
查看>>
渔人和Rxjs的故事,这次一定教会你前端必会的Rxjs
查看>>
Android彻底组件化demo发布
查看>>
Flutter http请求库dio 1.0正式发布
查看>>
[Scikit-learn教程] 02.05 综合实践
查看>>
接手前端新项目?这里有些注意点你可能需要留意一下
查看>>
【火炉炼AI】深度学习005-简单几行Keras代码解决二分类问题
查看>>
nodejs 中的依赖管理
查看>>
[译] 5 个可以立刻在你的 Ionic App 中用上的动画包
查看>>
Spring源码系列:依赖注入(一)getBean
查看>>
WMI 的攻击,防御与取证分析技术之防御篇
查看>>
iOS Flexbox 布局优化
查看>>
团队项目必备神器——自定义Lint
查看>>
极简Typescript+Node.js 安装教程
查看>>
基于Vue构造器创建Form组件的通用解决方案
查看>>