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