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出數據

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM