编写RedisUtil来操作Redis

2024-01-17 15:20
文章标签 操作 redis 编写 redisutil

本文主要是介绍编写RedisUtil来操作Redis,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

​编辑

Redis中文网

第一步:建springboot项目

第二步:导依赖

第三步:启动类

第四步:yml

第五步:Redis配置类

第六步:测试类

第七步:编写工具类 RedisUtil

第八步:编写和测试

普通缓存放入:String类型

获取指定 key 所储存的字符串值的长度

Get 命令用于获取指定 key 的值

Redis Incr 命令将 key 中储存的数字值增一。

Redis Decr 命令将 key 中储存的数字值减一。

普通缓存放入并设置时间

key 中储存的数字加上指定的增量值。

Redis Mget 命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。


Redis中文网

按这里面来编写

第一步:建springboot项目

第二步:导依赖

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.5</version><relativePath/></parent><groupId>com.itheima</groupId><artifactId>springdataredis_demo</artifactId><version>1.0-SNAPSHOT</version><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.4.5</version></plugin></plugins></build>
</project>

第三步:启动类

package com.itheima;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class App {public static void main(String[] args) {SpringApplication.run(App.class,args);}}

第四步:yml

spring:application:name: springdataredis_demo#Redis相关配置redis:host: localhostport: 6379#password: 123456database: 0 #操作的是0号数据库jedis:#Redis连接池配置pool:max-active: 8 #最大连接数max-wait: 1ms #连接池最大阻塞等待时间max-idle: 4 #连接池中的最大空闲连接min-idle: 0 #连接池中的最小空闲连接

第五步:Redis配置类

package com.itheima.config;import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;/*** Redis配置类*/@Configuration
public class RedisConfig extends CachingConfigurerSupport {@Beanpublic RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();//默认的Key序列化器为:JdkSerializationRedisSerializer//设置新的y序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setConnectionFactory(connectionFactory);return redisTemplate;}}

第六步:测试类

package com.itheima.test;import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;/*** @Author lpc* @Date 2024 01 16 14 52**/@SpringBootTest
@RunWith(SpringRunner.class)
public class RedisUtil {@Autowiredprivate RedisUtil redisUtil;}

第七步:编写工具类 RedisUtil

package com.itheima.utils;import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;import javax.annotation.Resource;/*** @Author lpc* @Date 2024 01 16 14 40**/@Component //是一个通用的Spring注解,用于将类标记为一个组件,使Spring容器能够自动检测并将其实例化为一个Spring Bean。
public class RedisUtil {/*** 这段代码实现了将一个用于操作Redis数据库的RedisTemplate对象注入到当前类中,以便于进行Redis相关操作。*/@Resourceprivate RedisTemplate<String, Object> redisTemplate;/*** 详解:* 1.创建一个RedisTemplate对象:通过将redisTemplate字段声明为RedisTemplate<String, Object>类型,可以创建一个用于操作Redis数据库的RedisTemplate对象。* 2.实现Redis操作:通过使用redisTemplate对象,您可以执行各种Redis操作,如插入数据、查询数据、更新数据等。由于字段的泛型参数是<String, Object>,这意味着Redis的Key是String类型,Value是Object类型。您可以根据需要进行类型转换。* 3.依赖注入:使用@Resource注解,将与RedisTemplate<String, Object>类型兼容的Bean注入到redisTemplate字段中。这意味着在Spring容器中配置了一个与RedisTemplate<String, Object>匹配的Bean,并且该Bean会在当前类的实例化过程中自动注入到redisTemplate字段上。*/// ============================String=============================/*** 普通缓存放入** @param key   键* @param value 值* @return true成功 false失败*/public boolean set(String key, Object value) {try {redisTemplate.opsForValue().set(key, value);return true;} catch (Exception e) {e.printStackTrace();return false;}}}

第八步:编写和测试

普通缓存放入:String类型

这个提前开启

 @Testpublic void testString(){redisUtil.set("cosplay","liuhua");}

获取指定 key 所储存的字符串值的长度

  /*** 获取指定 key 所储存的字符串值的长度* @param key* @return*///Redis Strlen 命令用于获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。public Long strlen(String key){try{return redisTemplate.opsForValue().size(key);}catch (Exception e){e.printStackTrace();return null; // 或者抛出自定义的异常}}
 @Testpublic void testString(){redisUtil.set("cosplay","liuhua");System.out.println( redisUtil.strlen("cosplay"));}

Get 命令用于获取指定 key 的值

 //Redis Get 命令用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。/*** 普通缓存获取** @param key               键* @param* @return 值* 解释:如何key是null,就返回null; 不是就返回Redis里面的value*/public Object get(String key) {return key == null ? null : redisTemplate.opsForValue().get(key);}
 @Testpublic void testString(){redisUtil.set("cosplay","liuhua");System.out.println( redisUtil.strlen("cosplay"));System.out.println(redisUtil.get("cosplay"));}

Redis Incr 命令将 key 中储存的数字值增一。

 //Redis Incr 命令将 key 中储存的数字值增一。//如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。//如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。//本操作的值限制在 64 位(bit)有符号数字表示之内。/*** 递增** @param key   键* @param delta 要增加几(大于0)* @return*/public long incr(String key, long delta) {if (delta < 0) {throw new RuntimeException("递增因子必须大于0");}return redisTemplate.opsForValue().increment(key, delta);}
 @Testpublic void testString(){String key = "test_key";long delta = 1;// 调用递增方法long result = redisUtil.incr(key, delta);System.out.println(result);}

Redis Decr 命令将 key 中储存的数字值减一。

/* Redis Decr 命令将 key 中储存的数字值减一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内。*//*** 递减** @param key   键* @param delta 要减少几(小于0)* @return*/public long decr(String key, long delta) {if (delta < 0) {throw new RuntimeException("递减因子必须大于0");}return redisTemplate.opsForValue().increment(key, -delta);}
 @Testpublic void testString2(){String key = "test_key2";long delta = 30;// 调用递增方法long result = redisUtil.decr(key, delta);System.out.println(result);}

普通缓存放入并设置时间

/*** 普通缓存放入并设置时间** @param key   键* @param value 值* @param time  时间(秒) time要大于0 如果time小于等于0 将设置无限期* @return true成功 false 失败*/public boolean set(String key, Object value, long time) {try {if (time > 0) {redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);} else {set(key, value);}return true;} catch (Exception e) {e.printStackTrace();return false;}}

key 中储存的数字加上指定的增量值。

 /*** Incrby 命令将 key 中储存的数字加上指定的增量值。* @param key* @param increment* @return* 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误:*/public long incrBy(String key, long increment) {try {return redisTemplate.opsForValue().increment(key, increment);} catch (Exception e) {e.printStackTrace();return 0; //返回一个0}}

Redis Mget 命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。

/*** mget 命令返回所有(一个或多个)给定 key 的值。* 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。* @param keys* @return*/public List<Object> mget(String... keys) {try {return redisTemplate.opsForValue().multiGet(Arrays.asList(keys));} catch (Exception e) {e.printStackTrace();return null;}}

Redis Getset 命令用于设置指定 key 的值,并返回 key 旧的值。

/*** 设置指定键的新值,并返回旧值** @param key   键* @param value 新值* @return 旧值*/public Object getSet(String key,Object value){try{return redisTemplate.opsForValue().getAndSet(key, value);}catch (Exception e){e.printStackTrace();return  null;}}

完整工具类

package com.itheima.utils;import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;/*** @Author lpc* @Date 2024 01 16 14 40**/@Component //是一个通用的Spring注解,用于将类标记为一个组件,使Spring容器能够自动检测并将其实例化为一个Spring Bean。
public class RedisUtil {/*** 这段代码实现了将一个用于操作Redis数据库的RedisTemplate对象注入到当前类中,以便于进行Redis相关操作。*/@Resourceprivate RedisTemplate<String, Object> redisTemplate;/*** 详解:* 1.创建一个RedisTemplate对象:通过将redisTemplate字段声明为RedisTemplate<String, Object>类型,可以创建一个用于操作Redis数据库的RedisTemplate对象。* 2.实现Redis操作:通过使用redisTemplate对象,您可以执行各种Redis操作,如插入数据、查询数据、更新数据等。由于字段的泛型参数是<String, Object>,这意味着Redis的Key是String类型,Value是Object类型。您可以根据需要进行类型转换。* 3.依赖注入:使用@Resource注解,将与RedisTemplate<String, Object>类型兼容的Bean注入到redisTemplate字段中。这意味着在Spring容器中配置了一个与RedisTemplate<String, Object>匹配的Bean,并且该Bean会在当前类的实例化过程中自动注入到redisTemplate字段上。*/// ============================String类型=============================//Redis SET 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。/*** 普通缓存放入** @param key   键* @param value 值* @return true成功 false失败*/public boolean set(String key, Object value) {try {redisTemplate.opsForValue().set(key, value);return true;} catch (Exception e) {e.printStackTrace();return false;}}//Redis Get 命令用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。/*** 普通缓存获取** @param key               键* @param* @return 值* 解释:如何key是null,就返回null; 不是就返回Redis里面的value*/public Object get(String key) {return key == null ? null : redisTemplate.opsForValue().get(key);}/*** 获取指定 key 所储存的字符串值的长度* @param key* @return*///Redis Strlen 命令用于获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。public Long strlen(String key){try{return redisTemplate.opsForValue().size(key);}catch (Exception e){e.printStackTrace();return null; // 或者抛出自定义的异常}}//Redis Incr 命令将 key 中储存的数字值增一。//如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。//如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。//本操作的值限制在 64 位(bit)有符号数字表示之内。/*** 递增** @param key   键* @param delta 要增加几(大于0)* @return*/public long incr(String key, long delta) {if (delta < 0) {throw new RuntimeException("递增因子必须大于0");}return redisTemplate.opsForValue().increment(key, delta);}/* Redis Decr 命令将 key 中储存的数字值减一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内。*//*** 递减** @param key   键* @param delta 要减少几(小于0)* @return*/public long decr(String key, long delta) {if (delta < 0) {throw new RuntimeException("递减因子必须大于0");}return redisTemplate.opsForValue().increment(key, -delta);}/*** 普通缓存放入并设置时间** @param key   键* @param value 值* @param time  时间(秒) time要大于0 如果time小于等于0 将设置无限期* @return true成功 false 失败*/public boolean set(String key, Object value, long time) {try {if (time > 0) {redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);} else {set(key, value);}return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** Incrby 命令将 key 中储存的数字加上指定的增量值。* @param key* @param increment* @return* 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误:*/public long incrBy(String key, long increment) {try {return redisTemplate.opsForValue().increment(key, increment);} catch (Exception e) {e.printStackTrace();return 0; //返回一个0}}/*** mget 命令返回所有(一个或多个)给定 key 的值。* 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。* @param keys* @return*/public List<Object> mget(String... keys) {try {return redisTemplate.opsForValue().multiGet(Arrays.asList(keys));} catch (Exception e) {e.printStackTrace();return null;}}/*** 设置指定键的新值,并返回旧值** @param key   键* @param value 新值* @return 旧值*/public Object getSet(String key,Object value){try{return redisTemplate.opsForValue().getAndSet(key, value);}catch (Exception e){e.printStackTrace();return  null;}}}

这篇关于编写RedisUtil来操作Redis的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/616461

相关文章

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

Redis的持久化之RDB和AOF机制详解

《Redis的持久化之RDB和AOF机制详解》:本文主要介绍Redis的持久化之RDB和AOF机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述RDB(Redis Database)核心原理触发方式手动触发自动触发AOF(Append-Only File)核

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de