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个参数时插入的位置。如上的输出

原文地址:https://www.cnblogs.com/love-wzy/p/10338582.html

时间: 2024-10-08 08:11:30

SpringBoot入门 (七) Redis访问操作的相关文章

springboot入门_数据库访问_jdbcTemplate

本文记录下在springboot项目中使用jdbcTemplate访问数据库. 创建springboot项目,添加依赖,pom文件如下: 1 <!--web 依赖--> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-starter-web</artifactId> 5 </dependency>

SpringBoot入门 (五) 数据库访问之spring data jpa

本文记录学习使用spring data jpa访问数据库 一 什么是Spring Data JPA JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象.关联映射工具来管理Java应用中的关系数据.主要是为了简化现有的持久化开发工作和整合ORM技术,对不同的ORM框架提供统一的规范标准. Spring Data JPA 是Spring基于Hibernate框架和JPA(Java Persistence API)规范的基础上封装

springboot 入门七-静态资源处理

Spring Boot 默认配置的/**映射到/static(或/public ,/META-INF/resources),/webjars/**会映射到classpath:/META-INF/resources/webjars/.但也可以通过spring.mvc.static -path- pattern来调优.例如,将所有资源重新定位到/resources/ * *可以实现如下:spring.mvc.static-path-pattern=/resources/** ---resources

springboot入门_数据库访问_jpa

本文记录使用jpa访问数据库. 创建spring boot项目,并在pom文件中添加相应的依赖包. 1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-data-jpa</artifactId> 4 </dependency> 5 <dependency> 6 <groupId&g

SpringBoot入门七,添加默认静态首页

目录resources/static下创建index.html文件即可(路径与文件名称均不可改变) 原文地址:http://blog.51cto.com/1197822/2288018

SpringBoot入门基础

SpringBoot入门 (一) HelloWorld 一 什么是springboot springboot是一个全新的框架,它设计的目的简化spring项目的初始环境的搭建和开发,主要有以下几个特点: 1.简化初始配置 ,可与主流框架集成: 2.内置Servlet容器,无需在打War包: 3.使用了Starter(启动器)管理依赖并版本控制: 4.大量的自动配置,简化开发,方便集成第三方: 5.提供准生产环境运行时的监控,如指标,健康,外部配置等: 6.无需XML配置,减少冗余代码 . 未使用

Redis的C++与JavaScript访问操作

上篇简单介绍了Redis及其安装部署,这篇记录一下如何用C++语言和JavaScript语言访问操作Redis 1. Redis的接口访问方式(通用接口或者语言接口) 很多语言都包含Redis支持,Redis也提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便.下面这个网址是Redis官方提供的客户端,包含了很多语言: https://redis.io/clients ODBC:(付费) Redis

SpringBoot入门二十三,整合Redis

项目基本配置参考文章SpringBoot入门一,使用myEclipse新建一个SpringBoot项目,使用MyEclipse新建一个SpringBoot项目即可,此示例springboot升级为2.2.1版本. 1. pom.xml添加Redis支持 <!-- 5.引入redis依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-b

Python爬虫入门七之正则表达式

在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Python同样不例外,利用了正则表达式,我