Nosql

    xiaoxiao2025-06-16  10

    Npsql配置文件

    第69行设置主人的ip 和端口 以及选举是晋升主人需要的票数 第71行设置主人的密码,以便哨兵和主人保持连接 第98行设置主人崩溃多长时间后重选主人 启动哨兵 redis sentinel.conf –sentinel 在实际工作,会有一个负载均衡器,一个负载均衡器下面有多个节点,而一组主从复制的redis,只是其中的一个节点,我们在程序中连接redis是连接负载均衡器的地址。这样我们就不用担心,更换master时更换地址 负载均衡 硬件:F5/A10 软件: Nginx + 负载均衡算法 LVS 避免单点故障 负载均衡+双活 Keepalived:就相当于Redis的Sentinel

    用redis实现数据持久化

    from hashlib import sha1 from urllib.parse import urljoin import pickle import re import requests import zlib from bs4 import BeautifulSoup from redis import Redis def main(): # 指定种子页面 base_url = 'https://www.zhihu.com/' seed_url = urljoin(base_url, 'explore') # 创建Redis客户端 client = Redis(host='1.2.3.4', port=6379, password='1qaz2wsx') # 设置用户代理 headers = {'user-agent': 'Baiduspider'} # 通过requests模块发送GET请求并指定用户代理 resp = requests.get(seed_url, headers=headers) # 创建BeautifulSoup对象并指定使用lxml作为解析器 soup = BeautifulSoup(resp.text, 'lxml') href_regex = re.compile(r'^/question') # 将URL处理成SHA1摘要(长度固定更简短) hasher_proto = sha1() # 查找所有href属性以/question打头的a标签 for a_tag in soup.find_all('a', {'href': href_regex}): # 获取a标签的href属性值并组装完整的URL href = a_tag.attrs['href'] full_url = urljoin(base_url, href) # 传入URL生成SHA1摘要 # 因为如果直接用href_proto,每次更新的内容前面都会有前面的内容 # 通过复制对象来使用对象 原型模式,比用构造器要快的多 hasher = hasher_proto.copy() hasher.update(full_url.encode('utf-8')) field_key = hasher.hexdigest() # 如果Redis的键'zhihu'对应的hash数据类型中没有URL的摘要就访问页面并缓存 if not client.hexists('zhihu', field_key): html_page = requests.get(full_url, headers=headers).text # 对页面进行序列化和压缩操作 zipped_page = zlib.compress(pickle.dumps(html_page)) # 使用hash数据类型保存URL摘要及其对应的页面代码 client.hset('zhihu', field_key, zipped_page) # 显示总共缓存了多少个页面 print('Total %d question pages found.' % client.hlen('zhihu')) # 设置数据的存活时间,可以用ttl在redis中查看存活时间 client.expire('zhihu', 500) if __name__ == '__main__': main() 推送服务 PC端 - websocket / SockJS / STOMP 移动端 - 第三方平台(极光、百度、小米、友盟) Mongodb """

    mongodb基本操作

    use 数据库名db.student.find()db.student.insert({})db.student.find({‘age’:{‘gt’:25, ‘lt’:30}}) 找到年龄大于25小于30的

    前面是筛选条件,后面是要添加或修改的内容,如果有这个键,就修改,没有就添加

    db.student.update({’_id’: 12},{’$set’:{‘tel’: 1233}})

    mongodb教程

    用python操作mongodb

    import pymongo def main(): # client = pymongo.MongoClient('mongo://47.98.172.171:27017') client = pymongo.MongoClient(host='47.98.172.171', port=27017) db = client.zhihu print(`在这里插入代码片`client) # 创建一个叫webpa

    ges的集合 pages_cache = db.webpages # 插入一条数据,并返回这条数据的对象 page_id = pages_cache.insert_one({‘url’: ‘http:www.baidu.com’}) # 返回这条数据的id print(page_id.inserted_id) # 删除{‘url’: ‘http:www.baidu.com’}这条数据 # print(pages_cache.remove({‘url’: ‘http:www.baidu.com’})) # 一次性插入多条命令 pages_cache.insert_many([ {’_id’: 1, ‘url’: ‘http://www.baidu.com ‘, ‘content’: ‘shit’}, {’_id’: 2, ‘url’: ‘http://www.qq.com ‘, ‘content’: ‘another shit’}, {’_id’: 3, ‘url’: ‘http://www.qfedu.com ‘, ‘content’: ‘biggest shit’} ]) # 更新数据,KaTeX parse error: Expected 'EOF', got '#' at position 27: …基础上进行添加或更新 #̲ upsert=True 表示…set’: {‘content’: ‘hello, world!’}}, upsert=True)) # 查找集合中共有多少文档 print(pages_cache.find().count()) # 将找到的文档按id排序 for doc in pages_cache.find().sort(’_id’): print(doc)

    # 支持插入文档套文档的文档 pages_cache.insert_one({ 'url': 'http://www.baidu.com', 'content': 'bull shit!', 'owner': { 'name': 'Lee Yanhong', 'age': 50, 'idcard': '110220196804091203' } })

    if name == ‘main’: main()

    最新回复(0)