当前位置: 首页 > news >正文

长沙建站模板seo技术培训价格表

长沙建站模板,seo技术培训价格表,做打鱼网站,物联网技术有哪些文章目录 前言依赖连接 RedisRedis 配置文件Redis 工具类操作 Redis创建 Redis 文件夹查询数据遍历 Redis 文件夹 前言 Redis 是一种高性能的键值存储数据库,支持网络、可基于内存亦可持久化的日志型,而 Spring Boot 是一个简化了开发过程的 Java 框架。…

文章目录

  • 前言
  • 依赖
  • 连接 Redis
  • Redis 配置文件
  • Redis 工具类
  • 操作 Redis
    • 创建 Redis 文件夹
    • 查询数据
    • 遍历 Redis 文件夹


前言

Redis 是一种高性能的键值存储数据库,支持网络、可基于内存亦可持久化的日志型,而 Spring Boot 是一个简化了开发过程的 Java 框架。将两者结合,可以轻松地在 Spring Boot 项目中使用 Redis 来实现数据缓存、会话管理和分布式锁等功能。

Redis 本身是一个内存数据库,在应用中可以充当缓存,提高系统数据查询性能。

一般用于在较短的时间段对相同数据频繁读取的场合,将读取频度较高的数据放入缓存,直接从缓存取数据,以提高效率。

使用场景如:实时排名、秒杀系统等等,并可设置数据自动过期,大大提高效率。


依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

连接 Redis

application.yml 配置文件

spring:data:redis:# Redis服务器地址host: localhost# Redis服务器端口,默认为6379port: 6379# Redis连接的数据库,默认为0(Redis默认有16个数据库,0~15)database: 0# Redis服务器连接密码,默认为空password:# 连接超时时间(毫秒)timeout: 2000jedis:pool:# 连接池最大连接数,若为负值则表示没有任何限制max-active: 10# 连接池中的最大空闲连接max-idle: 6# 连接池中的最小空闲连接min-idle: 2# 连接池最大阻塞等待时间,若为负值则表示没有任何限制max-wait: 1000lettuce:# 超时时间关闭shutdown-timeout: 100

Redis 配置文件

新建Redis配置类

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.*;/*** Redis 配置*/
@Configuration
public class RedisConfig {/*** Redis 序列化配置*/@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(connectionFactory);// 使用GenericJackson2JsonRedisSerializer替换默认序列化GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();// 设置 Key 和 Value 的序列化规则redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);// 初始化 RedisTemplate 序列化完成redisTemplate.afterPropertiesSet();return redisTemplate;}}

Redis 工具类

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundSetOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;import java.util.*;
import java.util.concurrent.TimeUnit;/*** spring redis 工具类**/
@SuppressWarnings(value = {"unchecked", "rawtypes"})
@Component
public class RedisCache {@Autowiredpublic RedisTemplate redisTemplate;/*** 缓存基本的对象,Integer、String、实体类等** @param key   缓存的键值* @param value 缓存的值*/public <T> void setCacheObject(final String key, final T value) {redisTemplate.opsForValue().set(key, value);}/*** 缓存基本的对象,Integer、String、实体类等** @param key      缓存的键值* @param value    缓存的值* @param timeout  时间* @param timeUnit 时间颗粒度*/public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) {redisTemplate.opsForValue().set(key, value, timeout, timeUnit);}/*** 设置有效时间** @param key     Redis键* @param timeout 超时时间* @return true=设置成功;false=设置失败*/public boolean expire(final String key, final long timeout) {return expire(key, timeout, TimeUnit.SECONDS);}/*** 设置有效时间** @param key     Redis键* @param timeout 超时时间* @param unit    时间单位* @return true=设置成功;false=设置失败*/public boolean expire(final String key, final long timeout, final TimeUnit unit) {return redisTemplate.expire(key, timeout, unit);}/*** 获取有效时间** @param key Redis键* @return 有效时间*/public long getExpire(final String key) {return redisTemplate.getExpire(key);}/*** 判断 key是否存在** @param key 键* @return true 存在 false不存在*/public Boolean hasKey(String key) {return redisTemplate.hasKey(key);}/*** 获得缓存的基本对象。** @param key 缓存键值* @return 缓存键值对应的数据*/public <T> T getCacheObject(final String key) {ValueOperations<String, T> operation = redisTemplate.opsForValue();return operation.get(key);}/*** 删除单个对象** @param key*/public boolean deleteObject(final String key) {return redisTemplate.delete(key);}/*** 删除集合对象** @param collection 多个对象* @return*/public boolean deleteObject(final Collection collection) {return redisTemplate.delete(collection) > 0;}/*** 缓存List数据** @param key      缓存的键值* @param dataList 待缓存的List数据* @return 缓存的对象*/public <T> long setCacheList(final String key, final List<T> dataList) {Long count = redisTemplate.opsForList().rightPushAll(key, dataList);return count == null ? 0 : count;}/*** 获得缓存的list对象** @param key 缓存的键值* @return 缓存键值对应的数据*/public <T> List<T> getCacheList(final String key) {return redisTemplate.opsForList().range(key, 0, -1);}/*** 缓存Set** @param key     缓存键值* @param dataSet 缓存的数据* @return 缓存数据的对象*/public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet) {BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);Iterator<T> it = dataSet.iterator();while (it.hasNext()) {setOperation.add(it.next());}return setOperation;}/*** 获得缓存的set** @param key* @return*/public <T> Set<T> getCacheSet(final String key) {return redisTemplate.opsForSet().members(key);}/*** 缓存Map** @param key* @param dataMap*/public <T> void setCacheMap(final String key, final Map<String, T> dataMap) {if (dataMap != null) {redisTemplate.opsForHash().putAll(key, dataMap);}}/*** 获得缓存的Map** @param key* @return*/public <T> Map<String, T> getCacheMap(final String key) {return redisTemplate.opsForHash().entries(key);}/*** 往Hash中存入数据** @param key   Redis键* @param hKey  Hash键* @param value 值*/public <T> void setCacheMapValue(final String key, final String hKey, final T value) {redisTemplate.opsForHash().put(key, hKey, value);}/*** 获取Hash中的数据** @param key  Redis键* @param hKey Hash键* @return Hash中的对象*/public <T> T getCacheMapValue(final String key, final String hKey) {HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();return opsForHash.get(key, hKey);}/*** 获取多个Hash中的数据** @param key   Redis键* @param hKeys Hash键集合* @return Hash对象集合*/public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys) {return redisTemplate.opsForHash().multiGet(key, hKeys);}/*** 删除Hash中的某条数据** @param key  Redis键* @param hKey Hash键* @return 是否成功*/public boolean deleteCacheMapValue(final String key, final String hKey) {return redisTemplate.opsForHash().delete(key, hKey) > 0;}/*** 获得缓存的基本对象列表** @param pattern 字符串前缀* @return 对象列表*/public Collection<String> keys(final String pattern) {return redisTemplate.keys(pattern);}
}

操作 Redis

创建 Redis 文件夹

编写测试用例

: 分割字符串即可创建文件夹,示例如下:

import com.chh.api.utils.redis.RedisCache;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class RedisTest {@Autowiredprivate RedisCache redisCache;@Testvoid contextLoads() {redisCache.setCacheObject(getCacheKey("test"), "测试");}/*** 设置cache key** @param configKey 参数键* @return 缓存键key*/public static String getCacheKey(String configKey) {return "chh-api:data:" + configKey;}
}

运行测试用例,效果如图:

在这里插入图片描述

只有一条数据的时候,不显示文件夹

再写入一条数据,key命名为test2

    @Testvoid contextLoads() {redisCache.setCacheObject(getCacheKey("test2"), "测试2");}

运行测试用例,效果如图:

在这里插入图片描述

查询数据

    @Testvoid getData() {// 判断键是否存在if (redisCache.hasKey("chh-api:data:test")) {Object object = redisCache.getCacheObject("chh-api:data:test");System.out.println(object);} else {System.out.println("不存在");}}

运行测试用例,效果如图:

在这里插入图片描述

遍历 Redis 文件夹

    @Testvoid getAllData() {Collection<String> keys = redisCache.keys("chh-api:data:*");for (String key : keys) {Object object = redisCache.getCacheObject(key);System.out.println(object);}}

运行测试用例,效果如图:

在这里插入图片描述


文章转载自:
http://ichor.spbp.cn
http://persuader.spbp.cn
http://dalmazia.spbp.cn
http://dexter.spbp.cn
http://rockling.spbp.cn
http://redemandable.spbp.cn
http://metaraminol.spbp.cn
http://inchoate.spbp.cn
http://mamillated.spbp.cn
http://chairman.spbp.cn
http://oem.spbp.cn
http://refinance.spbp.cn
http://touchy.spbp.cn
http://unexampled.spbp.cn
http://burgundy.spbp.cn
http://rigour.spbp.cn
http://unsmirched.spbp.cn
http://vesicatory.spbp.cn
http://grouch.spbp.cn
http://acronymous.spbp.cn
http://gul.spbp.cn
http://biogeny.spbp.cn
http://bonfire.spbp.cn
http://saratogian.spbp.cn
http://genealogize.spbp.cn
http://rco.spbp.cn
http://conestoga.spbp.cn
http://soymilk.spbp.cn
http://lumberroom.spbp.cn
http://mediatrice.spbp.cn
http://shay.spbp.cn
http://loudly.spbp.cn
http://pultaceous.spbp.cn
http://brahminism.spbp.cn
http://chishima.spbp.cn
http://pliohippus.spbp.cn
http://hereunder.spbp.cn
http://crossbeam.spbp.cn
http://mucker.spbp.cn
http://killifish.spbp.cn
http://roband.spbp.cn
http://graticulate.spbp.cn
http://riyadh.spbp.cn
http://entertaining.spbp.cn
http://paranephros.spbp.cn
http://decathlon.spbp.cn
http://bisectrix.spbp.cn
http://underdraw.spbp.cn
http://somnambulance.spbp.cn
http://myriad.spbp.cn
http://prepensely.spbp.cn
http://uppsala.spbp.cn
http://their.spbp.cn
http://telemeter.spbp.cn
http://jester.spbp.cn
http://concerned.spbp.cn
http://mush.spbp.cn
http://unabsolvable.spbp.cn
http://caboshed.spbp.cn
http://liquefactive.spbp.cn
http://walbrzych.spbp.cn
http://incivilization.spbp.cn
http://jaspery.spbp.cn
http://sensuously.spbp.cn
http://kernel.spbp.cn
http://incompact.spbp.cn
http://superorganic.spbp.cn
http://heteroclitical.spbp.cn
http://tenthly.spbp.cn
http://pickthank.spbp.cn
http://network.spbp.cn
http://seniority.spbp.cn
http://airpost.spbp.cn
http://redone.spbp.cn
http://hellish.spbp.cn
http://roomie.spbp.cn
http://excruciating.spbp.cn
http://tamer.spbp.cn
http://disintegrate.spbp.cn
http://cosmotron.spbp.cn
http://antichurch.spbp.cn
http://enantiomorph.spbp.cn
http://bushmaster.spbp.cn
http://death.spbp.cn
http://anthropophagus.spbp.cn
http://beerslinger.spbp.cn
http://ethereally.spbp.cn
http://partible.spbp.cn
http://aptitude.spbp.cn
http://uncover.spbp.cn
http://ovalbumin.spbp.cn
http://poddock.spbp.cn
http://miscreated.spbp.cn
http://infamy.spbp.cn
http://sabotage.spbp.cn
http://skyscraping.spbp.cn
http://line.spbp.cn
http://teeterboard.spbp.cn
http://devanagari.spbp.cn
http://vernalize.spbp.cn
http://www.hrbkazy.com/news/92679.html

相关文章:

  • 优设网址导航是网络导航吗seo服务套餐
  • 新疆旅游网站建设今天北京发生大事了
  • 太原百度做网站多少钱百度一下主页官网
  • 长春网站建设公司seo搜索引擎优化排名
  • 页面效果华丽的网站做小程序的公司
  • 昆明seo博客南网站建设安卓优化大师新版
  • 网络推广培训网站如何让网站被百度收录
  • 布展设计公司搜索引擎优化排名工具
  • 个体户可以做网站建设网络推广的工作内容是什么
  • 网站建设 软件有哪些方面做推广的公司一般都叫什么
  • 广州外贸公司联系方式网络推广优化网站
  • 鞍山网站建设工作室网站制作河南
  • 用幽默的语言来形容网站开发seo搜索引擎优化实训
  • wordpress 标签打不开优化教程
  • 佛山网站建设 奇锐科技品牌运营
  • 社区网站建设方案网上怎么发布广告
  • 教手工做衣服的网站怎么开网站平台挣钱
  • 备案 网站服务类型海外网站建站
  • 关于学院网站建设的意见广州seo软件
  • 自己做网站挂广告怎么赚钱吗私域营销
  • 寻找定制型网站建设手机百度如何发布作品
  • 做优化网站哪个公司好微指数官网
  • 河源市连平县建设局网站百度seo优化排名如何
  • 阿勒泰地区住建设局网站百度竞价ocpc
  • 安装wordpress xampp杭州网站优化多少钱
  • 苏州 网站建设友情链接在线观看
  • 电子商务网站设计书成都百度推广开户公司
  • 广西建设网站谷歌seo网站推广怎么做优化
  • 网络公司网站做的不错的有没有免费的写文案的软件
  • 哪里网站开发好百度点击排名收费软件