《3.5.1 实现定时消息通知》
- 9 20 简单定时任务通知:利用redis的keyspace notifications
开启办法:在配置文件中把notify-keyspace-events修改为 “Ex” (键过期事件)
我的总结: 用Spring的@Scheduled(需要用@EnableScheduling修饰Springboot的主程序)周期性set带过期时间的键, 这里它相当于消息发布者。而实现了KeyExpirationEventMessageListener的类会在键过期时调用onMessage方法, 这里它相当于listener。代码地址
《3.5.2 数据计数/订单号生成》
- ID生成要求:全局唯一、递增、效率高
- 主键用UUID生成,则不利于水平分表?
- 利用Redis的订单号生成策略:
- snowflake(雪花算法)
《【技术分享】【考拉海购】缓存应用实践分享》
-
27 40 广告位信息,可由nginx通过Lua脚本直接访问Redis得到,未经过java后台
-
31 30 用配置中心代替配置文件 Nacos
-
36 20 数据同步: Redis发布订阅机制/ MQ消息传递
-
71 50 缓存与数据库不一致的经典场景:12306显示有票,下单被告知没有了
-
84 40+ 数据异步同步工具Canal:
-
108 20 生产环境不要调
keys *
, 因为时间复杂度为O(N) -
114 05 利用nginx容错机制(故障转移),实现不停机上线
-
116分 为什么Redis处理大部分命令用的是单线程,而比Java的多线程快?答:
-
- redis的操作都在内存,而Java的线程因为要请求http,sql等,经常阻塞
-
- Redis用的是自定义的RESP协议,比http协议简略
-
- Redis可以用pipeline : send multiple commands at once, saving on round trip time. (from https://redis.io/topics/pipelining)
-
129 10 pipeline的使用场景
-
old 《3.4.1 大型互联网高并发缓存架构》
-
动静分离:静态图片等可以使用NAS等共享存储方案,或者linux的文件同步机制rsync:
-
七牛云有免费体验CDN
-
当使用CDN,可以使用自己的域名,但其实是使用cname进行了域名跳转到了CDN的域名
-
红薯J2Cache,Java两级缓存框架:
-
浏览器缓存与http的304状态码
《3.4.2 网易后端架构中缓存方面设计》
- 康威定律:
- redis端口不要对外网开放