Albert World


  • 首页

  • 归档

  • 标签

  • 分类

  • 工具

  • 关于

  • 搜索

GoAdmin框架实现的后台应用遇到的鉴权跳转问题

发表于 2024-12-29 | 更新于 2024-12-29 | 分类于 Web |
热度 ℃
  |   字数统计: 3,486(字)   |   阅读时长: 15(分)

前言

GoAdmin是一个基于 golang 面向生产的数据可视化管理平台搭建框架,可以让你使用简短的代码在极短时间内搭建起一个管理后台,虽然我也会去修改和新增一些功能页面,但是它给我的感觉总像一个黑盒子,大概是我对Web开发的知识了解甚少,总是照葫芦画瓢的完成一些工作,最近在鉴权和会话过期的处理上遇到了一点点问题,直接GET访问页面在会话过期时会自动跳转到登录页面,而点击按钮提交表单时如果已经会话过期了却没有任何反应,我觉得是少设置了一些东西,绕了一大圈才算勉强解决,但这应该不是最优的方案,先记录一下,后续找到好的解决方案再优化。

阅读全文 »

Windows下使用adb实现在模拟器中ping

发表于 2024-12-29 | 更新于 2024-12-29 | 分类于 windows |
热度 ℃
  |   字数统计: 825(字)   |   阅读时长: 4(分)

前言

有时在模拟器中测试应用不像在Windows这种开发环境中那么方便,毕竟Windows或者Linux下的工具五花八门,可以满足各种测试需求,比如应用在模拟器中无法登录时,想测试模拟器的网络情况,如果是在Windows或者Linux下各种网络工具任君挑选,但是在模拟器中运行个命令行下的ping命令的都费劲,但方法还是有的,我就找个不那么费劲的方法吧,记录在此方便查阅。

阅读全文 »

简单整理下protobuf中常用的几个工具函数

发表于 2024-12-25 | 更新于 2024-12-29 | 分类于 C/C++ |
热度 ℃
  |   字数统计: 1,324(字)   |   阅读时长: 6(分)

前言

游戏项目中使用protobuf作为双端协议通讯的方式,算是一种中规中矩的方法了,偶尔会需要查看序列化后的消息占用空间大小,一直都是用序列化后的字符串来查看,即使临时测试一个结构占用空间也要序列化后才能调用 .size() 函数,最近偶然间发现有个 ByteSizeLong() 可直接用于BP结构上,这倒是简单了一点点,所以把常用的几个函数列举总结一下,免的自己时间太长忘记了。

阅读全文 »

使用mysqlx操作MySQL8.0数据库时遭遇CDK Error: Connection refused (generic:111)错误

发表于 2024-12-21 | 更新于 2024-12-29 | 分类于 MySQL |
热度 ℃
  |   字数统计: 2,919(字)   |   阅读时长: 13(分)

前言

游戏服务器一个配置存储服务,使用 mysql-connector-c++ 8.0 连接 MySQL 8.0 数据库,使用 MySQL X Protocol, 它是 MySQL 8.0 引入的一种新的通信协议,它是为了支持现代应用程序开发需求而设计的。除了关系型数据存储外,MySQL X Protocol 可以方便地处理文档存储,允许存储和检索 JSON 等文档类型的数据,使其更适合现代的 NoSQL 风格的开发模式。该协议支持异步操作,提高了性能,允许更高效的并发处理,特别是在处理大量请求时。支持更丰富的数据操作,包括 CRUD 操作、事务处理、SQL 语句执行,并且可以处理复杂的查询,例如对文档存储的查询。

阅读全文 »

Redis查询占用空间最大的10个key

发表于 2024-12-17 | 更新于 2024-12-29 | 分类于 Redis |
热度 ℃
  |   字数统计: 1,005(字)   |   阅读时长: 4(分)

前言

最近电脑性能告急,所有磁盘变红无空间,C盘更是剩下0字节,内存90%+,CPU占用90%+,使用spacesniffer查询哪些文件可以删除,优先被我干掉的是休眠功能自动生成的 hiberfil.sys 文件,然后这个内存分页文件 pagefile.sys 我没动,本来我的内存就不够用,删除了情况会更糟糕,然后映入眼帘是的 dump.rdb 文件,这个redis的持久化文件怎么这么大,足足有6个G,不仅占用了我6个G的C盘,还占用了我6个G的内存,不会是上次测试存储的大数据没删除吧,赶紧去瞅瞅。

查找Redis大key

查找的思路很简单粗暴,利用redis的API,将所有的key的大小查找出来,然后从大到小排序,找出最大的10个key。

需要注意的是,我这是本地的测试环境,为了方便所以使用了 keys 这个令人闻风丧胆的命令来阻塞获取了所有的key,如果是在生产环境中可千万不要这么写,使用 scan 是一个很好的替代方案,查询代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/python3.6
# -*- coding: utf-8 -*-
# 查询redis中占用空间最大的10个key

import redis

# game redis
redis_pool = redis.ConnectionPool(host='127.0.0.1', password='myword', port=6379)
redis_server = redis.Redis(connection_pool=redis_pool)

# 获取所有键
keys = redis_server.keys('*')

# 获取每个键的内存使用情况
key_sizes = []
for key in keys:
size = redis_server.memory_usage(key)
key_sizes.append((key, size))

# 按内存使用大小排序,取前10个
top_keys = sorted(key_sizes, key=lambda x: x[1], reverse=True)[:10]

# 输出结果
for key, size in top_keys:
print(f"Key: {key}, Size: {size} bytes")
#redis_server.delete(key)

果然不出所料,内存占用前几名的key都是之前我做测试时使用的超大key,赶紧使用 redis_server.delete(key) 函数删除掉,因为当时测试使用了统一的AAA前缀,为了提高后续查找效率,我把获取key的代码改成了 keys = redis_server.keys('AAA*'),这样查找前10个key速度就快很多了

使用Scan命令优化

前面提到 keys 命令不要在生产环境使用,如果要遍历key最好使用 scan 来代替,所以优化后的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import redis

# 连接 Redis
redis_pool = redis.ConnectionPool(host='127.0.0.1', password='myword', port=6379)
redis_server = redis.Redis(connection_pool=redis_pool)

# 存储键和它们的内存使用情况
key_sizes = []

# 使用 SCAN 命令遍历所有键
cursor = 0
while True:
cursor, keys = redis_server.scan(cursor, count=1000) # 每次扫描最多返回 1000 个键
for key in keys:
size = redis_server.memory_usage(key)
key_sizes.append((key, size))

# 如果游标返回为 0,说明遍历完所有键
if cursor == 0:
break

# 按内存使用大小排序,取前10个
top_keys = sorted(key_sizes, key=lambda x: x[1], reverse=True)[:10]

# 输出结果
for key, size in top_keys:
print(f"Key: {key}, Size: {size} bytes")
# 如果需要删除键,可以在这里调用 redis_server.delete(key)

总结

  • Windows电脑磁盘不足时,如果不使用休眠功能,可以把C盘根目录的 hiberfil.sys 文件删掉
  • 获取所有可以的命令是 keys,但这是个阻塞命令,不要轻易在生产环境下使用,必要时使用 scan 命令代替
  • 使用 redis_server.memory_usage(key) 命令可以获取key占用内存大小,删除key使用 redis_server.delete(key)

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

体系决定交易盈亏,规则决定交易生死,格局决定交易高度。真正的亏钱,源于贪婪,常常出现在看到别人盈利而担心自己赚不到这一波的时候~

如果一直谨小慎微并不会亏多少,而当人因为一些外部原因获取超额盈利却把它作为自身能力时,也就逐步拉开了亏损的大幕

2024-12-17 15:45:32

linux内存相关命令的尝试

发表于 2024-12-14 | 更新于 2024-12-29 | 分类于 linux |
热度 ℃
  |   字数统计: 3,042(字)   |   阅读时长: 12(分)

前言

菜就多练,昨天看了一篇有关剖析 RocksDB 内存超限问题的文章,里面用了多种内存分析工具,看到那些貌似熟悉的名字,却一时也想不起怎么来用,当然像 free 和 top 这种命令还是比较熟的,但是像 vmstat 和 pidstat 这些就比较模糊了,翻了翻之前的总结也简单的描述过使用方法,但是对于这种已经忘记的实时也是不可回避的,菜就多练,今天就再练一练。

阅读全文 »

日常应用开发遇到的小问题二三则

发表于 2024-11-29 | 更新于 2024-12-29 | 分类于 Android |
热度 ℃
  |   字数统计: 5,210(字)   |   阅读时长: 22(分)

前言

这两天的工作又相对杂乱一些,处理一下A事情,又要搞一搞B事情,需要盯着C事情,还要尝试一下D事情,所以这篇总结没有什么主线,主要目的是记录一下最近解决的问题,先不展开讨论,当类似的问题积累一些再展开描述,我就先记录一下流水账了。

阅读全文 »

git克隆报错时The project you were looking for could not be found...

发表于 2024-11-21 | 更新于 2024-12-29 | 分类于 Git |
热度 ℃
  |   字数统计: 432(字)   |   阅读时长: 2(分)

Ps D:>git clone http://gitlab.yyy.com/project/xxx.git
Cloning into ‘xxx’..
remote: The project you were looking for could not be found or you don’t have permission to view it.
fatal: repository ‘http://gitlab.yyy.com/project/xxx.git/'not found

前言

问题如上,使用 git clone 命令克隆一个仓库的时候,提示我项目找不到或者没有权限,一开始我还以为路径拼错了,核对了两遍确认仓库地址正确的,访问仓库的权限肯定也有的,我使用账号和密码可以成功登录gitlab网站并且看到这个项目,网上查询方案大概原因是电脑的git自动保存了其他的用户名密码信息,与当前项目的用户名密码与之前的发生冲突,处理掉这种情况就行了。

阅读全文 »

会打字就能建网站的广告词是否夸大其词呢

发表于 2024-11-18 | 更新于 2024-12-29 | 分类于 Web |
热度 ℃
  |   字数统计: 2,207(字)   |   阅读时长: 8(分)

前言

首先声明这不是一篇广告文,只是我最近用了一款建站的产品,在使用过程中也遇到了一些问题,所以总结一下避免以后继续踩坑,其中“会打字就能建网站”的广告词还是挺吸引人的,给人一种“有手就行”的既视感。

阅读全文 »

Docker启动gitlab后22端口被占用如何解决

发表于 2024-11-08 | 更新于 2024-12-29 | 分类于 Docker |
热度 ℃
  |   字数统计: 943(字)   |   阅读时长: 4(分)

前言

这两天一直在研究Docker启动gitlab的问题,邮件问题暂时告一段落,当真正开始使用gitlab克隆的时候发现,之前22端口被占用无法启动,我就用2022端口做了一个映射,但是在gitab界面上提供的克隆地址类似这样 git@gitlab.gameup.com:games/xxx.git,丝毫没有端口 2022 的影子,执行 git clone git@gitlab.gameup.com:games/xxx.git 果然不可下载,所以搜索了一圈解决方案总结在此,方便日后查找。

Docker启动参数

1
2
3
4
5
6
7
8
9
docker run --detach \
--hostname gitlab.gameup.com \
--publish 443:443 --publish 80:80 --publish 2022:22 \
--name gitlab \
--restart always \
--volume /export/docker/gitlab/config:/etc/gitlab \
--volume /export/docker/gitlab/logs:/var/log/gitlab \
--volume /export/docker/gitlab/data:/var/opt/gitlab \
registry.cn-hangzhou.aliyuncs.com/z5z/gitlab-ce:latest

这个在之前的文章中提到过,因为 80 和 443端口正常可用,所有采用HTTP方式的下载 git clone http://gitlab.gameup.com/games/xxx.git 是正常的,而 SSH下载的这种方式,因为修改了默认端口,导致提供的链接无法下载,即使我像这样 git clone git@gitlab.gameup.com:2022/games/xxx.git 加上了端口也无法正常克隆。

用一种比较笨的方法就是,关闭SSH服务或者将宿主机的SSH服务改个端口,但这是一台远程服务器,一般都通过SSH协议访问,关闭不太现实,修改端口的话倒是可行,可是之前这台机器上运行着多个任务,这意味着很多服务脚本都得修改,所以也不是很好的办法,不能因为加了个新服务就把原来的老脚本统统改一遍吧,尝试多次终于找到一个可以接收的方法。

解决方案

  1. 进入gitlab容器 docker exec -it gitlab

  2. 修改配置文件 /etc/gitlab/gitlab.rb 中的内容

    1
    gitlab_rails['gitlab_shell_ssh_port'] = 2022

    注意这个设置只是修改了 GitLab 的显示信息,不会更改 GitLab 容器内的 SSH 服务端口

  3. 执行 gitlab-ctl reconfigure 即可

    修改执行之后,再次查看gitlab下载地址发现改成了 ssh://git@gitlab.gameup.com:2022/games/xxx.git,不仅加了端口号,还在前面加上了 ssh://,怪不得我自己加端口号不能能用呢,关于这一点我也查到了相关解释:

GitLab 提供的 SSH 克隆地址(如 git@gitlab.gameup.com:2022/games/xxx.git)是一种简化格式,它没有指定协议前缀 ssh:// 和端口号。这是因为默认情况下,Git 使用 SSH 协议连接,并默认通过端口 22 来克隆和操作仓库。因此,这种简化格式省略了 ssh:// 前缀和端口号

对于标准端口(22),简化格式的地址是有效的,因为 Git 客户端会默认使用 SSH 协议并连接到 22 端口,但是,当你的 SSH 端口不同于 22(如使用 2022 时),Git 默认的简化格式就不适用了,需要显式指定端口号或配置 SSH,也就是写成 ssh://git@gitlab.gameup.com:2022/games/xxx.git 的形式

总结

  • 使用docker启动gitlab遭遇22端口占用时可以选择其他端口映射 --publish 2022:22
  • 修改映射端口后为了让下载地址显示正确,需要修改gitlab配置文件 gitlab_rails['gitlab_shell_ssh_port'] = 2022
  • git@gitlab.gameup.com:games/xxx.git 是一种ssh协议的简化形式,完整的地址应该为 ssh://git@gitlab.gameup.com:22/games/xxx.git

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

不要再抑郁下去了孩子,你要像一个,神经病一样活泼开朗,不要太在乎别人的目光,因为没人会注意你。

2024-11-7 19:21:48

12…28
Albert Shi

Albert Shi

阳光总在风雨后,大雨过后是冰雹

273 日志
44 分类
694 标签
RSS
GitHub 简书 StackOverflow CSDN 知乎 墨天轮
Links
  • Web前端导航
  • 文字编码导航
  • 在线代码编译
  • 在线工具集合
  • 在线教程集合
© 2018 - 2024 Albert Shi
Hexo 强力驱动
主题 - NexT.Mist
Unless otherwise specified, this blog is licensed under a CC BY-NC-ND 4.0 International License.