Redis安裝與使用、redis主從複製、redis集群

来源:https://www.cnblogs.com/xuxuxuxuxu/archive/2023/09/05/17678535.html
-Advertisement-
Play Games

# Redis 文章內容主要參考b站 運維實戰課程 的redis視頻:[redis的課程介紹_嗶哩嗶哩_bilibili](https://www.bilibili.com/video/BV1cP4y1D7yh?p=1) ## 簡介 1.Redis是一個緩存資料庫,主要是做緩存。什麼是緩存?也就是緩 ...


Redis

文章內容主要參考b站 運維實戰課程 的redis視頻:redis的課程介紹_嗶哩嗶哩_bilibili

簡介

1.Redis是一個緩存資料庫,主要是做緩存。什麼是緩存?也就是緩衝存儲,也可以理解為擋箭牌,對後面的一個保護—般放在mysql/oracle等資料庫前面,對資料庫進行一個保護。用戶請求數據時候,第一次先請求redis,redis里沒有,就請求後臺mysqal資料庫,返回數據時候會存放到redis里一份緩存起來,當下一次請求同樣數據時候,就可以直接青求redis拿到數據,防止了對資料庫的頻繁訪問,減輕後臺資料庫的壓力
2.Redis是一種記憶體型的nosql資料庫,一般是用來緩存加速的,並且能夠支持數據持久化存儲的設置,可以將數據持久化到硬碟裡面3.Redis存儲數據的方法是以key-value的形式
4.Redis數據類型支持字元串、列表、哈希等多種類型

Redis的源碼編譯安裝

安全前的環境準備:

Centos7 關閉防火牆 關閉selinux 配置好阿裡yum倉庫

1.安裝編譯工具
yum install -y vim lrzsz gcc gcc-c++ make cmake tar openssl openssl-devel

2.解壓提前下載好tar.gz源碼包
tar -zxvf redis-6.2.13.tar.gz -C /usr/local/  //解壓

mv /usr/local/redis-6.2.13 /usr/local/redis  
cd /usr/local/redis
make && makeinstall
redis-server -v

cp redis.conf /etc/

//如果系統都一樣,沒必要每台都編譯安裝,在一臺上編譯安裝後,只需將編譯好的二進位文件((/usr/local/ bin/redis-*)拷貝到其他伺服器即可

配置優化

cp /etc/redis.conf /etc/redis.conf.bak  //備份文件

sed -i '/^#/d;/^$/d' /etc/redis.conf  //刪除註釋空行
vim /etc/redis.conf  //修改如下參數
bind 0.0.0.0
port 6379
dir /data/redis
requirepass redispwd  //添加
pidfile "redis.pid"
logfile "redis.log"
daemonize yes
1.啟動
mkdir -p /data/redis
redis-server /etc/redis.conf
netstat -tunlp | grep 6479

cat /data/redis/redis.log  //查看日誌 記憶體儘量2G以上

2.修改文件
vim /etc/security/limits.conf 
* - nofile 65535  //添加

vim /etc/sysctl.conf
net.core.somaxconn = 10240
vm.overcommit_memory = 1 

sysctl -p  //使上述配置生效

3.配置系統
vim /usr/lib/systemd/system/redis.service 
[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

基本操作

1.redis-cli使用和認證登錄
redis-cli -h ip  //無密碼
redis-cli -a password  //登錄+認證

2.redis常用數據類型
字元串
列表、集合
hash、發佈和訂閱

3.redis字元串操作
set name xux  	 //增加key並賦值
keys *   		 //顯示所有的key
get name  		 //獲取key的值
set name xuxu  	 //重新給key賦值
del name  		 //刪除key

//大小寫問題
命令不區分大小寫
key區分大小寫
set name ccc
set Name xxx

//非互動式操作redis
redis-cli -a password set name xuxuxu
redis-cli -a password get name

//使用shell批量寫入數據並獲取
for i in $(seq -w 10);do redis-cli -a 123456 set name${i} test${i};done

4.redis列表和集合的基本操作
4.1 redis列表
特點:列表是有順序的 可寫入重覆的數據
如:['s1','s2','s3'...]
rpush names s1  //依次在列表右側逐步添加數據
rpush names s2
rpush names s3

['s3','s2','s1'...]
lpushu names2 s1  //左側逐步添加數據
lpushu names2 s2
lpushu names2 s3

lrange names 0 2  //讀取第1到第3個列表值
lrange names 0 -2 //讀取第1到倒數第2個列表值
LLEN names  //列出列表的長度

LREM names 1 s1  //刪除列表names中一個s1
LREM names 0 s2  //刪除列表names中所有的s2

lpop names  //左彈出
rpop names  //右彈出

4.2 redis集合
特點:無順序的、不重覆的
sadd a a1  //創建集合a並添加元素
sadd a a2
sadd a a3

SMEMBERS a  //列出集合中的所有元素

srem a a1  //刪除集合中元素a
spop a  //集合隨機彈出一個元素

SISMEMBER a a1  //判斷元素是否在集合里 0代表不在,1代表在

5.redis哈希和訂閱類型基本操作
5.1.hash類型數據操作
Hash 寫入
hset haxi name ha  //創建一個hash名字haxi
hset haxi laocation beijing
hset haxi age 18
hset haxi sex man

hash獲取
HGETALL haxi  //獲取hash名字里的所有key value對
HGET haxi name  //獲取hash名字里的單個key的值

Hash刪除
HDEL haxi age  //刪除hash名字的單個key
DEL haxi  //刪除整個hash

hash批量刪除
hmset haxi name hx666 age 20 location beijing sex boy

5.2.redis的發佈訂閱
subscribe fabu  //訂閱fabu頻道
public fabu "name shi,age 20,sex boy"  //往頻道發佈數據,訂閱可以收到發佈的消息

不同資料庫切換和運維監控命令

1.資料庫切換
//查看redis預設庫
grep databases /etc/redis.conf

//redis資料庫的切換
select 0
select 1

//不同的資料庫是獨立的
select 0  //預設是0庫

2.redis運維監控命令
//查看key
RANDOMKEY    //隨機獲取一個key
KEYS *  	//查看所有key,註意阻塞,如果key量特別大的時候,容易卡死阻塞
SCAN 0  	//建議使用,每次獲取11個key,可以迴圈獲取 每次獲取都會提示下次獲取的編號 直到0是獲取完了

//監控命令
redis-cli -a password --stat   //監控redis狀態
redis-cli -a password monitor  //監控數據操作
redis-cli -a password info     //監控系統可通過info獲取數據
redis-cli -a password info Server  //單個模塊的info信息
...

redis配置動態更新和寫入

1.redis更新配置的兩種方式
a.重啟更新,需要修改配置文件,然後重啟
b.實時更新,不需要重啟

重啟更新密碼
vim /etc/redis.conf
requirepass 12345678

動態更新密碼
config set requirepass
config set requirepass 123456  //臨時修改並有沒有寫入配置文件
config rewrite  //寫入配置文件

2.查看redis的相關鏈接數
info clients  //查看當前的redis連接數
config get maxclients  //查看redis允許的最大連接數

3.大部分配置都能通過config命令進行修改,然後寫入配置文件
config set maxclients 20000 //預設10000

redis的多用戶管理

//老版本沒有用戶名,只有密碼
redis6已經又用戶名,預設用戶名default

1.列出所有用戶,預設只有default超級用戶,並查看default用戶相關信息
ACL LIST  //列出所有用戶,預設用戶是default 
ACL getuser default  //查看default用戶的相關信息,default對所有的key,所有命令均有許可權,最高許可權,是預設用戶。

2.創建用戶並給用戶授權
ACL CAT  //查看所有許可權

例如:創建test用戶只有一個get命令許可權,讀許可權,並且只能get是name開頭的key:name*
ACL SETUSER test on >testpwd ~name* +get   //~正則
ACL SETUSER test on >testpwd ~name* +@read  //+@read 只增加test用戶所在組的讀許可權。
redis-cli --user test --pass testpwd  //登錄test用戶進行get v1驗證
 
3.常用許可權案例:
ACL SETUSER test1 on >test1pwd ~* +@all  //創建用戶賦給所有許可權

4.刪除用戶
ACL DELUSER test1

5.寫入配置文件
config rewrite

redis的慢日誌與key的有效期

問:有人反饋redis慢,如何進行排查
系統資源情況
查看慢日誌情況

1.redis慢日誌
//查看慢日誌的預設配置
CONFIG GET slow*  //查看慢日誌的配置

//查詢慢日誌
SLOWLOG get   //預設獲取僅10條
SLOWLOG get5  //獲取5條
SLOWLOG len   //慢日誌量,查看慢日誌的條數
SLOWLOG reset  //情況慢日誌

2.key的有效期
//給redis的key設置有效期,-1表示永久,-2表示redis回收了(key已經自動刪除)
TTL name  //查看key值的有效期
expire name 20  //給key設置有效期,單位:秒,設置有效期是20s
set name2 test2 EX 20  //在創建key的時候直接給key設置有效期20s

慢日誌欄位解釋

redis禁用危險命令和壓測工具

1.redis禁用危險命令
FLUSHALL  //會清空redis所有數據
FLUSHDB   //會清除當前DB所有數據
KEYS *    //數據阻塞
//禁用需要修改redis的配置文件,然後重啟redis
vim /etc/redis.conf
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command KEY ""

2.redis壓測工具
redis-benchmark --help
redis-benchmark -a password | tee /tmp/a.log  //將測試結果輸出到一個log文件 
//相當於會將每個命令都測一遍,返回測試結果,預設併發50 10萬次請求
redis-benchmark -a 123456 -n 10000   //用預設併發數50 1000次請求進行壓測  

redis的兩種持久化方式存儲

1.redis持久化存儲的兩種方式
RDB方式 RDB存儲是redis實現的一種存儲機制(預設開啟)
AOF方式 AOF存儲方式,直接把操作的命令記錄下來,保存到一個文件里,類似mysql的binlog日誌(預設關閉)

2.redis的RDB持久化存儲
redis預設是開啟了RDB快照方式,提供持久化存儲的功能

//redis的RDB存儲方式的配置
config get dir  //查看存儲設置的路徑
config get dbfilename  //查看rdb存儲的文件名
ls /data/redis
dump.rdb   //持久化文件

//通過修改配置文件關閉rdb持久化
vim /etc/redis.conf   //註釋掉save 添加save "" 重啟redis
save ""
#save 3600 1
#save 300 100
#save 60 10000

3.redis的AOF持久化存儲
AOF存儲預設是關閉的
AOF存儲是把命令直接寫入到文件中,文件會不斷擴大

//開啟AOF前先關閉RDB
//開啟AOF存儲方式
config get append*  //查看AOF狀態,預設是關閉的
config set appendonly yes  //開啟AOF存儲
config rewrite  //寫入配置文件
//寫入數據就可以發現 /data/redis/ 有了appendonly.aof文件

//AOF文件的重寫
當AOF文件增大到一定程度,我們可以對他進行重寫,重寫AOF文件可以減小AOF文件的大小,數據不會減少

//重寫的方式有兩種,手動重寫和自動重寫
BGREWRITEAOF  //手動重寫
config get *aof*  //查看自動重寫文件 預設自動重寫的條件是aof文件大小>67m,aof文件增大了一倍
註意:在業務高峰壓力大時採用自動觸發重寫,可能會影響業務,可選擇在壓力小的時候腳本運行BGREWRITEAOF

redis的RDB工具分析key的大小

1.什麼是redis的大key?
redis存儲數據的時候,當某個key的值比較大〈包括字元串、列表等數據類型),key的數據越大,占用的記憶體和空間就越多。也就是key對應的value很大。
string類型的數據: 長度大於10K,認為是大key
list列表類型的數據:長度大於10240,認為是大key

2.掃描和分析大key
2.1方法一
redis-cli -a password --bigkeys

2.2方法二
使用rdb工具分析大key

3.刪除大key
DEL k1

redis的主從複製

1.redis單台伺服器的缺點
如果持久化,單台數據有丟失風險
讀寫壓力都集中在一臺上

2.redis的主從複製概念
redis的主從就是墮胎redis數據一致
主伺服器可以用來寫入和讀取,從伺服器僅用來讀取,可以通過讀寫分離,降低伺服器的壓力

3.redis的主從搭建
主redis的配置
vim /etc/redis.conf
bind 0.0.0.0
port 6379
dir "/data/redis"
requirepass "redispwd"
pidfile "redis.pid"
logfile "redis.log"
daemonize yes

從redis的配置
vim /etc/redis.conf
bind 0.0.0.0
port 6379
dir "/data/redis"
requirepass "redispwd"
pidfile "redis.pid"
logfile "redis.log"
daemonize yes
slaveof 192.168.70.134 6379  //指定主伺服器的redis的ip和埠
masterauth "password"   //指定主redis的密碼

//再開一臺伺服器,把master的文件copy過去
[root@master bin]# scp -r /usr/local/bin/redis-* [email protected]:/usr/local/bin/  //複製bin下麵的redis二進位文件
[root@slave bin]# redis-cli -v  
redis-cli 6.2.13
[root@slave bin]# mkdir -p /data/redis  //創建數據目錄

[root@master bin]# scp /etc/redis.conf [email protected]:/etc/  //複製主的配置文件
[root@slave bin]# vim /etc/redis.conf  //修改配置文件
//刪除最後一行user  添加如下
slaveof 192.168.70.134 6379
masterauth "password"

[root@slave bin]# redis-server /etc/redis.conf  //啟動
set k1 v1   //主redis創建數據 測試從redis是否同步

redis高可以用

//高可用模式搭建
為了防止哨兵的單節點故障,一般哨兵也做成高可用形式,即多個哨兵同時監控redis的狀態,當其中一個哨兵故障時候,其他哨兵也能繼續監控。為了方便哨兵的選舉,一般哨兵也是設置成奇數個。一般3個哨兵就沒問題。

//準備:
192.168.70.134   主	 哨兵1
192.168.70.133   從1  哨兵2
192.168.70.136   從2  哨兵3

1.在前面主從複製的基礎上我們在搭建一臺從redis  
[root@slave bin]# scp -r /usr/local/bin/redis-* [email protected]:/usr/local/bin/  //直接複製slave1的文件即可
[root@slave bin]# scp /etc/redis.conf [email protected]:/etc/
[root@slave2 ~]# mkdir -p /data/redis  //創建數據目錄

//修改主配置文件
[root@master ~]# masterauth "123456"  //添加 有可能這台機器以後變成從 所以也要添加

2.配置3哨兵 3台機器都一樣  註意密碼設置你自己的密碼
vim /etc/sentinel.conf
bind 0.0.0.0
daemonize yes
port 26379
dir "/tmp"
logfile "sentinel.log"
sentinel monitor testmaster 192.168.70.134 6379 2
sentinel auth-pass testmaster password  
sentinel down-after-milliseconds testmaster 5000
sentinel failover-timeout testmaster 18000

3.啟動3哨兵a
/usr/local/bin/redis-sentinel /etc/sentinel.conf

4.驗證哨兵實現的高可用redis
a.停止master redis服務
systemctl stop redis    //kill也行

b.查看其他兩個從redis,其中一個已經提升為主
redis-cli -a password info

c.再次啟動redis 發現原主redis已經成為了slave

5.驗證一下哨兵的高可用性
a.在原主192.168.70.134那台機器上,殺死一個哨兵,模擬一個哨兵服務掛掉再驗證還能不能實現高可用
[root@rabbit01 bin]# ps -ef | grep sen
root       1433      1  0 22:30 ?        00:00:01 /usr/local/bin/redis-sentinel 0.0.0.0:36379 [sentinel]
root       1487   1210  0 22:40 pts/0    00:00:00 grep --color=auto sen

[root@rabbit01 bin]# kill -9 1433

b.再關閉新主redis  
kill -9 1243

c.查看是否生成了新的主redis
redis-cli -a password info

redis cluster集群搭建和高可用故障切換演示

1.redis主從模式和cluster分片集群區別
redis主從模式,是所有redis數據一致,但是key過多了會影響性能
cluster分片集群,可以將數據分散到多個redis節點,數據分片存儲,能夠提高redis的吞吐量

2.redis cluster集群特點
數據分片
多個入口
故障自動切換

3.redis cluster集群的搭建構建
redis集群至少需要三主三從

4.redis自帶集群搭建
a.目錄和機器規劃:
目錄:/data/cluster
三主:192.168.70.133:7000  		192.168.70.134:7001  		  192.168.70.136:7002
三從:192.168.70.133:8000(7002的從) 192.168.70.134:8001(7000的從)  192.168.70.136:8002(7001的從)

先把之前的環境清理,結束掉redi 和哨兵胡,再直接刪掉/data/redis/*
b.修改redis的配置文件: 只有埠和路徑不一樣
//第一臺機器
mkdir /data/cluster/7000 -p
mkdir /data/cluster/8000 -p
vim /data/cluster/7000/redis.conf
vim /data/cluster/8000/redis.conf

//第二台機器
mkdir /data/cluster/7001 -p
mkdir /data/cluster/8001 -p
vim /data/cluster/7001/redis.conf
vim /data/cluster/8001/redis.conf

//第三台機器
mkdir /data/cluster/7002 -p
mkdir /data/cluster/8002 -p
vim /data/cluster/7003/redis.conf
vim /data/cluster/8003/redis.conf

//六個配置文件都如下 只有埠和路徑需要修改對應的
vim /data/cluster/7000/redis.conf
cluster-enabled yes
port 7000
dir "/data/cluster/7000"
logfile "redis.log"
pidfile "redis.pid"
daemonize yes
bind 0.0.0.0
requirepass 123456
masterauth 123456
tcp-backlog 1024
tcp-keepalive 0
loglevel notice
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
save 900 1
save 300 10
save 60 10000
dbfilename "dump.rdb"
slave-server-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

//依次啟動
redis-server /data/cluster/7000/redis.conf  7001 7002

c.創建3主機群,在任何一個節點都行
redis-cli -a 123456 --cluster create 192.168.70.133:7000 192.168.70.134:7001 192.168.70.136:7002

redis-cli -a 123456 -p 7000 cluster info  //查看集群信息
redis-cli -a 123456 -p 7000 cluster nodes  //查看節點信息

//數據寫入會自動隨機分配到各個節點
redis-cli -a 123456 -p 7000 -c   //登錄  -c 集群環境下
127.0.0.1:7000> set k1 v1   //寫入數據發現數據被寫入 7002節點上了  
-> Redirected to slot [12706] located at 192.168.70.136:7002
OK

d.上述實現瞭解決高併發問題,下麵增加搭建3從集群,實現redis高可用
//先啟動3個從redis 192.168.70.133:8000 192.168.70.134:8001 192.168.70.136:8002  
redis-cli -a 123456 -p 7000 cluster nodes  //查看集群的各個節點狀態和master-id
//依次添加  註意:ip順序不能顛倒
redis-cli -a 123456 --cluster add-node --cluster-slave --cluster-master-id 7000master的id 192.168.70.134:8001 192.168.70.133:7000
redis-cli -a 123456 --cluster add-node --cluster-slave --cluster-master-id 7001master的id 192.168.70.136:8002 192.168.70.134:7001
redis-cli -a 123456 --cluster add-node --cluster-slave --cluster-master-id 7002master的id 192.168.70.133:8000 192.168.70.136:7002

例:
redis-cli -a 123456 --cluster add-node --cluster-slave --cluster-master-id 26533684353ab52ea0a02cb6e87299e1f15dfd50 192.168.70.134:8001 192.168.70.133:7000
//成功後查看node 可以發現已經添加了一個slave
redis-cli -a 123456 -p 7000 cluster nodes

f.驗證
//停止133:7000主庫的redis
//再查看nodes 
redis-cli -a 123456 -p 8000 cluster nodes   //會發現8001已經提升為主redis了 並且8001上的數據跟7000數據一致

//恢復133:7000 自動作為從角色運行
redis-server /data/cluster/7000/redis.conf

//手動提升為主庫
redis-cli -a 123456 -p 7000 -c  //先登錄
CLUSTER FAILOVER  //執行該命令
info  //查詢信息  可以發現成為了master

redis cluster集群增加節點和刪除節點

//在上述集群基礎上做增加節點
1.搭建新伺服器的redis
scp -r /usr/local/bin/redis-* [email protected]:/usr/local/bin/  //複製
mkdir -p /data/cluster/7003
mkdir -p /data/cluster/8003
scp -r /data/cluster/7000/redis.conf [email protected]:/data/cluster/8003/

vim /data/cluster/8003/redis.conf  //修改埠和地址
redis-server /data/cluster/7003/redis.conf  //啟動

2.加入集群
//在redis集群中加入一個新的主節點(在任意一臺集群的節點操作即可)
redis-cli -a 123456 --cluster add-node 192.168.70.132:7003 192.168.70.133:7000

//加入從節點
redis-server /data/cluster/8003/redis.conf
redis-cli -a 123456 --cluster add-node --cluster-slave --cluster-master-id 9980d04a047fa52918bb50f7a2b7b530c138f8eb 192.168.70.132:8003 192.168.70.132:7003   //加入從節點

//加入完成後但是沒有分配卡槽,不能存放數據
3.給新增的redis分配槽位(在集群的任何一個節點即可)
方法:將一個主節點的槽位移動到新主節點一部分
redis-cli -a 123456 --cluster reshard 192.168.70.133:7000  
//根據提示依次輸入1. 2000 (分配2000,也可自定只要在範圍之內) 2.接收者id 也就是7003 node的id 3.源id也就是7000 id 4.done 5.yes

4.測試
redis-cli -a 123456 -p 7003 -c  //登錄
set k4 v4   //創建 

//驗證高可用
kill 7003的進程
redis-cli -a 123456 -p 8003 cluster nodes  //可以看到8003已經成為master

redis-server /data/cluster/7003/redis.conf  //恢復

5.刪除節點(刪除節點操作也可以在任意節點操作)
redis-cli -a 123456 --cluster del-node 對應主庫的ip:埠 對應從庫的id
//移除從庫 8003節點
redis-cli -a 123456 --cluster del-node 192.168.70.132:7003 376c471158d25260e98d7d51764d78cdb7cad935

//移除主庫 7003節點 (主節點上如果有數據則不能移除,刪除之前需要把主節點的數據進行遷移)
redis-cli -a 123456 --cluster reshard 192.168.70.133:7000  //把數據還給7000 同樣根據提示操作 1. 2000 2.7000 ip 3.7003 ip 4.done 5.yes

redis-cli -a 123456 --cluster del-node 指定隨便其他的一個主庫ip:埠 對應從庫的id
redis-cli -a 123456 --cluster del-node 192.168.70.133:7000 9980d04a047fa52918bb50f7a2b7b530c138f8eb  //刪除節點 再查看節點會發現已成功刪除

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • `Matplotlib`的**坐標軸**是用於在繪圖中表示數據的位置的工具。 坐標軸是圖像中的水平和垂直線,它們通常表示為 x 軸和 y 軸。坐標軸的作用是幫助觀察者瞭解圖像中數據的位置和大小,通常標有數字或標簽,以指示特定的值在圖像中的位置。 # 1. 坐標軸範圍 `Matplotlib`繪製圖形 ...
  • 本文主要介紹 RocketMQ 的安裝部署,文中所使用到的軟體版本:RocketMQ 5.1.3、CentOS 7.9.2009。 1、RocketMQ 部署模型 1.1、部署模型說明 Apache RocketMQ 部署架構上主要分為四部分: A、生產者 Producer 發佈消息的角色。Prod ...
  • > 講解Go語言從編譯到執行全周期流程,每一部分都會包含豐富的技術細節和實際的代碼示例,幫助大家理解。 > 關註微信公眾號【TechLeadCloud】,分享互聯網架構、雲服務技術的全維度知識。作者擁有10+年互聯網服務架構、AI產品研發經驗、團隊管理經驗,同濟本復旦碩,復旦機器人智能實驗室成員,阿 ...
  • 最近在公司的項目中,編寫了幾個自定義的 Exception 類。提交 PR 的時候,sonarqube 提示這幾個自定義異常不符合 ISerializable patten. 花了點時間稍微研究了一下,把這個問題解了。今天在此記錄一下,可能大家都會幫助到大家。 ## 自定義異常 編寫一個自定義的異常 ...
  • 我們在使用一些需要購買版權的軟體產品時,或者我們做的商業軟體需要進行售賣,為了收取費用,一般需要一個軟體使用許可證,然後輸入這個許可到軟體里就能夠使用軟體。簡單的是一串序列碼或者一個許可證文件,複雜的是一個定製化插件包。於是有的小伙伴就開始好奇這個許可是怎麼實現的,特別是在離線情況下它是怎麼給軟體授... ...
  • # EF Core併發控制 # 併發控制概念 1. 併發控制:避免多個用戶同時操作資源造成的併發衝突問題。 2. 最好的解決方案:非資料庫解決方案 3. 資料庫層面的兩種策略:悲觀、樂觀 # 悲觀鎖 悲觀併發控制一般採用行鎖 ,表鎖等排他鎖對資源進行鎖定,確保同時只有一個使用者操作被鎖定的資源。 E ...
  • # Unity UGUI的Scrollbar(滾動條)組件的介紹及使用 ## 一、什麼是Scrollbar組件? Scrollbar組件是Unity中UGUI系統提供的一種UI組件,主要用於在UI界面中提供滾動條功能,使用戶可以通過滾動條來查看超出屏幕範圍的內容。 ## 二、Scrollbar組件是 ...
  • 在我寫[在.NET Framework中使用RocketMQ(阿裡雲版)]這篇博客的時候,因為封裝了很多代碼在單獨的DLL中,包括生產者、消費者以及官方SDK等等,然後都在博客中體現出來導致博客大量代碼,然後有位讀者就建議打包成NuGet包,大家也可以直接安裝調用,我也覺得很不錯,於是就有了這篇文章... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...