# GoDistributedCacheFramework **Repository Path**: gaohaixiang192/go-distributed-cache-framework ## Basic Information - **Project Name**: GoDistributedCacheFramework - **Description**: 分布式缓存存储架构及go语言实现 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-10-23 - **Last Updated**: 2022-10-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### book 位置 - src/分布式缓存-原理、架构及GO语言实现.pdf ### 集成的功能和技术 - 内存缓存服务的实现 - 批量写入技术 - 利用RocksDB实现缓存持久化 - 异步读取技术 - 分布式缓存 - Pipelining 性能加速技术 - 节点再平衡 - 缓存数据生存时间 ## 编译运行及测试 ### rocksdb 编译成静态链接库 ```text 系统版本:ubuntu 22.04 安装rocksdb依赖: apt-get install make g++ libz-dev apt-get install libgflags-dev apt-get install libsnappy-dev apt-get install zlib1g-dev apt-get install libbz2-dev apt-get install liblz4-dev apt-get install libzstd-dev 下载rocksdb cd src git clone https://github.com/facebook/rocksdb.git cd rocksdb 编译静态库: make static_lib 静态库 make install-static 静态库安装 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib 若运行报 CFLAGS 和 LDFLAGS 错误,则可以这样设置 export CGO_CFLAGS_ALLOW=".*" export CGO_LDFLAGS_ALLOW=".*" ``` ### 新增键值对测试 ```text // 新增键值对 ./client -c set -k testkey -v testvalue // 获取键值对 ./client -c get -k testkey // 查看缓存状态 curl 127.0.0.1/status // 删除键值对 ./client -c del -k testkey ``` ### rocksdb存储测试 ```text // 启动 ./server -type rocksdb // 查看状态 curl 127.0.0.1:12345/status // 创建键值 ./client -c set -k testkey -v testvalue // 获取值 ./client -c get -k testkey // 查看 /mnt/rocksdb/ 文件内容 ls -lt /mnt/rocksdb/ // 当查看状态时,需要重启,否则会为空,由于rocksdb机制,先写日志文件,后台慢慢再写入SST // 重启后,日志内容会快速写入SST ``` ### 缓存集群服务测试 ```text // 启动 ./server -node 1.1.1.1 // 服务检查 netstat -tulp | grep 1.1.1.1 // 端口介绍 // 12345 是HTTP服务监听端口 // 123456 是TCP服务监听端口 // 7946 是 memberlist 的 gossip 协议监听端口 // 添加启动的第二个节点 ./server -node 1.1.1.2 -cluster 1.1.1.2 // 在任意节点上查看集群的节点列表 curl 1.1.1.1:12345/cluster // 使用TCP客户端向1.1.1.1发送缓存的set操作 ./client -h 1.1.1.1 -c set -k keya -v a ./client -h 1.1.1.1 -c set -k keyb -v b ./client -h 1.1.1.1 -c set -k keyc -v c ./client -h 1.1.1.1 -c set -k keyd -v d ./client -h 1.1.1.1 -c set -k keye -v e // 添加集群的第三个节点 ./server -node 1.1.1.3 -cluster 1.1.1.2 // 查看key的结果 ./client -h 1.1.1.1 -c set -k keya -v a ./client -h 1.1.1.1 -c set -k keyb -v b ./client -h 1.1.1.1 -c set -k keyc -v c ./client -h 1.1.1.1 -c set -k keyd -v d ./client -h 1.1.1.1 -c set -k keye -v e // 停止节点1.1.1.1的服务,然后查看 ./client -h 1.1.1.2 -c set -k keya -v a ./client -h 1.1.1.3 -c set -k keyb -v b ./client -h 1.1.1.4 -c set -k keyc -v c ./client -h 1.1.1.5 -c set -k keyd -v d ./client -h 1.1.1.6 -c set -k keye -v e ``` ### 节点再平衡测试 ```text // 启动第一个节点 ./server -node 1.1.1.1 // 使用cache-benchmark 插入 100000 个键 ./cache-benchmark -type tcp -n 10000 -d 1 -h 1.1.1.1 // curl 命令确认该系欸但那的缓存状态 curl 1.1.1.1:12345/status // 启动节点2 ,1.1.1.2 ./server -node 1.1.1.2 -cluster 1.1.1.1 curl 1.1.1.2:12345/status // 再1.1.1.1 上进行节点再平衡, curl 1.1.1.1:12345/rebalance -XPOST curl 1.1.1.1:12345/status // 启动第三个节点,并在前两个节点上进行再平衡 ./server -node 1.1.1.3 -cluster 1.1.1.2 curl 1.1.1.1:12345/rebalance -XPOST curl 1.1.1.2:12345/rebalance -XPOST // 查看平衡 curl 1.1.1.1:12345/status curl 1.1.1.2:12345/status curl 1.1.1.3:12345/status ``` ### 键值生存时间测试 ```text 生存时间,默认是30秒 // 启动节点 ./server // 设置一个键值对,并查看缓存状态 curl 127.0.0.1:12345/cache/a -XPUT -daa curl 127.0.0.1:12345/cache/a curl 127.0.0.1:12345/status // 30 秒后,再次get这个键, curl 127.0.0.1:12345/status curl 127.0.0.1:12345/cache/a -v ```