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

关注公众号阅读全文wordpressseo优化教程培训

关注公众号阅读全文wordpress,seo优化教程培训,商标注册查询中心,哪些网站做品牌特卖93 springboot整合reids之总体概述 总体概述 jedis-lettuce-RedisTemplate三者的联系 名称类型作用描述和其它的关系JedisRedis 客户端早期主流的 Java Redis 客户端,基于阻塞 I/O,同步操作可作为 RedisTemplate 的底层连接实现LettuceRedis 客户端基…

93 springboot整合reids之总体概述

总体概述

jedis-lettuce-RedisTemplate三者的联系

名称类型作用描述和其它的关系
JedisRedis 客户端早期主流的 Java Redis 客户端,基于阻塞 I/O,同步操作可作为 RedisTemplate 的底层连接实现
LettuceRedis 客户端基于 Netty、支持异步/响应式编程,更适合高并发场景也可作为 RedisTemplate 的底层连接实现
RedisTemplateSpring 封装类Spring Data Redis 提供的操作 Redis 的高级模板,简化开发底层依赖 Jedis 或 Lettuce

本地java连接Redis常见问题,小白注意

redis.conf配置文件中bind配置请注释掉

保护模式设置为no

linux系统的防火墙设置

redis服务器的ip地址和密码是否正确

忘记写访问redis服务端口号和auth密码

集成Jedis

略 跟着视频操作即可

集成lettuce

每次连接redis都要new一个对象非常消耗资源。

Jedis和Lettuce的区别

jedis和Lettuce都是Redis的客户端,它们都可以连接Redis服务器,但是在SpringBoot2.0之后默认都是使用的Lettuce这个客户端连控Redis服务器。因为当使用Jedis客户端连接Redis服务器时候,每个线程都要拿自己创建的Jedis实例去连接Redis客户端,当有很多个线程的时候,不仅开销大需要反复的创建关闭一个Jedis连接,而且也是线程不安全的,一个线程通过Jedis实例更改Redis服务器中的数据之后会影响另一个线程;

但是如果使用Lettuce这个客户端连接Redis服务器的时候,就不会出现上面的情况,Lettuce底层使用的是Netty.当有多个线程都需要连接Redis服务器的时候,可以保证只创建一个Lettuce连接,使所有的线程共享这一个Lettuce连接,这样可以减少创建关闭一个Lettuce连接时候的开销;而且这种方式也是线程安全的,不会出现一个线程通过Lettuce更改Redis服务器中的数据之后而影响另一个线程的情况;

集成RedisTemplate【推荐使用】

@Service
@Slf4j
public class OrderService {//设置Key的前缀public static final String ORDER_KEY = "ord:";// 有两个一个是系统默认的,一个是在Config中手动配置的,在这里由于@Resouce所以使用手动配置的@Resourceprivate RedisTemplate redisTemplate;public void addOrder(){ // 写操作 添加订单// 生成一个 1 到 1000(包含1和1000)之间的随机整数。int keyId = ThreadLocalRandom.current().nextInt(1000)+1;//生成一个随机的唯一标识符(UUID),并将它转换成字符串赋值给 serialNo。String serialNo = UUID.randomUUID().toString();String key = ORDER_KEY+keyId;String value = "京东订单"+serialNo;// redisTemplate.opsForValue()  获取操作 Redis 字符串(String)类型数据的操作接口redisTemplate.opsForValue().set(key,value);log.info("***key:{}",key);log.info("***value:{}",value);}public String getOrderById(Integer keyId){return redisTemplate.opsForValue().get(ORDER_KEY+keyId).toString();}
}

PS:如果是log日志报错可能是lombok版本太低 ,可以改成

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.26</version> <!-- 版本号可以根据需要调整 -->
    <scope>provided</scope>
</dependency>

还有就是Swagger UI无法正常显示可能是因为Springfox 2.9.2Spring Boot版本不兼容不兼容导致的依赖注入失败

删除旧版本的 Springfox 依赖 用 springdoc-openapi

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.1.0</version>
</dependency>
 

@RestController
@Slf4j
@Tag(name = "订单接口", description = "订单相关操作")
public class OrderController {@Resourceprivate OrderService orderService;@Operation(summary = "获取订单", description = "根据订单ID查询订单详情")@RequestMapping(value="order/add",method = RequestMethod.POST)public void addOrder(){orderService.addOrder();}@Operation(summary = "获取订单", description = "根据订单ID查询订单详情")@RequestMapping(value="order/{keyId}",method = RequestMethod.GET)public void getOrderById(@PathVariable Integer keyId){orderService.getOrderById(keyId);}
}

访问 Swagger UI则可正常显示

reids中文显示乱码

redis-cli -a 密码 --raw

 为什么使用默认的RedisTemplate会导致redis数据库乱码?

Java 会使用 JDK 默认的序列化机制,将对象转换为字节流。

RedisConfig中手动新建的RedisTemplate类的注释 

@Configuration
public class RedisConfig {/*** redis序列化的工具配置类,下面这个请一定开启配置* 127.0.0.1:6379> keys ** 1) "ord:102"  序列化过* 2) "\xac\xed\x00\x05t\x00\aord:102"   野生,没有序列化过* this.redisTemplate.opsForValue(); //提供了操作string类型的所有方法* this.redisTemplate.opsForList(); // 提供了操作list类型的所有方法* this.redisTemplate.opsForSet(); //提供了操作set的所有方法* this.redisTemplate.opsForHash(); //提供了操作hash表的所有方法* this.redisTemplate.opsForZSet(); //提供了操作zset的所有方法* @param lettuceConnectionFactory* @return** LettuceConnectionFactory 创建和管理 Redis 连接,作为 RedisTemplate 的底层连接提供者。*/@Beanpublic RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory){// 在这个方法里手动创建一个新的 RedisTemplate 实例RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();// 将 Redis 的“连接方式”交给 RedisTemplate,让它能正确地连上 Redis 服务器。redisTemplate.setConnectionFactory(lettuceConnectionFactory);//设置key序列化方式string Redis 是一个二进制存储系统,将其转化为字符串redisTemplate.setKeySerializer(new StringRedisSerializer());//设置value的序列化方式json,使用GenericJackson2JsonRedisSerializer替换默认序列化// 将 Redis 中的 value 序列化为 JSON 格式进行存储,并在读取时反序列化为 Java 对象。redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());// 确保 RedisTemplate 的所有配置都已经设置完成,并进行必要的初始化。redisTemplate.afterPropertiesSet();return redisTemplate;}}

为了保证OrderService中调用的是我们自定义的redisTemplate,在OrderService这么调用

@Resource(name="redisTemplate")
private RedisTemplate<String, Object> redisTemplate;

http://www.dtcms.com/wzjs/192654.html

相关文章:

  • 如何开发游戏重庆seo排名收费
  • 网页设计制作的流程seo代理
  • 仿制网站侵权吗武汉网站seo服务
  • 开公司做网站seo入门教程
  • 做产品类网站温州网站优化推广方案
  • 广州哪家公司做网站中国楼市最新消息
  • 有没有网站做胡兼职株洲企业seo优化
  • 项目四网站建设内容qq群引流推广软件
  • 贵阳58同城做网站公司百度指数趋势
  • wordpress删除站点推广平台网站热狗网
  • wordpress轻社区模板跟我学seo从入门到精通
  • 免费申请注册网站今天的新闻内容
  • 武汉网页设计培训班seo可以提升企业网站的
  • 企业网站实验报告朝阳网站建设
  • 麒麟区政府建设局门户网站室内设计师培训班学费多少
  • 网站首页 flash全网营销平台
  • 装修公司排名 装饰设计seo怎么推广
  • 中英文企业网站怎么做百度推广四川成都地区服务中心
  • seo 成功网站网页游戏推广平台
  • 怎么做网站步骤宁波seo高级方法
  • 淘宝开店网站怎么做seo是什么部门
  • 嘉兴做网站多少钱windows优化大师破解版
  • 中国酒店设计网seo优化报价公司
  • 高中生做那个的网站网站自动提交收录
  • 怎样做投资理财网站公司网站
  • 厦门市集美区建设局网站seo站长工具平台
  • 企点qq四川旅游seo整站优化
  • cms免费源码广州seo优化公司
  • 前几年做那些网站能致富seo搜索排名
  • 个人简历ppt模板免费下载网站结构优化的内容和方法