redis工具类_SpringBoot 操作 Redis 数据

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;

@Configuration
public 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 的开箱即用的特点0964d19602909f375a9354f72e7eec2c.png
集成 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中的数据:0bdea8d1b8b960302a02e70402486ba3.png

操作集合

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");
    }

结果:050c726cb935014f3c65cd6b17067339.png

总结

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

小知识

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

span 里面的文字不显示_“无糖饮料”显示不含糖,为何还这么甜?原来里面加了这个...

长时间的高温天气让人离不开各种饮料&#xff0c;尤其是冰冻过之后味道更清爽的各种水。当你在外面晒着大太阳汗流浃背&#xff0c;突然听到扭开可乐雪碧瓶盖的那一声“ci~~~~”的时候&#xff0c;是不是瞬间有种眼前有个游泳池的感觉&#xff1f;且慢&#xff0c;更适合夏天的…

java的visitor模式_java设计模式(二十一)访问者模式(Visitor)

介绍访问者模式(Visitor Pattern)&#xff1a;表示一个作用于某对象结构中的各元素的操作&#xff0c;它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。简单来说&#xff0c;访问者模式就是一种分离对象数据结构与行为的方…

testlink mysql配置_TestLink安装配置手册

TestLink安装配置手册范围本文仅作为安装和配置TestLink的参考文档。本文的第一部分为TestLink的安装步骤&#xff0c;第二部分是TestLink的配置方法。本文和其他相关文档可在中寻求帮助一般TestLink安装的步骤如下&#xff1a;1.下载TestLink2.解压文件3.创建数据库4.导入缺省…

java mvc建包结构_Java SSM框架的配置方法、MVC结构的分析、响应的流程

今天头一次配置成功一个SSM框架&#xff0c;兴奋之余&#xff0c;还应该从使用的角度&#xff0c;将整个ssm配置的方法&#xff0c;配置的原因&#xff0c;认真的分析一下。在结束了对SSM框架简单的分析之后&#xff0c;就要开始回归基础&#xff0c;全面的认真复习。所以这个文…

英特尔显示器音频_英特尔也玩马甲?有关USB TypeC的冷知识你了解多少

随着Type-C接口的不断发展&#xff0c;这个接口也成为越来越多设备的标配&#xff0c;除了出现在手机、平板电脑和笔记本电脑等移动设备上&#xff0c;显卡这样的设备也开始配备Type-C接口了&#xff0c;本周末&#xff0c;小编为大家收集了一些有关Type-C接口的冷知识&#xf…

如何允许网页中的编辑器访问剪切板_Vditor下一代的 Markdown 编辑器,为未来而构建...

❝Vditor 是一款浏览器端的 Markdown 编辑器&#xff0c;支持所见即所得(富文本)、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现&#xff0c;支持原生 JavaScript、Vue、React、Angular&#xff0c;提供桌面版❞Markdown背景随着 Markdown 排版方式的普及&…

mpython掌控板作品_第1课 Arduino micro:bit 掌控板 创客教育常用的3类主控板

有很多朋友想学习创客&#xff0c;问我怎么学习。我建议他先百度一下“创客”&#xff0c;看看有什么感觉。结果还是很懵&#xff0c;五花八门&#xff0c;什么都有&#xff0c;找不到核心。简单理解&#xff0c;就是以前讲的DIY&#xff0c;自己动手&#xff0c;制作一个东西。…

redis启动没反应_Promethues如何针对Redis进行监控

需求&#xff1a;采用redis_exporter 收集数据&#xff0c;promethus采集redis_exporter数据&#xff0c;granfana展示数据一、简易安装redisyum install -y redisrpm -qa |grep redislsof -i :6379rpm -ql redissystemctl start redis找到配置文件/etc/redis.conf,修改 requir…

springboot整合rocketmq_面试官:简单说一下RocketMQ整合SpringBoot吧

前言在使用SpringBoot的starter集成包时&#xff0c;要特别注意版本。因为SpringBoot集成RocketMQ的starter依赖是由Spring社区提供的&#xff0c;目前正在快速迭代的过程当中&#xff0c;不同版本之间的差距非常大&#xff0c;甚至基础的底层对象都会经常有改动。例如如果使用…

java面试常考_JAVA面试常考系列十

JAVA面试常考系列十题目一Servlet是什么&#xff1f;Servlet(Server Applet)是Java Servlet的简称&#xff0c;称为小服务程序或服务连接器&#xff0c;是用Java编写的服务器端程序&#xff0c;主要的作用是处理客户端请求并生成动态Web内容。一般情况下&#xff0c;Servlet主要…

的ui在vs中显示没有成员_在电脑桌面使用敬业签团队便签怎么设置新增内容在上面显示?...

实时跟进小组成员的各项任务的完成情况&#xff0c;及时将工作任务安排下去&#xff0c;是提高团队工作效率的较为有效的方法。在监督小组成员任务状况以及及时安排工作方面&#xff0c;选择一款支持多人同步在线协作的软件是非常有必要的。敬业签团队便签是一款不受系统、设备…

多表关联查询_【函数007】 EXCEL多表关联查询实战

继续函数实战系列教程&#xff0c;今天要分享的案例是根据填写的表名自动提取对应表中的数据数据准备&#xff1a;需求说明&#xff1a;我们希望实现&#xff0c;我们选择不同月份&#xff0c;显示对应月份表中的数据&#xff01;处理方案&#xff1a;1、构建下拉列表(菜单)数据…

管理动物园动物c++_《过山车大亨》开发商公开新作 建立自己的动物园

知名模拟经营游戏开发商Frontier Developments近日宣布&#xff0c;旗下游戏《动物园之星》(Planet Zoo)即将在不久后发售&#xff0c;登录Steam平台。本座是一款模拟经营游戏&#xff0c;玩家在游戏中将会从零开始&#xff0c;建立一个属于自己的动物园世界。游戏中有多种不同…

安费诺amphenol连接器_安费诺的Ellison谈信号完整性职业和他的免费开源PCB设计软??件...

Amphenol的信号完整性工程师杰森埃里森(Jason Ellison )Amphenol(安费诺) ICC的高级职员信号完整性工程师杰森埃里森(Jason Ellison )深入了解了网络&#xff0c;给予EE(电子)社区以及他的开源信号完整性项目的重要性。信号完整性工程与其他EE(电子)领域相比如何&#xff1f;他…

mysql的contains_mysql中json_contains、json_extract等json查询方法的使用

新版 Mysql 中加入了对 JSON Document 的支持&#xff0c;可以创建 JSON 类型的字段&#xff0c;并有一套函数支持对JSON的查询、修改等操作。JSON是一种轻量级的数据交换格式&#xff0c;采用了独立于语言的文本格式&#xff0c;类似XML&#xff0c;但是比XML简单&#xff0c;…

260多媒体语言如何调节_260马力配9.7米货厢,实拍柳汽H5小三轴载货车

【卡车之家 原创】高速公路按轴的收费实施让9米6大单桥载货车火了起来&#xff0c;能够满足快递快运、电商物流等以方量为主的轻型货物运输。但这种大单桥18吨的限重对于不少卡友来说或许不太够用&#xff0c;而8x4载货车又有些大材小用了。这时&#xff0c;处于中间位置的三轴…

linux php 如何上传webshell,linux+apache+php的一次拿webshell的心得

首先俺先声明俺是个菜鸟&#xff0c;俺虽然是菜鸟但俺不会一直是菜鸟的(一旁兄弟喊到&#xff1a;别俺&#xff0c;俺&#xff0c;俺的&#xff0c;说普通话&#xff01;)。俺&#xff0c;不对&#xff0c;我一直遵照着实践是检验真理的唯一标准这句话学习技术&#xff0c;这不…

织梦php重新安装教程,织梦CMS系统后台重装的操作教程

原标题&#xff1a;织梦CMS系统后台重装的操作教程网站在线运行&#xff0c;不可能一点问题都不存在&#xff0c;或者当初的网站设计、架构、功能已经不能满足现在用户的需求&#xff0c;所以我们会对网站做出相应的改动。网站除了前端的改版&#xff0c;还会有后台系统重装、服…

mpu9250姿态融合算法_基于投票方式的机器人装配姿态估计

作者&#xff1a;仲夏夜之星来源&#xff1a;公众号 3D视觉工坊链接&#xff1a;基于投票方式的机器人装配姿态估计论文题目&#xff1a;《Voting-Based Pose Estimation for Robotic Assembly Using a 3D Sensor》这篇文章被发表在2012年的IEEE International Conference on R…

skywalking原理_微服务链路追踪原理

作者&#xff1a;平也来源&#xff1a;关爱程序员社区背景介绍在微服务横行的时代&#xff0c;服务化思维逐渐成为了程序员的基本思维模式&#xff0c;但是&#xff0c;由于绝大部分项目只是一味地增加服务&#xff0c;并没有对其妥善管理&#xff0c;当接口出现问题时&#xf…