不要瞎写!不要瞎写!不要瞎写!
前几天看自己一个关于用户信息的代码,突然发现组里一个人加了一段与之并列的逻辑,看着像是重构的方法,心想这个模块上线才不到一个月,也没发现有什么问题,为什么要重新搞?于是去问提交的人原因,他的意思是原来有两点问题,需要优化,现在新产品用户量还不高,等高了可能有问题,我觉得有必要记下来,聊一下这个cache需要怎么更新 数据结构 数据其实就是一个用户信息表,包含用户id,用户名,各种用户资料之类的,包含一个DB表,DB之前会有一个redis用于cache信息。很典型的cache方式 原cache-set流程(双删更新) 删除redis中对应修改用户key的数据 update用户信息表 delay 1s左右再次删除对应用户key的数据 请求用户数据时判断cache存在,则直接返回 请求用户数据时判断cache不存在,读db 读db后将数据json_encode到字符串set到redis中 返回db结果 新cache-set流程 update用户信息表 订阅用户信息表binlog 解析更新内容,修改redis中对应用户的hash结果中的修改内容的字段key 请求用户数据判断cache存在
因为最近需要做一个滑动窗口式的限流器,本着不要重复造轮子的原则找一些开源的,但找了半天发现都是些单机版的,没办法就自己搞一个吧 不多介绍,就是一个基于redis的sorted-set写的滑动窗口式的频率控制器,可以支持多种限流策略组合,适合类似于push这类的需要频控的业务 Just show the code https://github.com/elangx/redis-ratelimiter
我的博客之前一直是用的jekyll,一个很简单的静态博客生成系统,好处是真的很简单,没有评论、热度这类动态数据,同时也不需要数据库,用运行环境,搞个nginx指一下webroot就行,也有不少主题插件。不需要关心有没有人攻击、数据泄露、篡改什么的,但同时也一直有个问题存在,那就是更新有点麻烦,需要在本地打包手动上传到自己的vps上,搞的过程很像一次手动上线,比较繁琐,前一段时间正好换了vps,正好重新搞一套。 从头说 服务器选择 放在境内还是境外?境内的话两个选择,一是我手里有个阿里云的ces,2核2G,到是正好能用;二是放到nas里,好处是本地部署,不用占用云服务器,但是我的域名在Godady,如果转到境内的话还需要转到国内域名商,实名认证,然后还得备案,虽然我之前有过备案经历(当初备案还要用一个特殊的背景布自拍……),但还是觉得太麻烦,而且不想网站下面写个IPC备案这样的文案,太丑了;于是觉得先放境外,之前的『搬瓦匠』IP因为我在上面搭了个自用的梯子结果ip被封了,而且『搬瓦匠』换IP得7美元,而且换完还不一定是通的,刚好也快到期了,就准备换个服务商,找个名气小一点的,找来找去决定
平时我们在调一些rpc/db数据或获取一些远程setting时,常常会把他们保存在本地cache里,但每次又需要考虑存本地全局变量还是cache组件,还要考虑序列化反序列化,保存时间,数据结构调整之类的事,导致一些类似的工作会搞好几遍。于是我就搞了这个duration_cache的东西,他只需要在你原先读取数据的基础上调整一行代码就可以帮你把数据保存起来,过期后再重新获取,一般是不需要考虑结构调整,也不自己处理过期,使用了泛型,所以支持所有类型数据。 具体本地缓存用的freecache,因为它支持单key过期时间,同时使用了zero-gc的策略,保证了性能,不过也不时动态扩容;另外有个点是每个key大小不能大于千分之一的总容量 另外使用了singleflight来保证不会有并发更新的问题 使用方法很简单: 原代码示例: cacheRs, err := cache.GetUser(ctx, 1234) if err == nil && cacheRs != nil { return cacheRs, nil } row, err := db.GetUser(ctx, 1234) if
现状 graph TB WIFI(交换机+WIFI AP) WIFI-->TV LAN1 --> WIFI optical-modem(光猫) --> ikuai WIFI-->LAN2 LAN2-->nas LAN2 --> debian12 WIFI --> cell1(手机1) WIFI --> cell2(手机2) WIFI --> computer1(电脑1) WIFI --> computer2(电脑2) WIFI --> Switch(Switch游戏机) subgraph PVE ikuai(ikuai主路由) --> openwrt(openwrt旁路由) openwrt-->LAN1(LAN1) LAN2 subgraph debian12 subgraph docker nginx bolg end end subgraph nas qbittorrent(qbittorent下载器) jellyfin(jellyfin视频服务器) nastools flaresolverr end
eLangX