redis lua 脚本运行工具

测试环境中,redis使用的是阿里云的rds,目前是没有权限运行redis-cli这种命令。如果对于lua长脚本,官方是推荐使用redis-cli去加载script然后运行的。 针对这样的环境,如果我们需要调试复杂或有不少逻辑的lua脚本,怎么调试? 一是直接用代码,调用端改代码调试,因为现在改代码不太方便,每次都要部署测试环境。 因此在想有没有更容易的方式,我们是有权限登录redis的,只是没有redis-cli的执行命令而已,因此我们还可以选择eval script …的命令去执行。 但是script脚本很长,这时候我们可以借助压缩工具去处理。 其实说来说去,就是得找个lua脚本的压缩工具。 工具1:Lua 压缩器 工具2:vscode + Lua Minify 插件

十二月 6, 2021 · nobject

Golang 多条件下的switch

在业务场景下,如果有多条件,怎么处理? 比如条件isModifyName是否修改姓名,条件isModifyAge是否修改姓名。 我们可以使用if else来拼凑出4个条件,那么怎么使用switch case呢,switch case是比if else效率高的,可读性也更好,所以在条件多于2个的时候,会优先选择switch case。 方式一: case相当于一个if 1 2 3 4 5 6 7 8 9 10 11 12 13 isModifyName := 1 isModifyAge := 1 switch { case isModifyName == 0 && isModifyAge == 0: fmt.Println("all not modify") case isModifyName == 1 && isModifyAge == 1: fmt.Println("all modify") case isModifyName == 0 && isModifyAge == 1: fmt.Println("age modify") case isModifyName == 1 && isModifyAge == 0: fmt....

十一月 25, 2021 · nobject

Golang 将int转换成bool类型

没有三目运算符的golang,有时候怎么处理才优雅简洁。最简单的方法就是if…else…判断 1 2 3 testValue := 1 testBool := test-1 == 0 fmt.Println(testBool)

十一月 24, 2021 · nobject

Golang Duration类型转换成int64

我有个习惯,就是把一些比较固定的东西会写在常量里,比如一些key的过期时间,就会定义constant keyExpireDuration = 10*time.Second, 有一天,需要将这个过期时间戳返回给前端,然后我就没脑的使用了time.now.unix() + int64(xxx),然后就爆了 Duration类型是time包里定义的一个类型,实际上的类型是int64。 我们从time包定义的常量来分析 1 2 3 4 5 6 7 8 const ( Nanosecond Duration = 1 Microsecond = 1000 * Nanosecond Millisecond = 1000 * Microsecond Second = 1000 * Millisecond Minute = 60 * Second Hour = 60 * Minute ) 可以发现duration最小的单位是ns, 我们代码里如果使用的是time.Second,实际上对应的duration的值是纳秒为单位的。 当我们如果进行运算的时候,就得注意了。比如简单的time.now.unix() + int64(xxx)相加,最后导致的前面一个是秒级的时间戳, 而后面一个是纳秒级的数字,这相加导致最终的结果爆掉了。 正确的做法就是需要相加的比如是10 * time.Second,我们需要先除以time.Second来保证这是秒数,而不是纳秒数 这就是小小的时间相加可能导致的问题。 1 2 expireDuration := 10 * time.Second expireTime := time.now.unix() + int64(expireTime/time....

十一月 17, 2021 · nobject

Redis 使用 lua

最近,业务代码上大量使用redis,每一次操作会对多个key进行操作,而有些key可能在别的操作中也会同一时刻被改动,所以为了保证中途不被别的修改,采用了lua脚本的方式 为什么不用redis事务 众所周知,redis自己也有一套事务机制,但redis的原子性实现是类似乐观锁的机制,如果在事务中的命令修改的key被其他事务或命令修改,则会执行失败回滚。 再加上redis本身事务并未很好的实现ACID,也导致redis的事务使用的场景一直不是很多。以后会有专门的文章书写redis的事务 与pipeline的区别 一般管道的使用场景是多个命令无依赖,或者批量操作一批key。使用pipeline就可以节省指令来回需要的rrt redis lua脚本使用方式 lua脚本是能保证隔离性的,即在执行脚本的过程中,是没有其他指令可以执行的,而且还可以进行逻辑的判断,因此大多数情况下,我们会用lua脚本的方式替代事务。 参考文档 https://redis.io/topics/transactions https://redis.io/topics/pipelining https://redis.io/commands/eval

十一月 17, 2021 · nobject

Go 语言开发设计指北

本文转载:https://www.debuginn.cn/6832.html Go 语言是一种强类型、编译型的语言,在开发过程中,代码规范是尤为重要的,一个小小的失误可能会带来严重的事故,拥有一个良好的 Go 语言开发习惯是尤为重要的,遵守开发规范便于维护、便于阅读理解和增加系统的健壮性。 以下是我们项目组开发规范加上自己开发遇到的问题及补充,希望对你有所帮助: 注:我们将以下约束分为三个等级,分别是:【强制】 、【推荐】 、【参考】 。 Go 编码相关 【强制】 代码风格规范遵循 go 官方标准:CodeReviewComments,请使用官方golint lint 进行风格静态分析; 【强制】 代码格式规范依照gofmt,请安装相关 IDE 插件,在保存代码或者编译时,自动将源码通过gofmt做格式化处理,保证团队代码格式一致(比如空格,递进等) 【强制】 业务处理代码中不能开goroutine,此举会导致goroutine数量不可控,容易引起系统雪崩,如果需要启用goroutine做异步处理,请在初始化时启用固定数量goroutine,通过channel和业务处理代码交互,初始化goroutine的函数,原则上应该从main函数入口处明确的调用: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 func crond() { defer func() { if err := recover(); err != nil { // dump stack & log } }() // do something } func main() { // init system go crond() go crond2() // handlers } 【强制】 异步开启goroutine的地方(如各种cronder),需要在最顶层增加recover(),捕捉panic,避免个别cronder出错导致整体退出:...

十一月 1, 2021 · nobject

Redis Zset 有序集合

zset是redis中常用的数据结构,一般使用场景是有序集合,排行榜等有序的需求我们会考虑使用。 背景: 最近也是做了相关的需求,用户发动态,将最新动态中的图片,视频或音频资源收集起来,列表中会展示用户最新4条动态的资源缩略图。因为动态还有个审核,所以 一般采集的时候会按审核的时间点采集,但展示却得按照创建时间展示。因此采用了zset的方案,score的值为创建时间,当审核完成时,会将该动态的资源信息以member存储至 zset中,取的时候,按照score(创建时间)由大到小读取 方案实施 存储,简单使用zadd命令,将动态资源信息(一个结构体,json格式化后以字符串形式)存储至zset中,createdAt为score 1 2 3 4 # ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN # 将一个或多个成员元素及其分数值加入到有序集当中 # ZADD file fileInfo createdAt -> ZADD file "{url:'xxx.jpg',type:1}" 1635661958 维持zset大小,因为只需要取最新4条动态的资源,因此,对于旧的资源信息,可以删除4名开外的动态信息 1 2 3 4 5 6 # ZREMRANGEBYRANK key start stop # 移除有序集中,指定排名(rank)区间内的所有成员。 -> ZRemRangeByRank file 0 -5 # 因为默认是按从小到大排序的,我们如果要取最新的4条动态,需要从排名最小的元素开始删除, # 0代表排名最旧的,排最前的,-5表示排名倒数第5的, # 当zset中的元素超过4时,-5其实就相当于0,所以整个语句相当于删除第4名之后的动态资源信息 获取从大到小顺序的最新4条动态 1 2 3 # ZREVRANGE key start stop [WITHSCORES] # 按分数值递减(从大到小)来排列 -> ZREVRANGE file 0 3 不足之处 因为member的值中有url,有类型等信息,zset的member的长度是过大的,这就导致了并不能用上quickList,只能使用上skipList...

十月 31, 2021 · nobject

奇怪的梦 - 考研

清晨时分,做了一个让人诡异的梦。梦的内容很简单,却似曾相识,竟然是曾经做过的一个梦的续集,连做梦都开始有自动续的功能的么。 说说上次的梦吧,时间久远,已无法从脑海中记起多少细节,只能大概的描述下梦境的内容。 随着考研大军的越来越壮大,我也不免俗地想要成为其中的一员,在经过努力的准备后, 也考上了一所大学,这所大学名字叫上海长吾大学,可能是因为没有其他更好选择吧, 因为这是所985大学,也没挣扎,就选了这个大学,就这么愉快的收到这个大学的录取通知书了。 也感叹自己的努力没有白费。 上次的梦境是我经过努力拿到了一所985高校的录取通知书。而今天的梦境却从这时接着开始,很神奇,这梦隔着至少也几个月了吧。 我拿到录取通知书后,兴奋不已,彻夜难眠,临近去学校的日子,问了一些朋友,问了他知道这所高校么?却无一听闻,我很紧张,想从互联网上 找寻到相关的信息,却有点失望,却找不到痕迹。偶尔在一份老报纸上看到标题为『我的母校,上海长吾大学,一所有点特别的学校』, 上海长吾大学,一所以上海为名,却不在上海的学校,在西安这个古老有历史的城市下创办的一所民办学校,在历史的长河中生存下来,是一所985,211高校,在历史人文专业上有一点的造诣。 而除了这些信息,我却无从考证,我也即将开始踏上鲜有人知晓的大学的求学之路。 梦醒了,我有些恍惚,我开始百度,事实上也确实找不到任何关于这所大学的信息。 梦是幻境,给我制造了假象,在假象里,在虚虚实实里,我又能知前途如何。长路漫漫,奋力前行,我却听到了梦碎了的声音。

十月 31, 2021 · nobject

Mac OS下常备软件

基本软件 Homebrew chrome V2rayU,世界更精彩 iterm2,最好用的terminal ohmyzsh,最好用的shell zsh语法高亮插件,必备 zsh自动补全插件,必备 清理app git工具 Command Line Tools(需登录AppleID) Magnet alfred,听说是神器 工作软件 vscode,最好用的编辑器 golang postman 切换host ssh连接工具 最好用的redis工具

十月 31, 2021 · nobject

Golang 学习资料汇总,从入门到放弃

入门 go的一些使用小例子 无闻讲师的基础视频 go入门指南 go web基础 effective go 进阶 go内存模型 go程序诊断 标准库 标准库文档 标准库包的使用例子 go语言标准库 书籍或阅读清单 go开发者阅读清单 深入解析Go go语言编程之旅 go语法树入门 go语言设计-欧长坤 gopher博客推荐 draveness,go底层实现原理,讲得很详细 鸟窝,rpcx作者博客,go并发编程专栏 煎鱼大大,可以关注下公众号 李文周的博客 曹春晖的golang笔记 峰云golang专栏 大彬的blog gophers推荐清单

十月 26, 2021 · nobject

衰的人生,如何振奋

这些年,慢慢地开始抑郁。时常想走出困境,却又不那么容易走出。 曾经,有一个至好朋友,当他离开后,就觉得整个世界都索然无味;曾经,病倒在床住院半个多月,只有孤单陪伴;曾经,许多美好的事情都想努力做好,却永远也做不好。慢慢地,也许不再有自信,不再有朋友,不再有关心,然后开始抑郁。 抑郁这个词是被用烂了的,经常听人说他们抑郁,可是他们真得抑郁么?我也不清楚,我也经常说我抑郁,但我却从未想过自杀,即使有时候真得特别压抑,就是彻夜的未眠,就是毫无心情的自我漫游,做着一些毫无意义重复的事情。我觉得这是情感上的孤独造就的,让自己无所依靠,是一连串的失败一连串的所谓的衰导致自己的崩溃。 谈谈最近的衰,想离职,被上级知道,打了个C,对,就是绩效C,这个怎么说呢,其实不算是衰,但也是不太让人开心的事;找工作被放鸽子,一个半小时后,问我是否还在,可能这也不算衰,只是没想到对方是这种人罢了;脚上长了鸡眼,越来越疼,选择了药除,结果流程长到要几个月,长时间的脚不舒服;骑自行车因为路上消防栓开着导致滑胎,摔的四肢全破,两支手碗只能提起一杯茶的力量;打印学历证书,回家了发现学历证书原件店员并没有给我。有些谈不上衰,可能自己也不太注意,才会让人觉得倒霉。 但是,谁不想有点舒心的事呢,谁喜欢一个月要进10来次医院呢,这几个月可能是进医院次数最多的吧。有时候静静的抒发出来,可能会更好受点吧。因为这些太过负面,和朋友说多了,也都是负能量,可能他们也并不愿意听,而只能自己听吧。所有的衰意,希望能够随时间而淡没。我也想做个快乐的人,请给我个机会。 当有时候精神昂扬的苗头初起,请给我点掌声,让我也能激情澎湃一回。

十月 9, 2021 · nobject

Interview_algorithm

排序算法 树

三月 5, 2021 · nobject