国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站中英文轉(zhuǎn)換怎么做軟文標(biāo)題

網(wǎng)站中英文轉(zhuǎn)換怎么做,軟文標(biāo)題,企業(yè)展館策劃公司,公司建設(shè)門戶網(wǎng)站的總結(jié)一、JacksonConfig 全局序列化反序列化配置 1.1yml中配置 #時區(qū) spring.jackson.time-zoneGMT8 #日期格式 spring.jackson.date-formatyyyy-MM-dd HH:mm:ss #默認轉(zhuǎn)json的屬性,這里設(shè)置為非空才轉(zhuǎn)json spring.jackson.default-property-inclusionnon_null #設(shè)置屬性…

一、JacksonConfig 全局序列化反序列化配置

1.1yml中配置

#時區(qū)
spring.jackson.time-zone=GMT+8
#日期格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
#默認轉(zhuǎn)json的屬性,這里設(shè)置為非空才轉(zhuǎn)json
spring.jackson.default-property-inclusion=non_null
#設(shè)置屬性命名策略,對應(yīng)jackson下PropertyNamingStrategy中的常量值,SNAKE_CASE-返回的json駝峰式轉(zhuǎn)下劃線,json body下劃線傳到后端自動轉(zhuǎn)駝峰式
spring.jackson.property-naming-strategy=SNAKE_CASE
#對象為空時是否報錯,默認true
spring.jackson.serialization.fail-on-empty-beans=true
#返回的java.util.date轉(zhuǎn)換成timestamp
spring.jackson.serialization.write-dates-as-timestamps=true
#json中含pojo不存在屬性時是否失敗報錯,默認true
spring.jackson.deserialization.fail-on-unknown-properties=false
#是否允許出現(xiàn)單引號,默認false
spring.jackson.parser.allow-single-quotes=true
?

1.2配置文件中配置
光標(biāo)定位置在builder后面,ALT + ENTER,選擇?replace lambda with anonymous class

可以顯示 lambda為普通方法。此處定義了一下常見類型的序列化方法

@Slf4j
@Configuration
public class JacksonConfig {@Beanpublic Jackson2ObjectMapperBuilderCustomizer customizer() {return new Jackson2ObjectMapperBuilderCustomizer() {@Overridepublic void customize(Jackson2ObjectMapperBuilder builder) {// 全局配置序列化返回 JSON 處理JavaTimeModule javaTimeModule = new JavaTimeModule();javaTimeModule.addSerializer(Long.class, BigNumberSerializer.INSTANCE);javaTimeModule.addSerializer(Long.TYPE, BigNumberSerializer.INSTANCE);javaTimeModule.addSerializer(BigInteger.class, BigNumberSerializer.INSTANCE);javaTimeModule.addSerializer(BigDecimal.class, ToStringSerializer.instance);DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(formatter));javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(formatter));builder.modules(javaTimeModule);builder.timeZone(TimeZone.getDefault());log.info("初始化 jackson 配置");}};}}
ruoyi-admin/src/main/resources/application.yml 中配置jackon
jackson:# 日期格式化date-format: yyyy-MM-dd HH:mm:ssserialization:# 格式化輸出indent_output: false# 忽略無法轉(zhuǎn)換的對象fail_on_empty_beans: falsedeserialization:# 允許對象忽略json中不存在的屬性fail_on_unknown_properties: false

點擊Jackson2ObjectMapperBuilderCustomizer, 可以查看自動配置類:JacksonAutoConfiguration

	@Configuration(proxyBeanMethods = false)@ConditionalOnClass(Jackson2ObjectMapperBuilder.class)static class JacksonObjectMapperBuilderConfiguration {@Bean@Scope("prototype")@ConditionalOnMissingBeanJackson2ObjectMapperBuilder jacksonObjectMapperBuilder(ApplicationContext applicationContext,List<Jackson2ObjectMapperBuilderCustomizer> customizers) {Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();builder.applicationContext(applicationContext);customize(builder, customizers);return builder;}private void customize(Jackson2ObjectMapperBuilder builder,List<Jackson2ObjectMapperBuilderCustomizer> customizers) {for (Jackson2ObjectMapperBuilderCustomizer customizer : customizers) {customizer.customize(builder);}}}
1.3常見jackon注解?
  • @JsonIgnore    忽略序列化,用于屬性上
  • @JsonInclude(JsonInclude.Include.NON_EMPTY)  不為空時候才進行序列化和反序列化
  • @JsonSerialize(using = DictDataJsonSerializer.class)  序列化,如下DictDataJsonSerializer 是字典序列化的處理工具
    /*** 字典數(shù)據(jù)json序列化工具** @author itino* @deprecated 建議使用通用翻譯注解*/
    @Deprecated
    @Slf4j
    public class DictDataJsonSerializer extends JsonSerializer<String> implements ContextualSerializer {private String dictType;@Overridepublic void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {try {DictService dictService = SpringUtils.getBean(DictService.class);if (ObjectUtil.isNotNull(dictService)) {String label = dictService.getDictLabel(dictType, value);gen.writeString(StringUtils.isNotBlank(label) ? label : value);} else {gen.writeString(value);}} catch (BeansException e) {log.error("字典數(shù)據(jù)未查到, 采用默認處理 => {}", e.getMessage());gen.writeString(value);}}@Overridepublic JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException {DictDataMapper anno = property.getAnnotation(DictDataMapper.class);if (Objects.nonNull(anno) && StrUtil.isNotBlank(anno.dictType())) {this.dictType = anno.dictType();return this;}return prov.findValueSerializer(property.getType(), property);}
    }
    

  • @JsonProperty( value = "pass")  接受和序列化都用 pass ,而不是 password
    @JsonIgnore
    @JsonProperty( value = "pass")
    public String getPassword() {return password;
    }

  • @JsonFormat(pattern = "yyyy-MM-dd")  系列化格式

1.4 若依jackson工具包

com.ruoyi.common.utils.JsonUtils? ?,提供序列化和反序列化 一些常用方法

二、MybatisPlus

依賴

 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency>

ruoyi-admin/src/main/resources/application.yml??配置文件:

  • 配置了Mapper 接口的掃描
  • 配置Mapper對應(yīng)XML的掃描
  • 配置實體類domain掃描
  • 配字段駝峰規(guī)則
  • 以及 p6spy的日志分析
  • 配置主鍵生成規(guī)則,以及CRUD策略
# MyBatisPlus配置
# https://baomidou.com/config/
mybatis-plus:# 不支持多包, 如有需要可在注解配置 或 提升掃包等級# 例如 com.**.**.mapper  com.ruoyi.system.mappermapperPackage: com.ruoyi.**.mapper# 對應(yīng)的 XML 文件位置mapperLocations: classpath*:mapper/**/*Mapper.xml# 實體掃描,多個package用逗號或者分號分隔typeAliasesPackage: com.ruoyi.**.domain# 啟動時是否檢查 MyBatis XML 文件的存在,默認不檢查checkConfigLocation: falseconfiguration:# 自動駝峰命名規(guī)則(camel case)映射mapUnderscoreToCamelCase: true# MyBatis 自動映射策略# NONE:不啟用 PARTIAL:只對非嵌套 resultMap 自動映射 FULL:對所有 resultMap 自動映射autoMappingBehavior: PARTIAL# MyBatis 自動映射時未知列或未知屬性處理策# NONE:不做處理 WARNING:打印相關(guān)警告 FAILING:拋出異常和詳細信息autoMappingUnknownColumnBehavior: NONE# 更詳細的日志輸出 會有性能損耗 org.apache.ibatis.logging.stdout.StdOutImpl# 關(guān)閉日志記錄 (可單純使用 p6spy 分析) org.apache.ibatis.logging.nologging.NoLoggingImpl# 默認日志輸出 org.apache.ibatis.logging.slf4j.Slf4jImpllogImpl: org.apache.ibatis.logging.nologging.NoLoggingImplglobal-config:# 是否打印 Logo bannerbanner: truedbConfig:# 主鍵類型# AUTO 自增 NONE 空 INPUT 用戶輸入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUIDidType: ASSIGN_ID# 邏輯已刪除值logicDeleteValue: 2# 邏輯未刪除值logicNotDeleteValue: 0# 字段驗證策略之 insert,在 insert 的時候的字段驗證策略# IGNORED 忽略 NOT_NULL 非NULL NOT_EMPTY 非空 DEFAULT 默認 NEVER 不加入 SQLinsertStrategy: NOT_NULL# 字段驗證策略之 update,在 update 的時候的字段驗證策略updateStrategy: NOT_NULL# 字段驗證策略之 select,在 select 的時候的字段驗證策略既 wrapper 根據(jù)內(nèi)部 entity 生成的 where 條件where-strategy: NOT_NULL

?com.ruoyi.framework.config.MybatisPlusConfig 配置文件,主要配置以下:自行查看

  • // 數(shù)據(jù)權(quán)限處理
  • // 分頁插件
  • // 樂觀鎖插件
  • //? ?指定字段的填充策略
  •  使用網(wǎng)卡信息綁定雪花生成器,防止集群雪花ID重復(fù)
?1.1 常見注解

????????

@TableName("sys_user")  標(biāo)注數(shù)據(jù)庫表名稱
@TableId(value = "user_id")  主鍵
@Version   樂觀鎖(比如查詢攜帶上 version字段,才回去更新版本)
@TableLogic    刪除標(biāo)志(0代表存在 2代表刪除):上面 yml配置的邏輯刪除, 標(biāo)注該注解的字段,數(shù)據(jù)庫要默認設(shè)置 0
@TableField
屬性
fill

指定字段的填充策略,如自動填充創(chuàng)建時間、更新時間等。需要實現(xiàn) MyBatis-Plus 提供的?MetaObjectHandler?接口,

并重寫?insertFill?和?updateFill?方法。

若依具體實現(xiàn)類:com.ruoyi.framework.handler.CreateAndUpdateMetaObjectHandler

exist?

標(biāo)記是否為數(shù)據(jù)庫表字段,默認為?true。如果設(shè)置為?false,則表示該字段不是數(shù)據(jù)庫表的字段,不會參與 SQL 語句的生成

示例:
@TableField(exist = false)
private List<SysRole> roles;
value
  • 數(shù)據(jù)庫字段名,用于指定實體類字段對應(yīng)的數(shù)據(jù)庫字段名。當(dāng)實體類字段名與數(shù)據(jù)庫字段名不一致時使用。
  • 示例:@TableField("db_column_name")
update
  • 用于 SQL 的 SET 語句,設(shè)置字段更新的策略。通常與?@TableLogic?注解一起使用,實現(xiàn)邏輯刪除。
  • 示例:@TableField(update = "deleted=1")
nsertStrategy?和?updateStrategy
  • 字段的插入和更新策略。FieldStrategy?是一個枚舉類,包含以下值:IGNORED(忽略)、NOT_NULL(非 NULL 則更新)、NOT_EMPTY(非空則更新)、ALWAYS(總是更新)。
  • 示例:
  • @TableField( insertStrategy = FieldStrategy.NOT_EMPTY, updateStrategy = FieldStrategy.NOT_EMPTY, whereStrategy = FieldStrategy.NOT_EMPTY )
select
  • 是否進行 select 查詢。默認為?true,表示該字段會參與查詢。如果設(shè)置為?false,則查詢時不會包含該字段。
  • 示例:@TableField(select = false)
jdbcType
  • 字段的 JDBC 類型。通常用于指定某些特殊類型的字段,如枚舉類型。
    • 示例:
      @TableField(updateStrategy = FieldStrategy.IGNORED, jdbcType = JdbcType.VARCHAR)
el
  • 支持 EL 表達式,用于復(fù)雜字段的映射處理。
  • 示例:@TableField(el = "column + '_suffix'")
condition
  • 用于 SQL WHERE 語句的條件,通常與?@Select?注解一起使用,實現(xiàn)動態(tài) SQL。
  • 示例:@TableField(condition = "name != null and name = #{name}")
strategy
  • 字段驗證策略,與?insertStrategy?和?updateStrategy?功能類似,但用于全局配置。
  • 示例:@TableField(strategy = FieldStrategy.NOT_EMPTY)
        ????????????????????????????????????????                                     
1.2?BaseMapperPlus

若依繼承了 mybatis-plus的BaseMapper<T> 接口 ,自定義了? BaseMapperPlus<M, T, V> Mapper接口:com.ruoyi.common.core.mapper.BaseMapperPlus

  • 提供泛型的轉(zhuǎn)換
  • 提供BaseMapper原有接口的封裝
  • 提供其他新增的查詢方法

1.3分布式主鍵 雪花ID
1-yml中配置雪花:
dbConfig:# 主鍵類型# AUTO 自增 NONE 空 INPUT 用戶輸入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUIDidType: ASSIGN_ID

2-com.ruoyi.framework.config.MybatisPlusConfig 類中注入IdentifierGenerator?,具體實現(xiàn)自行查看

  /*** 使用網(wǎng)卡信息綁定雪花生成器* 防止集群雪花ID重復(fù)*/@Beanpublic IdentifierGenerator idGenerator() {return new DefaultIdentifierGenerator(NetUtil.getLocalhost());}
1.4?wapper

關(guān)于條件構(gòu)造器:?wapper 學(xué)習(xí)文章可以參考

mybatis-plus中wrapper的用法(詳細)_mybatisplus wrapper-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_39715000/article/details/120090033上文未提及一些常用函數(shù)

1-apply() 函數(shù)? :將要添加到 SQL 語句中的 SQL 片段作為參數(shù)傳遞給它即可
//簡單查詢
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.apply("id = 1 or name like '%test%'");
List<User> userList = userMapper.selectList(wrapper);//日期
apply("date_format(dateColumn,'%Y-%m-%d') = {0}", "2020-10-08")apply("date_format(dateColumn,{0}) = {1}", "%Y-%m-%d", "2020-10-08")
2-func 函數(shù):可以添加if 等判斷
 LambdaQueryWrapper<SysOperLog> lqw = new LambdaQueryWrapper<SysOperLog>().like(StringUtils.isNotBlank(operLog.getTitle()), SysOperLog::getTitle, operLog.getTitle()).eq(operLog.getBusinessType() != null && operLog.getBusinessType() > 0,SysOperLog::getBusinessType, operLog.getBusinessType()).func(f -> {if (ArrayUtil.isNotEmpty(operLog.getBusinessTypes())) {f.in(SysOperLog::getBusinessType, Arrays.asList(operLog.getBusinessTypes()));}})

3- nested 嵌套查詢:?nested函數(shù)中語句會加上()作為整體提升優(yōu)先級

 public void complexQuery() {  QueryWrapper<User> queryWrapper = new QueryWrapper<>();  queryWrapper.eq("status", 1)  .nested(i -> i.eq("name", "John").or().like("email", "example%"))  .orderByAsc("id");  List<User> userList = userMapper.selectList(queryWrapper);   }  

SELECT * FROM user WHERE status = 1 AND (name = 'John' OR email LIKE 'example%') ORDER BY id ASC?

三、BeanCopyUtils

com.ruoyi.common.utils.BeanCopyUtils 包中 ,提供:(基于 cglib 性能優(yōu)異)

  • Bean to Bean
  • Bean to Map
  • Map to Bean
  • Map to Map
  • List copy

四、Redis?

1.1 Redisson
  1. 功能豐富:Redisson提供了Redis各種數(shù)據(jù)結(jié)構(gòu)的Java實現(xiàn),以及分布式鎖、計數(shù)器等高級功能,滿足復(fù)雜場景需求。

  2. 易于集成:友好的API和與多種Java框架的集成支持,使得開發(fā)者能夠輕松地將Redis集成到Java應(yīng)用中。

  3. 高性能與可擴展:基于Redis的內(nèi)存存儲和集群支持,Redisson實現(xiàn)了高讀寫速度和水平擴展能力,適用于高并發(fā)和大規(guī)模應(yīng)用。

依賴

 <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId></dependency><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-data-27</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>lock4j-redisson-spring-boot-starter</artifactId></dependency>
1.2 Redisson 配置文件和配置類?
配置文件 yml中,com.ruoyi.framework.config.properties.RedissonProperties 是其配置類。

下面分別是單機 和集群配置類。

/*** 單機服務(wù)配置*/
private SingleServerConfig singleServerConfig;/*** 集群服務(wù)配置*/
private ClusterServersConfig clusterServersConfig;
redisson:# redis key前綴keyPrefix: ruoyi-vue-plus# 線程池數(shù)量threads: 4# Netty線程池數(shù)量nettyThreads: 8# 單節(jié)點配置singleServerConfig:# 客戶端名稱clientName: ${ruoyi.name}# 最小空閑連接數(shù)connectionMinimumIdleSize: 8# 連接池大小connectionPoolSize: 32# 連接空閑超時,單位:毫秒idleConnectionTimeout: 10000# 命令等待超時,單位:毫秒timeout: 3000# 發(fā)布和訂閱連接池大小subscriptionConnectionPoolSize: 50

com.ruoyi.framework.config.RedisConfig 類,是redisson的配置類。

 @Beanpublic RedissonAutoConfigurationCustomizer redissonCustomizer() {return config -> {config.setThreads(redissonProperties.getThreads()).setNettyThreads(redissonProperties.getNettyThreads()).setCodec(new JsonJacksonCodec(objectMapper));RedissonProperties.SingleServerConfig singleServerConfig = redissonProperties.getSingleServerConfig();if (ObjectUtil.isNotNull(singleServerConfig)) {// 使用單機模式config.useSingleServer()//設(shè)置redis key前綴.setNameMapper(new KeyPrefixHandler(redissonProperties.getKeyPrefix())).setTimeout(singleServerConfig.getTimeout()).setClientName(singleServerConfig.getClientName()).setIdleConnectionTimeout(singleServerConfig.getIdleConnectionTimeout()).setSubscriptionConnectionPoolSize(singleServerConfig.getSubscriptionConnectionPoolSize()).setConnectionMinimumIdleSize(singleServerConfig.getConnectionMinimumIdleSize()).setConnectionPoolSize(singleServerConfig.getConnectionPoolSize());}// 集群配置方式 參考下方注釋RedissonProperties.ClusterServersConfig clusterServersConfig = redissonProperties.getClusterServersConfig();if (ObjectUtil.isNotNull(clusterServersConfig)) {config.useClusterServers()//設(shè)置redis key前綴.setNameMapper(new KeyPrefixHandler(redissonProperties.getKeyPrefix())).setTimeout(clusterServersConfig.getTimeout()).setClientName(clusterServersConfig.getClientName()).setIdleConnectionTimeout(clusterServersConfig.getIdleConnectionTimeout()).setSubscriptionConnectionPoolSize(clusterServersConfig.getSubscriptionConnectionPoolSize()).setMasterConnectionMinimumIdleSize(clusterServersConfig.getMasterConnectionMinimumIdleSize()).setMasterConnectionPoolSize(clusterServersConfig.getMasterConnectionPoolSize()).setSlaveConnectionMinimumIdleSize(clusterServersConfig.getSlaveConnectionMinimumIdleSize()).setSlaveConnectionPoolSize(clusterServersConfig.getSlaveConnectionPoolSize()).setReadMode(clusterServersConfig.getReadMode()).setSubscriptionMode(clusterServersConfig.getSubscriptionMode());}log.info("初始化 redis 配置");};}
1.3? redis 和redisson集群配置文件
/*** redis集群配置 yml** --- # redis 集群配置(單機與集群只能開啟一個另一個需要注釋掉)* spring:*   redis:*     cluster:*       nodes:*         - 192.168.0.100:6379*         - 192.168.0.101:6379*         - 192.168.0.102:6379*     # 密碼*     password:*     # 連接超時時間*     timeout: 10s*     # 是否開啟ssl*     ssl: false** redisson:*   # 線程池數(shù)量*   threads: 16*   # Netty線程池數(shù)量*   nettyThreads: 32*   # 集群配置*   clusterServersConfig:*     # 客戶端名稱*     clientName: ${ruoyi.name}*     # master最小空閑連接數(shù)*     masterConnectionMinimumIdleSize: 32*     # master連接池大小*     masterConnectionPoolSize: 64*     # slave最小空閑連接數(shù)*     slaveConnectionMinimumIdleSize: 32*     # slave連接池大小*     slaveConnectionPoolSize: 64*     # 連接空閑超時,單位:毫秒*     idleConnectionTimeout: 10000*     # 命令等待超時,單位:毫秒*     timeout: 3000*     # 發(fā)布和訂閱連接池大小*     subscriptionConnectionPoolSize: 50*     # 讀取模式*     readMode: "SLAVE"*     # 訂閱模式*     subscriptionMode: "MASTER"*/
1.4?RedisUtils 工具類

所在包 :com.ruoyi.common.utils.redis.RedisUtils

1、 訂閱發(fā)布測試類以及結(jié)果如下;
    @Testvoid subPub(){String key = "key";//模擬訂閱消息 啟動后會一直監(jiān)聽消息RedisUtils.subscribe(key, String.class, consumer -> {Console.log("key:{}", key);Console.log("consumer:{}", consumer);});//模擬發(fā)布RedisUtils.publish(key,"發(fā)布一則消息1!");RedisUtils.publish(key,"發(fā)布一則消息2!");RedisUtils.publish(key,"ok", conumer->{Console.log("consumer3:{}", conumer);});}

key:key
consumer:發(fā)布一則消息1!
key:key
consumer:發(fā)布一則消息2!
consumer3:ok
key:key
consumer:ok
?

?2、設(shè)置緩存
  @Testvoid setCacheObject(){//ttl = -1 ,永久有效印版不用RedisUtils.setCacheObject("java", "helloWord");//ttl 自定義, 60秒有效期RedisUtils.setCacheObject("java", "helloWord", Duration.ofSeconds(60));//是否保留TTL有效期(例如: set之前ttl剩余60 set之后還是為60),false 表示永久RedisUtils.setCacheObject("java", "helloWord", true);//果不存在則設(shè)置 并返回 true 如果存在則返回 falseboolean ifAbsent = RedisUtils.setObjectIfAbsent("java", "helloWord", Duration.ofSeconds(60));}
3、設(shè)置監(jiān)聽?

redis中配置 ,key 監(jiān)聽器配置? : notify-keyspace-event??,如下:(接口中紅線標(biāo)注要包含的 字母,其他接口自行查看

# Redis服務(wù)器配置 # 綁定IP地址
#解除本地限制 注釋bind 127.0.0.1  
#bind 127.0.0.1  # 服務(wù)器端口號  
port 6379 #配置密碼,不要可以刪掉
#requirepass #key 監(jiān)聽器配置
notify-keyspace-events Exg# 服務(wù)器運行模式,Redis以守護進程方式運行,默認為no,改為yes意為以守護進程方式啟動,可后臺運行,除非kill進程,改為yes會使配置文件方式啟動redis失敗,如果后面redis啟動失敗,就將這個注釋掉
daemonize no#當(dāng)Redis以守護進程方式運行時,Redis默認會把pid寫入/var/run/redis.pid文件,可以通過pidfile指定(自定義)
#pidfile /data/dockerData/redis/run/redis6379.pid  #默認為no,redis持久化,可以改為yes
appendonly yes

?監(jiān)聽測試類:

package com.ruoyi.demo.listener;import cn.hutool.core.lang.Console;
import com.ruoyi.common.utils.redis.RedisUtils;
import org.redisson.api.DeletedObjectListener;
import org.redisson.api.ExpiredObjectListener;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;/*** <簡述>* <詳細描述>** @author syf* @date 2024年03月18日 22:38*/
@Component
public class ExpiredListener {@PostConstructpublic void expireListener(){Console.log("啟動監(jiān)聽器。。。。");//用于監(jiān)聽 Redisson 分布式緩存中對象的過期事件RedisUtils.addObjectListener("java", new ExpiredObjectListener() {@Overridepublic void onExpired(String name) {Console.log("ExpiredObjectListener:{}", name);}});//監(jiān)聽刪除RedisUtils.addObjectListener("java", new DeletedObjectListener() {@Overridepublic void onDeleted(String name) {Console.log("DeletedObjectListener:{}", name);}});}
}

結(jié)果:監(jiān)聽到刪除

4-對象操作

常用操作

@Testvoid getObject(){RedisUtils.setCacheObject("java", "helloWord");//6-校驗對象是否存在RedisUtils.isExistsObject("java");//1-設(shè)置過期時間RedisUtils.expire("java", Duration.ofSeconds(10));//2-獲取對象Object name = RedisUtils.getCacheObject("name");Console.log("name:{}", name);//3-獲取剩余存活時間long time = RedisUtils.getTimeToLive("name");Console.log("time:{}", time);//4-刪除RedisUtils.deleteObject("name");//5-刪除集合List<String> list = new ArrayList<>();list.add("java1");list.add("java2");RedisUtils.setCacheObject("java1", "helloWord1");RedisUtils.setCacheObject("java2", "helloWord2");RedisUtils.deleteObject(list);}
5-數(shù)組操作

數(shù)組操作是拼接,不會覆蓋,對象操作則是覆蓋,注意使用場景

提供集合的操作下:

@Testvoid saveList(){//這個實際保存是對象 (覆蓋之前 list1)List<String> list = Arrays.asList("java1", "java2");RedisUtils.setCacheObject("list1", list, Duration.ofSeconds(60));//保存是數(shù)組 (不會覆蓋之前的數(shù)據(jù) list2)RedisUtils.setCacheList("list2", list);//取List<String> list2 = RedisUtils.getCacheList("list2");//set集合 值不重復(fù)Set<String> set = new HashSet<>();set.add("java1");set.add("java2");RedisUtils.setCacheSet("set", set);RedisUtils.getCacheSet("set");//MapMap<String, Object> map = new HashMap<>();map.put("java1", "String");map.put("java2", "Integer");//存RedisUtils.setCacheMap("map", map);//取Object value = RedisUtils.getCacheMapValue("map", "java1");//修改map 里面值RedisUtils.setCacheMapValue("java1", "map", "null");//取map 里面值(自定義map 用得少)Set<String> objects = new HashSet<>();objects.add("java1");objects.add("java2");Map<String, Object> map2 = RedisUtils.getMultiCacheMapValue("map", objects);//取Map<String, Object> cacheMap = RedisUtils.getCacheMap("map");//遍歷keySet<String> map1 = RedisUtils.getCacheMapKeySet("map");}
6-原子操作

原子操作,創(chuàng)建后,利用 增加 減少方法去修改

 @Testvoid  steAtom(){//原子操作RedisUtils.setAtomicValue("count" ,1);//增加RedisUtils.incrAtomicValue("count");//減少RedisUtils.decrAtomicValue("count");//獲取long atomicValue = RedisUtils.getAtomicValue(":count");}
7-根據(jù)前綴獲取

@Testvoid getKeys() {//getString prefix = "ruoyi-vue-plus:sys";Collection<String> keys = RedisUtils.keys(prefix + "*");List<String> list = new ArrayList<>(keys);for (String s : list) {Console.log("value:{}", s);}//刪除String prefix1 = "list1";RedisUtils.deleteKeys(prefix1 + "*");}

結(jié)果:

value:sys_config
value:sys_oss_config
value:sys_oss:default_config
value:sys_dict
?

8-是否存在

 @Testvoid getExists() {//是否存在boolean hasKey = RedisUtils.hasKey("list2");boolean existsObjectis = RedisUtils.isExistsObject("list2");}

http://aloenet.com.cn/news/36644.html

相關(guān)文章:

  • 佛山專業(yè)建設(shè)網(wǎng)站平臺營銷策劃方案怎么寫?
  • 網(wǎng)站備案接入商名稱seo計費系統(tǒng)開發(fā)
  • 廣州白云做網(wǎng)站濟寧百度推廣電話
  • 成都網(wǎng)站制作公司成人速成班有哪些專業(yè)
  • 黃驊港開發(fā)區(qū)谷歌seo是什么意思
  • 網(wǎng)站建設(shè)演講稿全網(wǎng)營銷系統(tǒng)1700元真實嗎
  • 專門做化妝的招聘網(wǎng)站品牌營銷策略四種類型
  • 手機電影網(wǎng)站怎么做河池網(wǎng)站seo
  • 啟銘網(wǎng)站建設(shè)5118關(guān)鍵詞挖掘工具
  • 石家莊移動端網(wǎng)站建設(shè)百度發(fā)布
  • 濰坊網(wǎng)站優(yōu)化sem和seo是什么意思
  • 網(wǎng)站怎么優(yōu)化推廣怎么搜索關(guān)鍵詞
  • 慈溪外貿(mào)公司網(wǎng)站優(yōu)化營商環(huán)境的意義
  • 動態(tài)網(wǎng)站建設(shè)04章在線測試關(guān)鍵詞排名優(yōu)化易下拉霸屏
  • 北京12345網(wǎng)上投訴平臺seo搜索引擎優(yōu)化報價
  • 免費政府網(wǎng)站html模板百度首頁快速排名系統(tǒng)
  • 廣西建設(shè)廳網(wǎng)站是什么關(guān)鍵詞優(yōu)化需要從哪些方面開展?
  • 宣武網(wǎng)站建設(shè)低價刷贊網(wǎng)站推廣
  • 網(wǎng)站域名綁定seo搜索優(yōu)化專員招聘
  • 免費網(wǎng)絡(luò)翻外墻軟件寧波seo高級方法
  • 濰坊哪里能找到做網(wǎng)站的seo廣告平臺
  • 網(wǎng)站建設(shè)服務(wù)提供商搜索引擎排名
  • 網(wǎng)站做的好不好看什么廣州seo
  • 做站群一個網(wǎng)站多少錢網(wǎng)站建設(shè)的整體流程有哪些
  • 怎樣克隆別人的網(wǎng)站上海百度推廣優(yōu)化排名
  • 阿里巴巴網(wǎng)站更新怎么做百度競價優(yōu)化
  • h5商城網(wǎng)站怎么做的河北seo平臺
  • 網(wǎng)站評論源碼制作網(wǎng)站的步驟和過程
  • 網(wǎng)站建設(shè)移動端是什么意思百青藤廣告聯(lián)盟
  • 東莞網(wǎng)站優(yōu)化方案鄭州seo聯(lián)系搜點網(wǎng)絡(luò)效果好