SpringBoot入门 (七) Redis访问操作
本文记录学习在SpringBoot中使用Redis。
一 什么是Redis
Redis 是一个速度非常快的非关系数据库(Non-Relational Database),它可以存储键(Key)与 多种不同类型的值(Value)之间的映射(Mapping),可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展写性能。Redis主要有以下几个优点:
1 性能极高,它每秒可执行约 100,000 个 Set 以及约 100,000 个 Get 操作;
2 丰富的数据类型,Redis 对大多数开发人员已知的大多数数据类型提供了原生支持,这使得各种问题得以轻松解决;
3 原子性,因为所有 Redis 操作都是原子性的,所以多个客户端会并发地访问一个 Redis 服务器,获取相同的更新值;
4 丰富的特性,Redis 是一个多效用工具,有非常多的应用场景,包括缓存、消息队列(Redis 原生支持发布/订阅)、短期应用程序数据(比如 Web 会话、Web 页面命中计数)等。
目前我们常用的Value的数据类型有String(字符串),Hash(哈希),List(列表),Set(集合),Zset(有序集合)。
二 SpringBoot集成Redis
SpringBoot提供了对Redis的集成的模块,包是spring-boot-starter-data-redis,它依赖于 spring-data-redis 和 lettuce,lettuce是一个线程安全的redis客户端。
在pom.xml中引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
在application.properties中配置Redis的连接信息
# redis 配置
## redis数据库索引(默认0)
spring.redis.database=0
## redis 服务器地址
spring.redis.host=localhost
## redis 服务器端口
spring.redis.port=6379
## redis数据库密码(默认为空)
spring.redis.password=
## redis连接池最大连接数(使用负数表示没有显示,默认8)
spring.redis.lettuce.pool.max-active=8
## 连接池最大阻塞等待时间(使用负值表示没有限制,默认-1)
spring.redis.lettuce.pool.max-wait=-1
## 连接池中的最大空闲连接 默认 8
spring.redis.lettuce.pool.max-idle=8
## 连接池中的最小空闲连接 默认 0
spring.redis.lettuce.pool.min-idle=0
有了上边这两个步骤之后,我们启动服务后,SpringBoot就会帮我们连接到Redis服务器,并给我们提供了一个RedisTemplate类供我们使用操作Redis。我们在需要用的地方注入RedisTemplate就可以轻松完成操作。
三 测试
使用Junit做测试,在我们的单元测试类中注入RedisTemplate
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisApplicationTests { @Autowired
private RedisTemplate redisTemplate; }
String字符串操作,value是一个字符串,通过delete(key)删除
@Test
public void testString() throws InterruptedException {
//字符串
ValueOperations strOps = redisTemplate.opsForValue();
strOps.set("name", "梓&艺");
System.out.println("字符串结果name:"+strOps.get("name"));
//删除key
redisTemplate.delete("name");
}
对象操作,value是一个对象
@Test
public void testObject() throws InterruptedException {
ValueOperations objOps = redisTemplate.opsForValue();
City city = new City(1, "X`A", "西安");
objOps.set("city", city);
System.out.println(objOps.get("city").toString());
redisTemplate.delete("city");
}
设置key的过期时间,在set时加上过期时间,通过hasKey(key)来判断key是否还存在
@Test
public void testExpire(){
//过期
ValueOperations objOps1 = redisTemplate.opsForValue();
City city1 = new City(1, "BJ", "北京");
objOps1.set("expire", city1, 2000, TimeUnit.MILLISECONDS);
System.out.println(objOps1.get("expire").toString());
Thread.sleep(2000);
System.out.println(redisTemplate.hasKey("expire"));
}
hash哈希操作
@Test
public void testHash() {
HashOperations hashOps = redisTemplate.opsForHash();
hashOps.put("hash","hashKey","hashValue");
System.out.println(hashOps.get("hash", "hashKey"));
}
在上边的代码中可以看出,Hash Set的时候就是在哈希表 Key 中的域(Field)的值设为 value。如果 Key 不存在,一个新的哈希表被创建并进行 Hash set 操作;如果域(Field)已经存在于哈希表中,旧值将被覆盖。
List列表操作
@Test
public void testList() {
ListOperations<String, String> listOps = redisTemplate.opsForList();
listOps.leftPush("list","梓");
listOps.leftPush("list","&");
listOps.leftPush("list","艺");
System.out.println(listOps.leftPop("list"));
}
列表操作时我们通过 leftPush 或者 rightPush 来将数据存入列表中,通过 leftPop 或者rightPop将数据取出来,我们可以利用它来实现一个队列。
Set集合操作
@Test
public void testSet() {
SetOperations<String, String> setOps = redisTemplate.opsForSet();
setOps.add("set","梓");
setOps.add("set","&");
setOps.add("set","&");
setOps.add("set","艺");
System.out.println(setOps.members("set"));
}
Set是一个没有顺序的集合,key相同时,如果value已经存在了,后边进入的会把前边的覆盖掉
ZSet有序集合操作
@Test
public void testZSet() {
ZSetOperations zSetOps = redisTemplate.opsForZSet();
zSetOps.add("zSet", "梓", 1);
zSetOps.add("zSet", "&", 2);
zSetOps.add("zSet", "艺", 3);
zSetOps.add("zSet", "zi", 1);
zSetOps.add("zSet", "yi", 3);
System.out.println(zSetOps.rangeByScore("zSet", 1, 3));
}
add 方法的3个参数分别是key,value,数据插入位置。ZSet中存储的数据都是有顺序的,输出时顺序按照存储时设置的从小到大,如果遇到key相同,Value和顺序一样的,后边的会把前边的覆盖掉,range方法后边的2个参数时插入的位置。如上的输出

SpringBoot入门 (七) Redis访问操作的更多相关文章
- SpringBoot入门 (四) 数据库访问之JdbcTemplate
本文记录在SpringBoot中使用JdbcTemplate访问数据库. 一 JDBC回顾 最早是在上学时接触的使用JDBC访问数据库,主要有以下几个步骤: 1 加载驱动 Class.forName( ...
- SpringBoot入门 (六) 数据库访问之Mybatis
本文记录学习在SpringBoot中使用Mybatis. 一 什么是Mybatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 ...
- SpringBoot入门 (五) 数据库访问之spring data jpa
本文记录学习使用spring data jpa访问数据库 一 什么是Spring Data JPA JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java ...
- springboot 入门七-静态资源处理
Spring Boot 默认配置的/**映射到/static(或/public ,/META-INF/resources),/webjars/**会映射到classpath:/META-INF/res ...
- SpringBoot入门基础
目录 SpringBoot入门 (一) HelloWorld. 2 一 什么是springboot 1 二 入门实例... 1 SpringBoot入门 (二) 属性文件读取... 16 一 自定义属 ...
- SpringBoot入门系列(七)Spring Boot整合Redis缓存
前面介绍了Spring Boot 中的整合Mybatis并实现增删改查,.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/ ...
- 【springboot】【redis】springboot结合redis,操作List集合实现时间轴功能
springboot结合redis,操作List集合实现时间轴功能
- springboot中,使用redisTemplate操作redis
知识点: springboot中整合redis springboot中redisTemplate的使用 redis存数据时,key出现乱码问题 一:springboot中整合redis (1)pom. ...
- Redis的C++与JavaScript访问操作
上篇简单介绍了Redis及其安装部署,这篇记录一下如何用C++语言和JavaScript语言访问操作Redis 1. Redis的接口访问方式(通用接口或者语言接口) 很多语言都包含Redis支持,R ...
随机推荐
- PAT甲级 1120. Friend Numbers (20)
1120. Friend Numbers (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Two in ...
- set_error_handler
set_error_handler这个函数的作用是为了防止错误路径泄露 何为错误路径泄露呢? 我们写程序,难免会有问题,而PHP遇到错误时,就会给出出错脚本的位置.行数和原因 有很多人说,这并没有什么 ...
- 在Windows 8.1中安装必应输入法
鉴于目前Windows 8.1中自带的输入法存在一些Bug以及功能上的不完整性(比如,在Office 2013中删除掉错误的字符后快速输入第一个字母将丢失的问题:在QQ聊天窗口中文输入状态下快速输入省 ...
- Eclipse运行wordcount步骤
Eclipse运行wordcount步骤 第一步:建立工程,导入代码. 第二步:建立文件写入数据(以空格分开),并上传到hdfs上. 1.创建文件并写入数据: 2.上传hdfs 在hadoop权限下就 ...
- JVM的參數
博客:https://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html#CMSInitiatingOccupancyFraction_v ...
- 简单创建一个“嗨新房”的mac客户端
下载地址:https://github.com/mapanguan/Mac_HiNewHouse
- poj 2531 搜索剪枝
Network Saboteur Time Limit: 2000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u ...
- [HEOI2016/TJOI2016]字符串(后缀数组+二分+主席树/后缀自动机+倍增+线段树合并)
后缀数组解法: 先二分最长前缀长度 \(len\),然后从 \(rnk[c]\) 向左右二分 \(l\) 和 \(r\) 使 \([l,r]\) 的 \(height\geq len\),然后在主席树 ...
- linux 使用进程管理工具 supervisor
1.supervisor是使用python进行开发的运行在linux服务器上的进程管理工具 老版本的supervisor需要运行在python2环境,如果需要使用supervisor管理python3 ...
- Spring Boot切换为APR模式
Spring Boot内置了tomcat容器,直接运行Application就可以启动web服务器. 在tomcat中提供了三种方式:BIO.NIO.APR. BIO tomcat7以下的版本都是BI ...