老男孩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才执行

扫描二维码关注公众号,回复: 4696466 查看本文章

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