Spring Boot 整合 Redis

Redis

基于内存进行存储,支持key-value的存储形式,底层是C
基于key-value形式的数据字典,没有数据表的概念,直接用键值对的形式完成数据管理
支持五种数据类型:
	·字符串
	·列表
	·集合
	·有序集合
	·哈希

安装Redis

1.下载Redis:https://redis.io/download
2.解压并在本地硬盘人任意位置创建文件夹redis,再创建三个子文件夹:
	·bin 放置启动Redis的可执行文件
	·db  放置数据文件
	·etc 放置配置文件,设置Redis端口、日志文件位置、数据文件位置

启动Redis服务
1.进入Redis目录,启动redis-server
sudo ./bin/redis-server./etc/redis.config
2.启动redis-cli
./bin/redis-cli
3.对数据进行操作
set key value
get key
4.关闭Redis服务
shutdown
5.退出客户端
control+c

Spring Boot 整合 Redis

Spring Data Redis 操作 Redis.
1.创建maven工程,再pome.xml中配置

org.springframework.boot
spring-boot-starter-parent
2.1.5.RELEASE

	  <dependencies>
	  	<dependency>
	  		<groupId>org.springframework.boot</groupId>
	  		<artifactId>Spring-boot-starter-web</artifactId>
	  	</dependency>
	  	
	  	<dependency>
	  		<groupId>org.springframework.boot</groupId>
	  		<artifactId>spring-boot-starter-data-redis</artifactId>
	  	</dependency>
	  	
	  	<dependency>
	  		<groupId>org.apache.commons</groupId>
	  		<artifactId>commons-pool2</artifactId>
	  	</dependency>
	  	  	
	  	<dependency>
	  		<groupId>org.projectlombok</groupId>
	  		<artifactId>lombok</artifactId>
	  	</dependency>
	  </dependencies>

2.创建实体类,实现序列化接口,否则无法存入Redis数据库。
	package com.tianchen.entity;
	
	import java.util.Date;
	import java.io.Serializable;
	
	import lombok.Data;
	
	@Data
	public class Student implements Serializable{
		private Integer id;
		private String name;
		private Double score;
		private Date birthday;
	}

3.创建控制器
	package com.tianchen.controller;

	import org.springframework.beans.factory.annotation.Autowired;
	import org.springframework.data.redis.core.RedisTemplate;
	
	import com.tianchen.entity.Student;
	
	//import org.springframework.web.bind.annotation.PostMapping;
	//import org.springframework.web.bind.annotation.RequestBody;
	//import org.springframework.web.bind.annotation.RestController;
	
	@RestController
	public class StudentHandler {
		
		@Autowired
		private RedisTemplate redisTemplate;
		
		@PostMapping("/set")
		public void set(@RequestBody Student student) {
			redisTemplate.opsForValue().set("student",student);
		}
		
		@GetMapping("/get/{key}")
		public Student get(@PathVariable("key") String key) {
			return (Student)redisTemplate.opsForValue().get(key);
		}
		
		@DeleteMapping("/delete/{key}")
		public boolean delete(@PathVariable("key") String key) {
			redisTemplate.delete(key);
			return redisTemplate.hasKey(key);
		}
	}
	
4.创建配置文件application.yml
	spring:
		redis:
			database: 0
			host: localhost
			port: 6379

5.创建启动类
	package com.tianchen;
	
	import org.springframework.boot.SpringApplication;
	import org.springframework.boot.autoconfigure.SpringBootApplication;
	
	@SpringBootApplication
	public class Application {
		public static void main(String[] args) {
			SpringApplication.run(Application.class,args);
		}
	}

Redis 5 种数据类型
·字符串
@GetMapping("/string")
public String StringTest() {
redisTemplate.opsForValue().set(“str”,“Hello World”);
String str = (String)redisTemplate.opsForValue().get(“str”);
return str;
}

·列表
	@GetMapping("/list")
	public List<String> ListTest() {
		ListOperations<String,String> listOperations = redisTemplate.opsForList();
		listOperations.leftPush("list", "Hello");
		listOperations.leftPush("list", "World");
		listOperations.leftPush("list", "Java");
		List<String> list = listOperations.range("list", 0, 2);
		return list;
	}
	
·集合
	//如下只会存入Hello World Java 各一个
	@GetMapping("/set")
	public Set<String> setTest(){
		SetOperations<String,String> setOperations = redisTemplate.opsForSet();
		setOperations.add("set", "Hello");
		setOperations.add("set", "Hello");
		setOperations.add("set", "World");
		setOperations.add("set", "World");
		setOperations.add("set", "Java");
		setOperations.add("set", "Java");
		Set<String> set = setOperations.members("set");
		return set;
	}
	
·有序集合
		@GetMapping("/zset")
	public Set<String> zsetTest(){
		ZSetOperations zSetOperations = redisTemplate.opsForZSet();
		zSetOperations.add("zset", "Hello",1);
		zSetOperations.add("zset", "World",2);
		zSetOperations.add("zset", "Java",3);
		Set<String> zset = zSetOperations.range("zset", 0, 2);
		return zset;
	}
	
·哈希
HashMap key value
HashOperations key hashkey value
key 是每一组数据的 ID,hashkey 和 value 是一组完整的 HashMap 数据,通过key来区分不同的HashMap
	HashMap hashMap1 = new HashMap();
	hashMap1.put(key1,value1);
	HashMap hashMap2 = new HashMap();
	hashMap2.put(key2,value2);
	HashMap hashMap3 = new HashMap();
	hashMap3.put(key3,value3);
	HashOperations<String,String,String> hashOperations = ridisTemplate.opsForHash();
	hashOperations.put(hashMap1,key1,value1);
	hashOperations.put(hashMap2,key2,value2);
	hashOperations.put(hashMap2,key2,value2);

	@GetMapping("/hash")
	public void hashTest() {
		HashOperations<String,String,String> hashOperations = redisTemplate.opsForHash();
		hashOperations.put("key", "hashkey", "Hello");
		System.out.println(hashOperations.get("key","hashkey"));
	}

热门文章

暂无图片
编程学习 ·

python学习记录

变量和简单数据类型 message="Hello Python world!" print(message)message就是一个变量,绿色部分用双引号括起来的(也可以用单引号)就是一个字符串。变量的命名和使用: 1.变量名只能包含字母、数字和下划线。字母下划线可以打头数字不可以。 2.变量名不能包含空…
暂无图片
编程学习 ·

Python之list添加新元素

讲解 现在,班里有3名同学: >>> L = [Adam, Lisa, Bart]今天,班里转来一名新同学 Paul,如何把新同学添加到现有的 list 中呢? 第一个办法是用 list 的 append() 方法,把新同学追加到 list 的末尾: >>> L = [Adam, Lisa, Bart] >>> L.append(P…
暂无图片
编程学习 ·

vue中的keep-alive使用总结

在平常开发中,有些组件只需要加载一次,后面的数据将不存在变化,亦或者是组件需要缓存状态,滚动条位置等,这个时候,keep-alive的用处就立刻凸显出来了。1.App.vue中使用keep-alive,include表示需要缓存的页面,exclude表示不需要缓存的页面,你可以只设置其中一个即可,但…
暂无图片
编程学习 ·

网络硬盘录像机NVR的接入、解码、转发能力解析

网络硬盘录像机NVR的接入、解码、转发能力解析 你是否有过这样的疑问, 这台录像机,可以接什么摄像机呢? 能不能全部都接300万甚至400万的高清摄像机? 能不能接500万的摄像机? 录像机经常显示资源不足? 录像机画面卡顿? 作为从业的你是否知道NVR有三种能力呢? 接入能力,…
暂无图片
编程学习 ·

例题 6-18 雕塑(Sculpture,ACM/ICPC NWERC 2008,UVa12171)

原题链接:https://vjudge.net/problem/UVA-12171 分类:图 备注:离散化;floodfill 紫书思路:利用离散化把三维图缩小,用floodfill求出外围空气体积和内表面积,总体积减去空气体积即所求体积,内表面积即所求表面积。 离散化知识参考:https://blog.csdn.net/tlonline/art…
暂无图片
编程学习 ·

Java并发编程之深入理解volatile

个人博客请访问 http://www.x0100.top 1. 保证可见性volatile保证了不同线程对volatile修饰变量进行操作时的可见性。对一个volatile变量的读,(任意线程)总是能看到对这个volatile变量最后的写入。一个线程修改volatile变量的值时,该变量的新值会立即刷新到主内存中,…
暂无图片
编程学习 ·

51小项目——使用proteus搭建简易的光照度计-(1)

总述 本项目基于51单片机,实现了对光敏电阻两端电压信号的简单获取,并通过数码管显示,蜂鸣器可以根据电压信号的大小发出不同间隔的声音。 注意: 由于疫情原因限制,无法返校制作实物,故本项目仅在proteus中完成了仿真,未能完成实物制作,仿真结果可能与实物结果不符 介绍…
暂无图片
编程学习 ·

直播带货系统开发机遇与挑战并存

如今,直播带货正逐渐取代以往传统的营销方式,各大电商也因此纷纷踏入直播带货系统开发热门,开发出多个功能为一体的直播带货系统。2020年,面临着直播带货的空前盛况,不仅是直播带货系统开发的机遇,同时也是一个挑战。所谓的直播带货,顾名思义,就是商家以及直播通过直播…
暂无图片
编程学习 ·

启动Altium Designer20时界面卡几分钟的处理办法

开始启动Altium Designer20时界面卡在Explorer Starting EDMS Interface时处理办法首先解释下,AD20卡在这里是因为在连接AD的服务器,而使用破解版的话就有可能会卡在这个界面(也有人用破解版不会卡在这里)因为这是软件在启动时连接服务器导致的,所以咱们只需要把他连接网络…
暂无图片
编程学习 ·

openfeign 转发header 实现全链路灰度发布

openfeign 转发header 实现全链路灰度发布引言实现在服务中修改Predicate加一个Interceptor配置ribbon规则,使用我们自己的规则 引言网关层看这里 之前写了网关层实现灰度发布,但是这个只能被路由一次 像是这样: 客户端->网关->根据版本号路由到应用 之后应用再调用其…
暂无图片
编程学习 ·

Codeforces 1342 E Placing Rooks —— 第二类斯特林数

This way 题意: 现在有一个n*n的棋盘,n个棋子,你要放置这些棋子使得他们满足以下条件: 每个格子都能被某个棋子打到 共有k对棋子能够打到对方 如果一个格子所处的这一行或这一列有一个棋子,那么这个格子就能被打到。两个棋子处在同一行或同一列并且它们之间没有别的棋子,…
暂无图片
编程学习 ·

2.4-7、背包问题

7、背包问题 【问题描述】 简单的背包问题。设有一个背包,可以放入的重量为s。现有n件物品,重量分别为w1,w2…,wn,(1≤i≤n)均为正整数,从n件物品中挑选若干件,使得放入背包的重量之和正好为s。找到一组解即可。 【输入格式】 第一行是物品总件数和背包的载重量,第二行…
暂无图片
编程学习 ·

react学习记录-PropTypes 和组件参数验证

文章目录PropTypes 和组件参数验证PropTypes PropTypes 和组件参数验证 JavaScript 语言的弱类型,让我们写代码很爽,但是也很容易出 bug。 变量没有固定类型可以随意赋值,在我们构建大型应用程序的时候并不是什么好的事情。你写下了 let a = {} ,如果这是个共享的状态并且在…
暂无图片
编程学习 ·

微信公众号自定义菜单栏绑定关联小程序

日期:2020/7/2 10:02 原文链接: http://note.youdao.com/noteshare?id=a5b5529c7bb1f385fa5453d2a338dbd1&sub=B015901C99BF4BEF93CA3F3E1F8AA7B4 注意事项: 微信公众号必须已经有了绑定关联的小程序,如微信公众号还没有关联小程序,请去微信公众平台进行绑定 情况一:…
暂无图片
编程学习 ·

【亥著课堂】为什么上架App Store这么困难?

AppStore模式的意义在于为第三方软件的提供者提供了方便而又高效的一个软件销售平台,成为第三方软件的提供者参与其中的积极性空前高涨,适应了手机用户们对个性化软件的需求,从而使得手机软件业开始进入了一个高速、良性发展的轨道,是苹果公司把AppStore这样的一个商业行为…