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:\Python3\python.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:\Python3\python.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出数据

 

  

posted @ 2017-12-29 17:03  Pythia丶陌乐  阅读(12402)  评论(0编辑  收藏  举报