0%

docker启动redis哨兵

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
version: '3.8'
services:
redis-master:
container_name: redis-master
image: 'bitnami/redis:latest'
environment:
- REDIS_REPLICATION_MODE=master
- REDIS_PASSWORD=redispassword
ports:
- "6379:6379"
redis-slave:
container_name: slave-redis
image: 'bitnami/redis:latest'
environment:
- REDIS_REPLICATION_MODE=slave
- REDIS_MASTER_HOST=redis-master
- REDIS_MASTER_PASSWORD=redispassword
- REDIS_PASSWORD=redispassword
ports:
- "7000:6379"
depends_on:
- redis-master
redis-sentinel-1:
image: 'bitnami/redis-sentinel:latest'
container_name: sentinel-1
environment:
- REDIS_MASTER_SET=mymaster
- REDIS_MASTER_HOST=127.0.0.1
- REDIS_MASTER_PASSWORD=redispassword
- REDIS_SENTINEL_DOWN_AFTER_MILLISECONDS=10000
depends_on:
- redis-master
- redis-slave
ports:
- "26379:26379"
redis-sentinel-2:
image: 'bitnami/redis-sentinel:latest'
container_name: sentinel-2
environment:
- REDIS_MASTER_SET=mymaster
- REDIS_MASTER_HOST=127.0.0.1
- REDIS_MASTER_PASSWORD=redispassword
- REDIS_SENTINEL_DOWN_AFTER_MILLISECONDS=10000
depends_on:
- redis-master
- redis-slave
ports:
- "26380:26379"
redis-sentinel-3:
image: 'bitnami/redis-sentinel:latest'
container_name: sentinel-3
environment:
- REDIS_MASTER_SET=mymaster
- REDIS_MASTER_HOST=127.0.0.1
- REDIS_MASTER_PASSWORD=redispassword
- REDIS_SENTINEL_DOWN_AFTER_MILLISECONDS=10000
depends_on:
- redis-master
- redis-slave
ports:
- "26381:26379"
1
docker-compose up -d

图片

阅读全文 »

依赖安装

1
2
cargo install wasm-pack
cargo install cargo-generate

使用模板创建

1
cargo generate --git https://github.com/rustwasm/wasm-pack-template

图片
图片

构建

1
wasm-pack build --target web

图片

js调用

pkg 文件夹下新建 index.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>测试调用</title>
</head>

<body>
<script type="module">
import initSync, { greet } from './wchar_wasm_helloworld.js';
await initSync();
greet();
</script>
</body>

</html>

图片

阅读全文 »

安装 msys2

https://www.msys2.org/

图片

A.设置清华源

1
sed -i "s#https\?://mirror.msys2.org/#https://mirrors.tuna.tsinghua.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*

B.安装 mingw-w64

1
pacman -S mingw-w64-ucrt-x86_64-toolchain

C.添加环境变量
找到 msys2 安装位置下

1
ucrt64/bin

图片
图片

安装 cross-rs

https://github.com/cross-rs/cross

1
cargo install cross --git https://github.com/cross-rs/cross

也可以直接下载 exe 二进制文件并添加到环境变量中

安装 Docker并启动

https://www.docker.com/

配置 rust

1
2
rustup toolchain install stable-x86_64-pc-windows-gnu
rustup target add x86_64-pc-windows-gnu

构建

1
cross build --target x86_64-unknown-linux-musl --release

图片
图片

阅读全文 »

postgreSQL 创建用户并授权

1
2
3
4
5
6
7
8
9
10
11
12
13
14
--创建 dbname0628 数据库
create database dbname0628;

--创建 dbname 角色
create role dbname nologin;

--修改 dbname0628 数据库owner为 dbname 角色
alter database dbname0628 owner to dbname;

--创建用户 zhangsan 密码为 123456789
create user zhangsan with password '123456789';

--将 dbname 角色赋给 zhangsan 用户
grant dbname to zhangsan;

winapi判断目录访问权限

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
29
30
31
32
33
34
35
36
37
38
39
bool CanAccessFolder( LPCTSTR folderName, DWORD genericAccessRights )
{
bool bRet = false;
DWORD length = 0;
if (!::GetFileSecurity(folderName, OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION
| DACL_SECURITY_INFORMATION, NULL, NULL, &length ) &&
ERROR_INSUFFICIENT_BUFFER == ::GetLastError()) {
PSECURITY_DESCRIPTOR security = static_cast<PSECURITY_DESCRIPTOR >( ::malloc( length ) );
if (security && ::GetFileSecurity( folderName, OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION
| DACL_SECURITY_INFORMATION, security, length, &length )) {
HANDLE hToken = NULL;
if (::OpenProcessToken(::GetCurrentProcess(), TOKEN_IMPERSONATE | TOKEN_QUERY |
TOKEN_DUPLICATE | STANDARD_RIGHTS_READ, &hToken )) {
HANDLE hImpersonatedToken = NULL;
if (::DuplicateToken( hToken, SecurityImpersonation, &hImpersonatedToken )) {
GENERIC_MAPPING mapping = { 0xFFFFFFFF };
PRIVILEGE_SET privileges = { 0 };
DWORD grantedAccess = 0, privilegesLength = sizeof( privileges );
BOOL result = FALSE;

mapping.GenericRead = FILE_GENERIC_READ;
mapping.GenericWrite = FILE_GENERIC_WRITE;
mapping.GenericExecute = FILE_GENERIC_EXECUTE;
mapping.GenericAll = FILE_ALL_ACCESS;

::MapGenericMask( &genericAccessRights, &mapping );
if (::AccessCheck( security, hImpersonatedToken, genericAccessRights,
&mapping, &privileges, &privilegesLength, &grantedAccess, &result )) {
bRet = (result == TRUE);
}
::CloseHandle( hImpersonatedToken );
}
::CloseHandle( hToken );
}
::free( security );
}
}
return bRet;
}
阅读全文 »

本次博主将使用 c++ 操作 libcurl 进行 get post
摘自官网: libcurl是一个免费且易于使用的客户端URL传输库,支持DICT、FILE、FTP、FTPS、GOPHER、GOPHERS、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、MQTT、POP3、POP3S、RTMP、RTMPS、RTSP、SCP、SFTP、SMB、SMBS、SMTP、SMTPS、TELNET和TFTP。libcurl支持SSL证书、HTTP POST、HTTP PUT、FTP上载、基于HTTP表单的上载、代理、HTTP/2、HTTP/3、cookie、用户+密码身份验证(基本、摘要、NTLM、协商、Kerberos)、文件传输恢复、HTTP代理隧道等
本章节博主将使用 libcurl 完成 get post json post form 操作

阅读全文 »

想为你的域名搭建权威DNS? 来试试 PowerDNS
PowerDNS成立于20世纪90年代末,是开源DNS软件的主要供应商,本次博主将编写 PowerDNS 搭建教程
以及如何配置 PowerDNS-Admindnssec

阅读全文 »

DOH:
dns over https 查询和响应是加密的,但它们是通过HTTP或HTTP/2协议发送的,他一般在443端口运行

DOT:
dns over tls 是加密DNS查询以确保其安全和私有的标准,DoT使用安全协议TLS,它在853端口上运行

阅读全文 »