SpringBoot 操作 Redis 数据

简介

Redis 是一个开源的NoSQL数据库,基于内存的键值存储,速度快。Redis 支持数据结构,如字符串,散列,列表,集和带范围查询的有序集。

5种主要数据类型:

字符串类型    string散列类型      hash列表类型      list集合类型      set有序集合类型  zset

Redis优缺点

直接基于内存读写,不用Redis直接用MySQL,先不说查询性能耗时,一个是直达一个是通过媒介,显而易见,Redis 速度很快 。不过Redis ,仅适用于键值对,并不能替代MySQL,虽然其有持久化,但是也可能会崩溃,损失几秒的数据

项目环境

项目工具环境:

IDE工具,这里是 Jetbrains IDEAMavenJDK1.8Redis 服务器

源码环境地址

https://github.com/Gleans/SpringBootLearn/tree/master/springboot-redis
后面的基于这个项目来操作

定义 RedisTemplate

RedisConfig.java

import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.GenericToStringSerializer;import org.springframework.data.redis.serializer.RedisSerializer;import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configurationpublic class RedisConfig {    @Bean    JedisConnectionFactory jedisConnectionFactory() {        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();        jedisConnectionFactory.setPassword("ekko1234");        return jedisConnectionFactory;    }

    @Bean    public RedisTemplate redisTemplate() {        final RedisTemplate redisTemplate = new RedisTemplate<>();        RedisSerializer stringSerializer = new StringRedisSerializer();        RedisSerializer jsonString = new GenericToStringSerializer<>(Object.class);        redisTemplate.setConnectionFactory(jedisConnectionFactory());        redisTemplate.setKeySerializer(stringSerializer);        redisTemplate.setValueSerializer(jsonString);        redisTemplate.setHashKeySerializer(stringSerializer);        redisTemplate.setHashValueSerializer(jsonString);return redisTemplate;    }}

操作 Redis 初体验

Spring Boot 的开箱即用的特点
集成 Redis 也是显而易见
在test环境新建测试类 TestRedis.java

import lombok.extern.slf4j.Slf4j;import org.junit.FixMethodOrder;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.MethodSorters;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

//根据测试方法名字搞定执行顺序@Slf4j@FixMethodOrder(MethodSorters.NAME_ASCENDING)@SpringBootTest@RunWith(SpringJUnit4ClassRunner.class)public class TestRedis {

    private RedisTemplate redisTemplate;@Autowiredpublic void setRedisTemplate(RedisTemplate redisTemplate) {this.redisTemplate = redisTemplate;    }// 做下面的操作}

操作字符串

在测试类中操作字符串:

    @Test    public void operateStr(){        // 存入 key为username  value 为 admin        redisTemplate.opsForValue().set("username","admin");        // 获取 key为username        String username = (String) redisTemplate.opsForValue().get("username");        System.out.println(username);    }

执行过后发现存在redis中的数据:

操作集合

opsForList()

    @Test    public void operateList() {        List userList = new ArrayList<>();        userList.add("张三");        userList.add("李四");//循环向userlist左添加值        userList.forEach(value -> redisTemplate.opsForList().leftPush("userlist", value));//向userlist右添加值        redisTemplate.opsForList().rightPush("userlist", "麻子");        log.info("删除前:userlist->{}", redisTemplate.opsForList().range("userlist", 0, 10));/*          三个参数:          - key redis中存 key值          - count 从左或是从右删除,正左负右          - value 就是需要从list移除的值          */        redisTemplate.opsForList().remove("userlist", 0, "麻子");        log.info("删除后:userlist->{}", redisTemplate.opsForList().range("userlist", 0, 10));    }

输出:

删除前:userlist->[李四, 张三, 麻子]删除后:userlist->[李四, 张三]

操作不可重复集合

opsForSet()

    @Test    public void operateSet(){        List trap = new ArrayList<>();        trap.add("工具人");        trap.add("工具人");        trap.add("工具人");        trap.add("四块五的妞");        trap.add("十元妹子");        System.out.print(trap.toString());//循环向userlist左添加值        trap.forEach(value->redisTemplate.opsForSet().add("userSet",value));        log.info("删除前:userSet->{}",redisTemplate.opsForSet().members("userSet"));// 直接根据set的key值删除        redisTemplate.opsForSet().remove("userSet","工具人");        log.info("删除后:userSet->{}",redisTemplate.opsForSet().members("userSet"));    }

输出:

删除前:userSet->[工具人, 工具人, 工具人, 四块五的妞, 十元妹子]删除后:userSet->[四块五的妞, 十元妹子]

哈希操作

opsForHash()  相当于在操作实体类

    @Test    public void operateHash(){        //添加        redisTemplate.opsForHash().put("user","username","ekko");        redisTemplate.opsForHash().put("user","address","Shanghai");        redisTemplate.opsForHash().put("user","passwd","1234");        //修改        redisTemplate.opsForHash().put("user","address","Beijing");        //删除        redisTemplate.opsForHash().delete("user","passwd");    }

结果:

总结

数据量大且不长变的还是用缓存接收数据来回操作使用 Redis,持久化时再入库做好缓存击穿的准备利用好 Redis 可以很大程度的减少 MySQL 的压力Redis 常用的操作基本满足需求

小知识

方法名字前加ABCD...是为了让方法有执行顺序
根据测试方法名字搞定执行顺序,在方法上加注解@FixMethodOrder(MethodSorters.NAME_ASCENDING)
日志注解@Slf4j是为了让日志书写更方便

 //之前写日志   log.info("输出a"+index+"b"); //现在 log.info("输出a{}b",index);

多个参数可以用多个{},总之,喜欢哪个用哪个,谢谢!

阅读原文可评论或与作者交流

redis工具类_SpringBoot 操作 Redis 数据相关推荐

  1. 【Spring之轨迹】结合 @Scheduled 实现定时将 Redis 缓存刷入数据库(配 Redis 工具类与例子实战)

    -- 目录 -- 0. 假设已配置好 SSM 环境 1. 配置文件 2. 定时服务 3. cron 解释 ① cron 参数(按顺序依次为) ② 特殊符号 4. Redis 工具类 5. 例子实战 0 ...

  2. Redis工具类封装讲解和实战

    Redis工具类封装讲解和实战     简介:高效开发方式 Redis工具类封装讲解和实战         1.常用客户端 https://redisdesktop.com/download      ...

  3. Redis工具类封装

    Redis工具类封装 使用redis也好几年了,总是拷贝来拷贝去的,这次干脆放在这把,每次来这拷贝,不用在工程里面找来找去了. /*** Redis工具类* @author Huangliniao* ...

  4. 微服务使用redis操作实例包含redis工具类

    1.单机redis使用工具类 application.properties配置内容 #redis配置 #单机模式 #redis数据库索引,默认为0 spring.redis.database=0 #r ...

  5. Redis工具类的封装

    Redis工具类的封装 <dependency><groupId>redis.clients</groupId><artifactId>jedis< ...

  6. 基于jedis的Redis工具类

    本文来记录下基于 jedis 的 Redis 工具类 文章目录 核心代码 核心代码 以下为核心代码 /*** 基于jedis的redis操作工具类* @author www* @time 2021/8 ...

  7. 基于Redis GEO(地理位置) 实现附近的人,商家等相关功能实现 使用SpringBoot Redis工具类

    Redis GEO 1.基本介绍 1.Redis GEO 2.基础语法 GEOADD GEOPOS GEODIST GEORADIUS GEOHASH 2.可用于实现的功能 3.SpringBoot实 ...

  8. Redis工具类封装RedisUtils

    本文参考:https://blog.it-follower.com/posts/2563248908.html SpringBoot项目集成Redis相当简单,只需要pom中加入对应依赖 <de ...

  9. SpringBoot Redis工具类封装

    SpringBoot整合Redis的博客很多,但是很多都不是我想要的结果.因为我只需要整合完成后,可以操作Redis就可以了,并不需要配合缓存相关的注解使用(如@Cacheable).看了很多博客后, ...

最新文章

  1. 关于linux基础的博客,第一篇博客,以下。
  2. Java并发编程系列之CountDownLatch用法及详解
  3. mips j指令_MIPS处理器 MIPS指令集(上)
  4. (四)十大经典排序算法(动画图解,代码完全)
  5. 8597 石子划分问题 dpdp,只考虑第一次即可
  6. java 对象查找_通过Java中的参数集查找最合适的对象
  7. iOS开发之UITableView全面解析
  8. MySQL 第四次练习(多表查询)
  9. 在EF4.1的DBContext中实现事务处理(BeginTransaction)和直接执行SQL语句的示例
  10. Vue条件渲染(v-if和v-show的区别)
  11. 74LS138译码器介绍
  12. ubuntu-PyV8安装(网盘资源)
  13. 基于51单片机出租车计费设计(proteus仿真+程序+原理图+设计说明书)
  14. C语言使用文件指针时遇到的位置问题
  15. Python可视化:python画图字体设置
  16. 计算机文件夹加密文件,如何加密计算机文件夹4种加密文件夹的方法
  17. 北京交通大学计算机仿真大作业直流调速系统仿真,计算机仿真技术大作业 12脉波整流电路仿真.doc...
  18. 电路设计_继电器的电磁干扰
  19. 小学计算机反思案例,小学教师教育事案例以及反思
  20. Accelerate Activity Tracker隐私政策

热门文章

  1. css属性 content
  2. 读书总结:周鸿祎,我的互联网方法论
  3. 同时对view延时执行两个动画时候的现象
  4. 移动对meta的定义(转)
  5. 腾讯的强大不是偶然,小马哥很强大
  6. C# 调用 *.sql 文件
  7. mysql数据库容量和性能_新品速递丨容量盘性能提升超 300%,数据库支持 MySQL 8.0...
  8. linux 卸载 openldap,Linux下安装openldap
  9. 平板电脑可以插u盘吗_有手机还需要平板电脑吗 酷比魔方iplay30平板电脑评测
  10. mysql_ping()函数的作用以及返回值的类型正确的是,[单选] mysql_ping()函数的作用以及返回值的类型正确的是:()...