关于消息队列
PY 中应用程序里对于消息队列的使用:
1 threading QUEUE
2 进程QUEUE 父进程、父进程下的子进程间进行交互
RabbitMQ 消息队列 :用于应用程序之间,可跨平台的进行通信
RabbitMQ依赖于语言erlang
实例代码举例:20180815 先要安装erlang和pika
pika是python连接RabbitMQ模块的主要工具,celery是很火的分布式任务队列,还有一个叫haigha.
RabbitMQ消息基本实例轮训分发确保消息完成消息可持续消息公平分发
RabbitMQ fanout广播模式:fanout_publisher 实时的,当时在线的才能收到。订阅发布,等同于收音机机制
RabbitMQ direct广播模式:分类/级别,只有接受该级别的才能收到
topic细致的消息过滤广播模式:(consumer如果想收所有,后面跟着 # 号则收所有)
缓存存储系统:mongodb、redis、memcache 只能存在内存 轻量级缓存
redis 是一个异步单线程 Key-value缓存系统。
set key value
set key value nx 只有key不存在时,才添加keyvalue对
set key value xx 只有key存在时,才更改key的value
set key ex value 设置超时时间 s
pset key ex value 设置超时时间毫秒
mset 批量设置 如果命令不会用,可以help cmd_str查看命令说明
get 取值
mget 批量取值
getset 设置更改新值并返回之前的值
getrange 相当于取到后给字符串切片操作
setrange 给起点为那个的后面进行赋值
setbit 给二进制位更改值 可以更改二进制位的值,引申为存储上亿的人的ID号等功能。让数据存储量最大化
incr 自增
incrbyfloat
decr 自减
append 追加
RabbitMQ rpc的实现:有发送有返回(远程函数调用remote procedure call)
Redis 对hash操作 hset XXX hgetall XXX hget XXX YYY hkeys XXX hvals XXX hmset hmget hlen hexists hincrby.....hscan hscan_inter
Redis 对集合set的操作
操作列表:lpush names aa bb cc 从左边放入 lrange names 0 -1
rpush names 从右边放 lrange names 从左边拿
lpushx 只有列表存在才放入数据
llen
linsert linsert names after/before aaa bbb
lset names 1 bbb
lrem names 2 test
lpop 从左侧获取第一个元素并移除
lindex
lrange
ltrim 只保留所写的部分值,其他都移除
rpoplpush 从一个列表里右边取出来一个,放到另一个列表的最左边
blpop 删掉并返回 并且可设置无数据时的等待时间
brpoplpush 对一个放一个收的操作,可设置超时时间的命令
对集合的操作:
sadd names 直接去重
smembers names 集合不能用切片形式获取值,因为它是无序的
sdiff 比较两个集合差集
sdiffstore newset set1 set2
sinter 交集
sinterstore
sismember
smembers
smove
spop 右侧尾部移除一个并返回
srandmember 随机获取number个值
srem删除指定的值
sunion 获取并集
sunionstore
sscan 查找 匹配
sscan_inter 同上,但返回一个迭代器
有序集合:
zadd z1 10 alex 5 jack 8 rain 6 jain
zrange 显示值 根据权重从小到大排列 withscores 显示分数
zcount 统计数量
zincrby 自增分数
zrank 获取某个值在该有序队列的排行,从0开始
zrangebylex
zrem 删除
zremrangebyrank 范围内删除
zremrangebyscore
zsore
zinterstore 获取交集 并将scores相加存储
zunionstore 获取并集
zcan_inter 过滤并返回迭代器
Redis对元素的操作函数
del
exists
keys 根据模型获取redis的name
expire 为某个name设置超时时间
rename
move 从元素保存到db redis有15个db
randmkey 随机获取一个key
type 获取类型
scan 检索
redis-py管道
示例写错了,应该是用pipe去set值,这里注意一下
发布与订阅:
Redis 对有序集合的操作
本周作业:
可以异步的在多台机器上执行多个任务