1. 程式人生 > >老男孩14期自動化運維day11隨筆和作業(二)

老男孩14期自動化運維day11隨筆和作業(二)

1.快取系統(broker)

程序間通過快取實現記憶體共享(程序到快取系統(broker 中介軟體)採用socket)
主流快取系統 Redis mongodb memcache 自己也可以寫

幾個快取系統的區別:

mongodb 不需要配置,直接持久化 往記憶體存東西,會同步到硬碟
redis (半持久化)預設存在記憶體,必須要手動或者配置才能同步到硬碟
memcache 只能在記憶體裡,不能持久化(輕量級快取)

(1)簡單版的redis連線:

import redis

r=redis.Redis(host='172.16.95.132',port=
6379) r.set('foo','Bar') print(r.get('foo'))

(2)通過連線池的連線:


'''使用連線池 連redis'''
import redis

pool=redis.ConnectionPool(host='172.16.95.132',port='6379')

r=redis.Redis(connection_pool=pool)


r.set('foo','Bar')


print(r.get('foo'))

(3)訊息接收:

'''訊息接收'''
from redishelper import RedisHelper

obj=
RedisHelper() redis_sub=obj.subscribe() while True: msg=redis_sub.parse_response() print(msg)

2.Redis

Redis 是單執行緒的,通過epoll IO多路複用(並不是真正的非同步IO)實現的併發,每秒鐘一臺機器併發能達到8萬-10萬,效率很高

啟動redis服務端 redis目錄下 src/redis-server
啟動redis客戶端 redis 目錄下 src/redis-cli
在終端下:
set name yang 第一個引數是key(name) 第二個引數是value(yang)
get name 獲取值
set name yang ex 2 (ex 2 表示只保留2s)

redis 中設定值 預設,不存在則建立,存在則修改
ex 過期時間 s
px 過期時間 ms
nx 如果為True 只有key不存在時當前set才執行
xx 如果為True 只有key存在時當前set才執行

3.Redis 操作

(1)String操作
剩下的在部落格找 小寫大寫無所謂
setnx key value key不存在時才建立
setex key value time 過期s
mset K1 V1 K2 V2 批量set
mget K1 K2 批量get

一個String 操作很牛逼的例子:

setbit 可以解決優化使用者量在億級以上通過redis展示線上使用者量,及檢視該使用者是否線上(不用通過資料庫 寫入資料太大 效率慢)

setbit key offset(位的索引) value (value的值只能是1或0)

比如 第二個引數 offset 指的是將裝換為二進位制後的索引 例如:setbit n1 7 1 (n1的值為’foo’ ) 意思是 設定
'foo’轉為二進位制後 為 01100110 01101111 01101111 把 第七位 設為 1 變成 01100111
01101111 01101111 再get n1 就從’foo’變成’goo’了

當有億級使用者 每增加一個使用者 就 setbit n2 600 1 (意思是把n2 的二進位制第600為設為1 就相當於使用者id=600)
所以就可以實現: (1)檢視使用者id為600的使用者是否線上 就 getbit n2 600 (結果為(integer 1) 為1就表示線上
為0就表示沒線上 ) (2)檢視有多少使用者線上 就 bitcount n2 (結果為多少,就有多少使用者線上
bitcount是查詢二進位制有多少個1)

(2)list、set 操作
見部落格

(3)hash操作
hset info name yang
hset info age 22
hget info name
hgetall info
hkeys info
hvals info

4.day11作業

題目:rpc命令端

需求:

可以非同步的執行多個命令
對多臺機器
">>:run “df -h” --hosts 192.168.3.55 10.4.3.4
task id: 45334
">>: check_task 45334
">>:

思路:
通過rabbitMQ實現基於rpc服務的多併發非同步遠端主機命令處理

rpc服務:遠端命令呼叫

在client端通過指定queue傳送命令和任務ID到server端,server端判定命令中的ip是否有本機ip,有本機ip
則執行命令,並通過隨機queue返回命令結果和任務ID,client端輸入任務ID即可獲取命令執行的結果,實現
非同步處理,可以一次性發送多個命令到主機,然後通過任務ID獲取命令結果

github:https://github.com/yyyhhhrrr/rpc_host_manage