TWind 的黑马点评随笔

TWind 的黑马点评随笔

​ 目前是把黑马点评的技术部分完全做完了,不能说吃得饱饱,也算个半饱吧。

​ 黑马点评严格来说不算项目,因为它给的前端过于垃圾,内容又重在Redis,所以称之为Redis练习貌似跟贴切。

​ 尽管如此,这个项目仍然非常适合新手入门,亮点尤其在带你一步步解决抢优惠卷带来的一系列线程问题展开,从表层到深入,非常不错。

​ 但是,对于异步编程,集群,分布式等内容建议还是移步spring cloud,这个是专业的,黑马点评更多注重于Redis的运用(后面的关于签到,位置,推文这些建议还是别看了,这已经脱离了初衷)

​ 后面应该会写一些关于Redis消息队列的文章


坑合集

复制代码
### 坑1

首当其冲的是黑马的构思前端,登录时无法选中阅读协议!!!

解决办法是到nginx里面的前端代码手动修改,把login.html里面的

java 复制代码
login(){
if( ! this.radio){
 this.$message.error("请先确认阅读用户协议!");
 return
}

惊叹号去掉!

坑2

紧随其后的是redis序列化器

你大可直接用黑马视频用的自带的stringRedisTemplate,但是你这样做的话就得在使用Map互转Bean时尽享那一串的构思修复代码

这里建议直接一步到位,用Jackson2JsonRedisSerializer作为所有的序列化反序列化器

java 复制代码
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
log.info("开始创建redis模板对象...");

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());  // 注册 JavaTimeModule 处理 LocalDateTime
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);  // 禁用时间戳格式

Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer =
      new Jackson2JsonRedisSerializer<>(Object.class);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
return redisTemplate;
}

**redisTemplate.setKeySerializer(new StringRedisSerializer());**这里不用jackson的原因是用了key会乱码(虽然不影响就是了)

注意!要用的话要用一套(dubug了好久),redis默认的是string类的序列化器!远古java版本的LocalDateTime有兼容性问题!

坑3

你可能在传参数到Lua脚本时发现Lua接受到的始终为nil,这是因为我们用的是:

java 复制代码
@Autowired
private RedisTemplat redisTemplate;

序列化出了问题:Lua脚本不知道传进去的数据是什么类型!(Redis是知道的但它没给Lua说),得手动指定:

java 复制代码
@Autowired
private RedisTemplate<String,String> redisTemplate;

这样就完美解决

坑4

严格来说不算坑,是自己学艺不精...

同时看到了一篇错误的CSDN博客...

就是

java 复制代码
stringRedisTemplate.opsForStream().read

它对应的是消费者组操作中的XREADGROUP ,是既可以访问消息队列也可以访问pending-list队列的!

取决于其ID

所以stringRedisTemplate.opsForStream().pending的意义在哪呢


总结

完结撒花 🎉 🎉 🎉

接下来就是写几篇博客巩固一下...

相关推荐
axng pmje8 分钟前
Java语法进阶
java·开发语言·jvm
rKWP8gKv720 分钟前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫22 分钟前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_4352879222 分钟前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
小江的记录本24 分钟前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
yaoxin5211231 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
极客先躯3 小时前
高级java每日一道面试题-2025年11月24日-容器与虚拟化题[Dockerj]-runc 的作用是什么?
java·oci 的命令行工具·最小可用·无守护进程·完全标准·创建容器的核心流程·runc 核心职责思维导图
用户60648767188963 小时前
AI 抢不走的技能:用 Claude API 构建自动化工作流实战
java
我命由我123453 小时前
Kotlin 开发 - lateinit 关键字
android·java·开发语言·kotlin·android studio·android-studio·android runtime
aXin_ya3 小时前
微服务第八天 Sentinel 四种分布式事务模式
java·数据库·微服务