- 博客(39)
- 资源 (2)
- 收藏
- 关注
原创 redis-Modules(TairHash)
TairHash是基于redis module开发的一种hash数据结构,和redis原生的hash数据结构相比,TairHash不但和原生hash一样具有丰富的数据接口和高性能,还可以为field设置过期时间和版本,这极大的提高了hash数据结构的灵活性,在很多场景下可以大大的简化业务开发。TairHash提供active expire机制,即使field在过期后没有被访问也可以被主动删除,释放内存。剩下的有中文的介绍,有兴趣可以研究下哈。
2022-09-05 21:33:43 943 1
原创 线上问题排查-golang使用json进行对象copy
第一步操作完成,经验证机器可以正常运行,借助gops导出cpu运行图和内存消耗情况执行上述两个命令后,其会生成文件在tmp目录下内存的火焰图如下cpu的火焰图如下通过对火焰图的分析,可以明显的看到json.Marshal 和 json.Unmarshal 有明显的占用问题。跟着火焰图去找寻调用此处的该方法,定位到此处就不列出runtime.Context对象的具体情况了,你可以理解为里面多处指针,多处切片。反正就是结构体很大 【PS:改天针对大结构体出个压测结果】发现问题后更换如下代码进
2022-06-19 16:21:53 417
原创 golang连接redis集群遇见的坑
背景:redis集群执行lua脚本时不同于单机情况,lua脚本在执行时需要确保key在同一个node节点上,换句话说也就是需要保证 slot=crc16%16384,通过对key进行hash运算,其slot会分布在同一个node节点所属范围。解决思路:为了使key都落在一个node节点上可以通过添加 {} hashTag来实现。原理:相同的hashtag被分配到相同的节点,相同的槽。hash算法采用crc16。crc16算法为redis自己封装的,源码位置:https://git
2022-05-27 09:00:00 1689
原创 Mac FTP 安装与使用
Mac FTP 安装与使用安装ftp1、brew install telnet 2、brew install inetutils 3、brew link --overwrite inetutils使用ftp1. 登录#方式一$ ftpftp> open server-ip#方式二$ ftp server-ip以上命令之后,按提示输入用户名和密码。当出现以下日志,表示连接成功1、Connected to server-ip2、220 (vsFTPd 2.2.2)3、
2022-05-25 21:14:50 3228 1
原创 linux查询指定日期的文件并删除
1.需求按时间删除 kafka 产生的日志2.查看 /tmp/kafka-logs目录cd /tmp/kafka-logsls3.使用find命令按时间筛选find 参数说明-amin -n: 最后一次访问发生在 n分钟 之内-amin n: 最后一次访问发生在距离当前时间 n分钟 至 (n+1)分钟-amin +n: 最后一次访问发生在 (n+1)分钟 之外-atime -n: 最后一次访问发生在 n天 之内-atime n: 最后一次访问发生在 n天 至 (n+1)天 -
2022-05-25 09:00:00 3603 1
原创 linux查询磁盘使用情况
查询磁盘空间使用率使用 df 命令列出文件系统的整体磁盘使用量df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息语法: df [-ahikHTm] [目录或文件名]选项与参数:-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;-k :以 KBytes 的容量显示各文件系统;-m :以 MBytes 的容量显示各文件系统;-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显
2022-05-24 11:56:03 13368
原创 Redis的lua脚本
本文已参与[新人创作礼]活动,一起开启掘金创作之路。一、在redis使用lua脚本的好处减少网络开销。可以将多个请求通过脚本的形式一次发送,减少网络时延。原子操作。Redis会将整个脚本作为一个整体执行,中间不会被其他请求插入。因此在脚本运行过程中无需担心会出现竞态条件,无需使用事务。复用。客户端发送的脚本会永久存在redis中,这样其他客户端可以复用这一脚本,而不需要使用代码完成相同的逻辑。二、在redis中使用lua脚本//返回redis中KEYS[1] 的值 retrun redis
2022-04-29 19:45:46 23335
原创 Go 各种数据库连接字符串汇总
各种数据库的连接字符串的连接格式(一般叫做database source name, 简称DSN)是不同的,本文汇总了各个数据库驱动程序的字符串连接方式。一、关系型数据库1.1 Mysql[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...¶mN=valueN]// user@unix(/path/to/socket)/dbname// root:pw@unix(/tmp/mysql.sock)/my.
2022-02-25 18:06:08 1321 2
原创 Redis学习(14)--Info指令
Info命令Info指令显示的信息繁多,分为9大块。1.Server: 服务器运行的环境参数2.Clients: 客户端相关信息3.Memory: 服务器运行内存统计数据4.Persistence: 持久化信息5.Stats: 通用统计数据6.Replication: 主从复制相关信息7.CPU: CPU使用情况8.Cluster: 集群情况9.KeySpace: 键值对统计数量信息# 获取所有信息> info # 获取内存相关信息> info memory#
2021-09-30 10:02:59 323
原创 Redis学习(13)--消息队列相关
小道消息-PubSub消息多播消息多播允许生产者只生产一次消息,由中间件负责将消息复制到多个消息队列,每个消息队列由相应的消费组进行消费。PubSub 常见指令> subscribe codehole.image codehole.text codehole.blog #同时订阅三个主题,会有三条订阅成功反馈消息1) "subscribe"2) "codehole.image"3) (integer) 11) "subscribe"2) "codehole.text"3) (i
2021-09-28 10:11:41 266
原创 Redis原理(3)--持久化
Redis的持久化机制有两种,第一种是快照(RDB),第二种是AOF日志。快照是一次全量备份,AOF日志是连续的增量备份。快照是内存数据中的二进制序列化形式,在存储上非常紧凑,而AOF日志记录的是内存数据修改的指令记录文本。AOF日志在长期的运行过程中国会变得无比庞大,数据库重启时需要加载AOF日志进行指令重放,这个过程就会无比漫长,所以要定期进行AOF重写,给AOF日志进行瘦身。快照原理Redis使用操作系统的多进程COW(Cpoy On Write)机制来实现快照持久化。fork(多进程).
2021-09-14 10:00:41 97
原创 Reids原理(2)-通信协议
Redis将所有数据都放在内存中,用一个单线程对外提供服务,单个节点在跑满一个CPU核心的情况下可以达到了10w/s的超高QPS。RESPRESP是序列化协议(Reids Serialization Protocol)的简写。它是一种直观的文本协议,优势在于实现过程异常简单,解析性能极好。Redis协议将传输的数据结构分为5种最小单元类型,单元结束时统一加上回车换行符号\r\n。单行字符串以"+"符号开头多行字符串以"$"符号开头,后跟字符串长度整数值以":"符号开头,后跟整数的字符串.
2021-09-10 09:53:06 102
原创 Redis原理(1)-线程IO模型
线程IO模型Redis是个单线程程序Redis单线程为什么还能这么快?因为它的所有数据都在内存中,所有的运算都是内存级别的运算。正因为Redis是单线程,所以要小心使用Redis指令,对于那些时间复杂度为O(n)级别的指令,一定要谨慎使用,否则一不小心就可能会导致Redis卡顿。Redis既然是单线程,如何能处理那么多的并发客户端连接?采用了多路复用,select 系列的事件轮询API,采用非阻塞IO非阻塞IO当我们调用套接字的读写方法,默认它们是阻塞的,比如read方法
2021-09-10 09:39:48 113
原创 Redis学习(12)-GeoHash
近水楼台–GeoHashreids 在3.2版本以后增加了地理位置Geo模块GeoHash算法业界比较通用的地理位置距离排序算法是GeoHash算法,Redis也使用GeoHash算法。GeoHash算法将二维的经纬度数据映射到一维的整数,这样所有的元素都将挂载到一条线上,距离靠近的二维坐标映射到一维后的点之间的距离也会很接近。可以设想一下切蛋糕法。设想一个正方形的蛋糕摆在你面前,两刀下去均分分成四块小正方形,这四个小正方形可以分别标记为00、01、10、11共四个二进制整数。然后对每一个
2021-09-03 10:29:22 165
原创 Redis学习(11)--限流相关
断尾求生–简单限流背景:定义一个简单接口,表示系统要限定用户的某个行为在指定的时间里只能允许发生N次。# 指定用户 user_id 的某个行为 action_key 在特定的时间内 period 只允许发生最多的次数 max_countdef is_action_allowed(user_id,action_key,period,max_count): return true# 调用这个接口,一分钟内只允许最多回复5个帖子can_reply = is_action_allowed("laoq
2021-09-03 09:31:28 122
原创 Redis学习(10)--布隆过滤器
层峦叠嶂-布隆过滤器 >=4.0背景: 讲个场景,比如我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,而他每次推荐都要去重,而如果用set结构去实现,则需要浪费的空间很大很大。布隆过滤器(Bloom Filter)就是为了专门解决这个问题的额,它相当于一个不怎么精确的set结构,当你使用它的contains方法判断某个对象是否存在时,他可能会误判。即当布隆过滤器说某个值存在时,这个值可能不存在;当它说某个值不存在时,那就肯定不存在。使用方法redis4.0之后提供了布隆过滤器插
2021-08-25 12:45:03 107
原创 Redis学习(9)--HyperLogLog
四两拔千斤-HyperLogLog >=2.8.9背景: 统计某一个爆款页面的UV(访问人次),可能会有几千万个,如果使用set则需要一个很大的Set集合进行统计,会非常浪费空间。Redis提供了HyperLogLog数据结构来解决这种统计问题.HyperLogLog提供不精确的去重计数方案,虽然不精确,但也不是非常离谱,标准误差是0.81%.使用方法> pfadd codehole user1 # 与set集合的sadd用法一样,来一个用户ID,就将用户ID塞进去(integer)
2021-08-18 12:48:08 190
原创 Redis学习(8)--位图
位图Redis的位图不是特殊的数据结构,它的内容其实就是普通的字符串,也就是byte数组。我们可以使用普通的get/set直接获取和设置整个位图的内容,也可以使用位图操作getbit/setbit等将byte数组看成"位数组"来处理。Python获取字符的ASCII码的二进制:>>> bin(ord('h'))'0b1101000'零存零取,整存零取,整存整取,零存整取setbit key 1 1 #将key的第二位设置为1get key #整体获取key的值
2021-08-12 13:02:50 208
原创 Redis学习(7)--延时队列
异步消息队列Redis的list(列表)数据结构常用来用做为异步消息队列使用,用rpush和lpush操作入队列,用lpop和rpop操作出队列
2021-08-03 10:03:23 416
原创 golang-lint让代码更规范点
golangci-lint什么是lint?answer: 静态代码分析。通俗地讲,扫描源代码,在不运行代码的情况下,找出一些不规范的书写方式以修正.fmt.Sprintf("%d", "123") // 错误fmt.Sprintf("%s", "123") // 正确for i, _ := range []int{1,2,3}{} // 错误for i := range []int{1,2,3}{} // 正确a := make([]int, 0, 0) // 错误a :
2021-07-28 11:00:12 1749
原创 golang--遇见的坑总结
关于Channel遇见的坑使用select监听通道时,通道会被阻塞直到当前case执行完毕。func TestChannel(t *testing.T) { strChan:=make(chan string,10) go func() { for { strChan <- time.Now().String() time.Sleep(600*time.Millisecond) } }() ticker := time.NewTicker(250 * time
2021-07-26 14:19:01 150
原创 Redis学习(5)-zset
Redis基础篇–zset(有序列表)zset内部实现: 类似于Java语言里SortedSet和HashMap的结合体。它的内部实现用的是一种叫做"跳跃列表"的数据结构。用途举例zset可以用来存储粉丝列表,value值是粉丝的用户ID,score是关注时间,便可以对粉丝列表按关注时间进行排序。zset可以用来存储学生的成绩,value值是学生的ID,score是他的考试成绩,我们对成绩按分数进行排序就可以得到他的名次。常见命令:zadd books 9.0 python
2021-07-21 21:36:31 589
原创 Redis学习(4)--set
Redis基础篇–setset内部实现: 类似于Java语言里的HashSet,它内部的键值对是无序的、唯一的。它的内部实现相当于一个特殊的字典,字典中的所有value都是一个值null。常见命令:sadd books python #添加一个元素smembers books #查询books的元素,注意顺序,是无序的sismember books java #查询某个value是否存在,相当于contains(o)scard books #获取长度,相当于count()spop bo
2021-07-20 10:02:06 64
原创 Redis学习(3)--hash
Redis基础篇–hashhash内部实现: 类似于JAVA的HashMap。也是数组+链表的二维结构。rehash不同,是渐进式rehash策略。常见命令:hset books java "think in java" #设置key为books,field为java,value为"think in java"hgetall books #entries(),key和value间隔出现hlen books# 获取map的长度hmset books java "effective java
2021-07-16 20:37:09 132 2
原创 docker搭建ES及Kibana6.4.2
安装kibana 6.4.2下载镜像包docker pull elasticsearch:6.4.2 新建文件夹 (本地的目录要记得替换)–映射容器文件mkdir -p /home/elasticsearch/config创建配置文件(映射到es容器里面的配置文件)vim /home/elasticsearch/config/es.ymlcluster.name: elasticsearch-clusternode.name: es-node1ne..
2021-07-15 13:09:19 489
原创 docker安装kibana-7.6.1
docker安装kibana7.6.1,注意一般与es一块使用的时候,记得确保跟es版本一致,否则会有一些不必要的问题
2021-07-15 12:56:26 521 1
原创 docker安装Elasticsearch-7.6.1
安装es7.6.1下载镜像包docker pull elasticsearch:7.6.1新建文件夹 (本地的目录要记得替换)#存放配置文件的文件夹mkdir -p elasticsearch/node-1/configmkdir -p elasticsearch/node-2/configmkdir -p elasticsearch/node-3/config#存放数据的文件夹mkdir -p elasticsearch/node-1/datamkdir -p elasticsear
2021-07-15 12:44:21 528
原创 Redis学习(2)--list
redis--lisy内部实现: 类似于JAVA的linkedList。列表元素较少时会使用一块连续的内存存储,即ziplist(压缩链表),元素较多时底层是quicklist(快速链表)。可以用来当做异步队列使用。
2021-07-13 10:09:54 139 2
原创 Redis学习(1)--string
Redis基础篇–基础的数据结构string内部实现: 动态字符串,类似于JAVA的ArrayList。采取预分配的方式,其分配的实际空间 capacity 一般高于实际长度len。当字符串长度小于1M时,扩容都是加倍;当超过1M时,一次只会多扩1M。注意:其最大长度为512MB.常见命令:键值对set key value #设置key的值为valueget key #获取key的值exists key #key是否存在del key #
2021-07-09 20:25:36 74
原创 使用docker安装kafka(结合ZK)
docker安装Kafka一、docker安装zookeeper由于kafka需要依赖于zookeeper,因此这里先运行zookeeper1.拉取zookeeper镜像docker pull wurstmeister/zookeeper2.启动zookeeperdocker run -d --name zookeeper -p 2181:2181 -e TZ="Asia/Shanghai" --restart always wurstmeister/zookeeper3.查看zook
2021-07-03 13:03:20 1574 2
原创 Kafka常用命令(zookeeper与bootstrap-server)
kafka的常用命令。包含zookeeper和kafka本身自带bootstrap-server 的命令。
2021-07-02 22:32:04 17520 1
原创 基于Docker搭建Prometheus+Grafana
安装运行Prometheus(docker版)Grafana是一个开源的功能丰富的数据可视化平台,通常用于时序数据的可视化。它内置了以下数据源的支持:下面是我们安装时用到的架构图:安装Docker [参考百度了哦]下载镜像包docker pull prom/node-exporterdocker pull prom/prometheusdocker pull grafana/grafana启动node-exporterdocker run -d -p 9100:9100 \ -v
2021-06-24 19:30:45 319
原创 大白话理解数据库范式
第一范式(无重复的列)理解:要求记录的属性是原子性,不可分,就是属性不能分,这是关系型数据库的基本要求,不满足这个就不能叫关系型数据库了通俗点讲(一个字段只存储一项信息)EG: 班级:高三年级14班,应改为2个字段,一个年级、一个班级,才满足第一范式学号姓名班级0001小红高三年级14班满足1NF后为学号姓名年级班级0001小红高三年级14班第二范式(属性完全依赖于主键)理解:不能有部分依赖,部分依赖的前提条件是有组合主
2020-06-10 16:42:23 194
原创 快速在github里找到自己想要找的项目(一些常见指令)
git里搜索项目:①搜索项目名里包含springCloud的项目in:name SpringCloud②精确到项目的star数大于5000+in:name spring stars:>500③搜索项目描述里包含微服务的项目in:description 微服务④搜索项目描述里包含微服务的项目,并且语言为python的in:description 微服务 language:pyt...
2020-02-29 15:08:02 170
转载 docker 安装MongoDB以及设置用户
docker 安装MongoDB以及设置用户docker pull mongo (拉取镜像 默认最新版本)docker images (查看镜像)docker run -p 27017:27017 --name mongo -td mongo (以容器名mongo启动mongo镜像)docker ps (查看启动的镜像)docker exec -it mongo /bi...
2019-01-04 20:37:50 405
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人