• Python连接redis方法


    1. 按照redis模块

     # 在cmd中
     pip3 install redis 

    2. 测试代码

    插入单挑数据

    import redis
    conn = redis.Redis(host='10.0.0.10',port=6379)
    conn.set('k1','v1') # 向远程redis中写入了一个键值对
    val = conn.get('k1') # 获取键值对
    print(val)
    
    
    
    ###############
    
    C:Python3python.exe E:/day103/redis_test.py
    b'v1'
    

    3 批量插入多条数据

    conn = redis.Redis(host='10.0.0.10',port=6379)
    
    conn.lpush('names_list',*['把几个','鲁宁']) #
    v = conn.llen('names_list')
    #
    for i in range(v):
        val = conn.rpop('names_list')
         #从右边第一条开始pop数据
        # val = conn.lpop('names_list')
         # 从左边第一条开始pop数据
        print(val.decode('utf-8'))
    v = conn.llen('namessssss_list')
    print(v)
    
    #########
    C:Python3python.exe E:/day103/redis_test.py
    把几个
    鲁宁
    0

     3. 项目实战

    给公司销售人员自动分配客户资源:

    1. 创建一张新的表,关联到销售人员,配置权限和每天可分配的客户数量;

    2 . 通过权重表控制销售人员的分配权重,权重数越大,越优先分配客户;

    3. Django代码通过order_by从大到小排序;

    4. 然后以销售人员的可分配的数据作为列表出现的个数

    自动分配
            分配表:
               姓名     数量      权重
               番禺       3        7
               富贵       3        6
               短期       2        9
               秦晓       10       1
              
            先获取并排序:
                短期       2
                番禺       3
                富贵       3
                秦晓       10

    4. 代码实现

    import redis
    from crm import models
    
    POOL = redis.ConnectionPool(host='10.0.0.10',port=6379)
    CONN = redis.Redis(connection_pool=POOL)
    
    
    class AutoSale(object):
    
        iter_users = None # iter([1,2,1,2,3,1,...])
        reset_status = False
    
        @classmethod
        def fetch_users(cls):
            # [obj(销售顾问id,num),obj(销售顾问id,num),obj(销售顾问id,num),obj(销售顾问id,num),]
            ret = models.SaleRank.objects.all().order_by('-weight')
            sale_id_list = []
    
            for row in ret:
                for i in range(row.num):
                    sale_id_list.append(row.user.id)
    
            # cls.users = sale_id_list
    
            if sale_id_list:
                CONN.rpush('saleid_list',*sale_id_list)  # 自动pop数据
                CONN.rpush('saleid_list_copy',*sale_id_list)  # 原来的数据
                return True
            return False
    
    
        @classmethod
        def get_sale_id(cls):
            # 查看原来数据是否存在
            sale_id_origin_count = CONN.llen('saleid_list_copy')
            if not sale_id_origin_count:
                # 去数据库中获取数据,并赋值给: 原数据,pop数据
                status = cls.fetch_users()
                if not status:
                    return None
            user_id = CONN.lpop('saleid_list')
            if user_id:
                return user_id
            reset = CONN.get('saleid_reset')
    
            if reset:
                CONN.delete('saleid_list_copy')
                status = cls.fetch_users()
                if not status:
                    return None
                CONN.delete('saleid_reset')
                return CONN.lpop('saleid_list')
            else:
                ct = CONN.llen('saleid_list_copy')
                for i in range(ct):
                    v = CONN.lindex('saleid_list_copy',i)
                    CONN.rpush('saleid_list',v)
                return CONN.lpop('saleid_list')
    
    
    
        @classmethod
        def reset(cls):
            CONN.set('saleid_reset',1)
    
        @classmethod
        def rollback(cls,nid):
            CONN.lpush('saleid_list',nid)

    5. 使用

    form = SingleModelForm
    from xxxxxx import AutoSale
    sale_id = AutoSale.get_sale_id() 
    print(sale_id)
    # 每次请求就会从redis中pop出一条数据,当pop完之后,则AutoSale会自动拷贝saleid_list_copy中的数据到saleid_list中,以便下次pop出数据

      

  • 相关阅读:
    页面滚动
    tcbRouter
    http缓存策略
    Ajax跨域
    tcp 3次握手和4次挥手
    http头字段
    http工作原理
    一个下载Windows镜像的地址
    安装MySQL-8.0.13
    配置Java,jdk环境变量
  • 原文地址:https://www.cnblogs.com/supery007/p/8145416.html
Copyright © 2020-2023  润新知