Redis安全与性能

Redis 作为内存型数据库,需要提供维护数据安全和应对系统故障的方法。本实训,我们会介绍 Redis 的各个持久化选项和复制选项,以提升系统的性能和数据安全性。
同时,我们还将介绍 Redis 的事务特性和流水线特性,并通过使用事务和流水线解决某些性能问题。

持久化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
复制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Redis事务与流水线

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import time
import redis

conn = redis.Redis()

# 将商品放到平台上
def add_item_to_market(itemid, sellerid, price):
    # 请在下面完成要求的功能
    #********* Begin *********#
    repertory = "inventory:" + sellerid
    item = itemid + "." + sellerid
    end = time.time() + 5
    pipe = conn.pipeline()

    while time.time() < end:
        try:
            pipe.watch(repertory)
            if not pipe.sismember(repertory, itemid):
                pipe.unwatch()
                return None
            pipe.multi()
            pipe.zadd("market", item, price)
            pipe.srem(repertory, itemid)
            pipe.execute()
            return True
        except redis.exceptions.WatchError:
            pass
    return False
    #********* End *********#

# 购买商品
def purchase(buyerid, itemid):
    # 请在下面完成要求的功能
    #********* Begin *********#
    item, sellerid = itemid.split(".")
    buyer = "users:" + buyerid
    seller = "users:" + sellerid
    repertory = "inventory:" + buyerid
    end = time.time() + 10
    pipe = conn.pipeline()

    while time.time() < end:
        try:
            pipe.watch("market", buyer)
            price = pipe.zscore("market", itemid)
            funds = int(pipe.hget(buyer, "funds"))
            if funds < price:
                pipe.unwatch()
                return None

            pipe.multi()
            pipe.hincrby(seller, "funds", int(price))
            pipe.hincrby(buyer, "funds", int(-price))
            pipe.sadd(repertory, item)
            pipe.zrem("market", itemid)
            pipe.execute()
            return True
        except redis.exceptions.WatchError:
            pass
    return False
    #********* End *********#

感谢大家的支持!!!!!!!

猜你喜欢

转载自blog.csdn.net/weixin_44196785/article/details/109964862