網(wǎng)站中英文轉換怎么做軟文標題
一、JacksonConfig 全局序列化反序列化配置
1.1yml中配置
#時區(qū)
spring.jackson.time-zone=GMT+8
#日期格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
#默認轉json的屬性,這里設置為非空才轉json
spring.jackson.default-property-inclusion=non_null
#設置屬性命名策略,對應jackson下PropertyNamingStrategy中的常量值,SNAKE_CASE-返回的json駝峰式轉下劃線,json body下劃線傳到后端自動轉駝峰式
spring.jackson.property-naming-strategy=SNAKE_CASE
#對象為空時是否報錯,默認true
spring.jackson.serialization.fail-on-empty-beans=true
#返回的java.util.date轉換成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配置文件中配置
光標定位置在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# 忽略無法轉換的對象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對應XML的掃描
- 配置實體類domain掃描
- 配字段駝峰規(guī)則
- 以及 p6spy的日志分析
- 配置主鍵生成規(guī)則,以及CRUD策略
# MyBatisPlus配置
# https://baomidou.com/config/
mybatis-plus:# 不支持多包, 如有需要可在注解配置 或 提升掃包等級# 例如 com.**.**.mapper com.ruoyi.system.mappermapperPackage: com.ruoyi.**.mapper# 對應的 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:打印相關警告 FAILING:拋出異常和詳細信息autoMappingUnknownColumnBehavior: NONE# 更詳細的日志輸出 會有性能損耗 org.apache.ibatis.logging.stdout.StdOutImpl# 關閉日志記錄 (可單純使用 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ù)權限處理 // 分頁插件 // 樂觀鎖插件- //? ?指定字段的填充策略
使用網(wǎng)卡信息綁定雪花生成器,防止集群雪花ID重復
?1.1 常見注解
????????
@TableName("sys_user") 標注數(shù)據(jù)庫表名稱@TableId(value = "user_id") 主鍵@Version 樂觀鎖(比如查詢攜帶上 version字段,才回去更新版本)@TableLogic 刪除標志(0代表存在 2代表刪除):上面 yml配置的邏輯刪除, 標注該注解的字段,數(shù)據(jù)庫要默認設置 0
@TableField
屬性 fill 指定字段的填充策略,如自動填充創(chuàng)建時間、更新時間等。需要實現(xiàn) MyBatis-Plus 提供的?
MetaObjectHandler
?接口,并重寫?
insertFill
?和?updateFill
?方法。若依具體實現(xiàn)類:com.ruoyi.framework.handler.CreateAndUpdateMetaObjectHandler
exist? 標記是否為數(shù)據(jù)庫表字段,默認為?
true
。如果設置為?false
,則表示該字段不是數(shù)據(jù)庫表的字段,不會參與 SQL 語句的生成示例: @TableField(exist = false) private List<SysRole> roles;value
- 數(shù)據(jù)庫字段名,用于指定實體類字段對應的數(shù)據(jù)庫字段名。當實體類字段名與數(shù)據(jù)庫字段名不一致時使用。
- 示例:
@TableField("db_column_name")
update
- 用于 SQL 的 SET 語句,設置字段更新的策略。通常與?
@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
,表示該字段會參與查詢。如果設置為?false
,則查詢時不會包含該字段。- 示例:
@TableField(select = false)
jdbcType
- 字段的 JDBC 類型。通常用于指定某些特殊類型的字段,如枚舉類型。
- 示例:
@TableField(updateStrategy = FieldStrategy.IGNORED, jdbcType = JdbcType.VARCHAR)el
- 支持 EL 表達式,用于復雜字段的映射處理。
- 示例:
@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
- 提供泛型的轉換
- 提供BaseMapper原有接口的封裝
- 提供其他新增的查詢方法
1.3分布式主鍵 雪花ID
1-yml中配置雪花: dbConfig:# 主鍵類型# AUTO 自增 NONE 空 INPUT 用戶輸入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUIDidType: ASSIGN_ID2-com.ruoyi.framework.config.MybatisPlusConfig 類中注入IdentifierGenerator?,具體實現(xiàn)自行查看
/*** 使用網(wǎng)卡信息綁定雪花生成器* 防止集群雪花ID重復*/@Beanpublic IdentifierGenerator idGenerator() {return new DefaultIdentifierGenerator(NetUtil.getLocalhost());}
1.4?wapper
關于條件構造器:?wapper 學習文章可以參考
mybatis-plus中wrapper的用法(詳細)_mybatisplus wrapper-CSDN博客https://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
功能豐富:Redisson提供了Redis各種數(shù)據(jù)結構的Java實現(xiàn),以及分布式鎖、計數(shù)器等高級功能,滿足復雜場景需求。
易于集成:友好的API和與多種Java框架的集成支持,使得開發(fā)者能夠輕松地將Redis集成到Java應用中。
高性能與可擴展:基于Redis的內(nèi)存存儲和集群支持,Redisson實現(xiàn)了高讀寫速度和水平擴展能力,適用于高并發(fā)和大規(guī)模應用。
依賴
<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 是其配置類。
下面分別是單機 和集群配置類。
/*** 單機服務配置*/ private SingleServerConfig singleServerConfig;/*** 集群服務配置*/ 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()//設置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()//設置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ā)布測試類以及結果如下;
@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、設置緩存
@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);//果不存在則設置 并返回 true 如果存在則返回 falseboolean ifAbsent = RedisUtils.setObjectIfAbsent("java", "helloWord", Duration.ofSeconds(60));}
3、設置監(jiān)聽?
redis中配置 ,key 監(jiān)聽器配置? : notify-keyspace-event??,如下:(接口中紅線標注要包含的 字母,其他接口自行查看)
# Redis服務器配置 # 綁定IP地址
#解除本地限制 注釋bind 127.0.0.1
#bind 127.0.0.1 # 服務器端口號
port 6379 #配置密碼,不要可以刪掉
#requirepass #key 監(jiān)聽器配置
notify-keyspace-events Exg# 服務器運行模式,Redis以守護進程方式運行,默認為no,改為yes意為以守護進程方式啟動,可后臺運行,除非kill進程,改為yes會使配置文件方式啟動redis失敗,如果后面redis啟動失敗,就將這個注釋掉
daemonize no#當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ān)聽到刪除
4-對象操作
常用操作
@Testvoid getObject(){RedisUtils.setCacheObject("java", "helloWord");//6-校驗對象是否存在RedisUtils.isExistsObject("java");//1-設置過期時間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集合 值不重復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 + "*");}
結果:
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");}