老男孩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

猜你喜欢

转载自blog.csdn.net/qq_33060225/article/details/84755034
今日推荐