redis之使用

redis之使用

=================================python

一、自動分配、你在何時用到了自動分配?redis

答:市場部或運營部招來的新的客戶,單條(批量)錄入數據的時候,進行自動分配。數據庫

二、那是怎麼自動分配的呢?django

答:基於redis的列表實現的。至關於隊列用了。緩存

====================================服務器

自動分配(redis)

數據放緩存,爲的就是速度快
redis是支持持久化的,若是關機之後,數據已經會放在文件裏了微信

先買上一臺電腦:裝上redis服務器軟件

  - 這個服務器有個工網IP:47.93.4.198

  - 端口:6379

咱們的電腦:裝上連接redis的模塊

  - pip instaill redis
redis:說白了就是一個服務器的一個軟件,幫助咱們在內存裏面存數據

conn.lpush("names":"sss")   #往裏邊放入值

conn.lpush("names":*[地方法規","dfgdf"])  #放多個值  ,從左邊添加,至關於insert

conn.rpush("names":*[地方法規","dfgdf"])  #放多個值  ,從後面添加,至關於append

conn.lpop("names")   #一個一個從裏面取值 ,bytes類型

conn.rpop("names")   #從裏面取值 ,bytes類型

conn.llen("names")   #查看長度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import redis
conn = redis.Redis(host="192.168.20.150",port=6379)
#===========對於字符串用set,get設置,獲得值===========
conn.set("k13","v2") #向遠程redis中寫入了一個鍵值對
val = conn.get("k13") #獲取鍵值對
print(val)
conn.set("names","ss")
val2 = conn.get("names")
print(val2)

#===========對於列表的操做: lpush操做和lpop操做,(從左邊放值,從左邊取值)=============
val4 = conn.lpush("names_s",*["海燕","劉偉"])
conn.lpush('names_s',*['把幾個','魯寧']) #'魯寧','把幾個',"劉偉","海燕",
conn.delete("names_s")
v = conn.llen("names_s")
print(conn.llen("names_s")) #4
for i in range(v):
print(conn.lpop("names_s").decode("utf-8"))


# ==========對於列表的操做: rpush操做和rpop操做,(從右邊放值,從右邊取值)======
conn.rpush("abcd",[1,2,3])
conn.rpush("abcd",*["a","b","c"]) #[1,2,3],a,b,c #*表明是解包,若是不加*,放進去的就是一個列表
# conn.delete("abcd")
v = conn.llen("abcd")
# print(v) #
for i in range(v):
print(conn.rpop("abcd").decode("utf-8")) #c,b,a,[1,2,3]

在項目中應用

連接redis,吧全部的數據列表放在redis裏,吧回滾的也放在redis裏面
原來是迭代器一個一個取值,如今咱們能夠用連接redis,rpop一個一個取值

當出問題回滾的時候(或者沒有使用),咱們能夠用rpush吧它再添加進去,而後在取出來

conn.lindex("said_id_list_origin",0)   #查看索引0對應的值
第一次運行,只有數據庫有數據

若是數據庫中沒有取到值,那麼直接返回None

接下來一個一個獲取,若是取到了None,已經取完,再把備用的列表裏面的數據在放回去

分配表裏面的數據若是更新的話就須要重置了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import redis
from crm import models

POOL = redis.ConnectionPool(host='47.93.4.198', port=6379, password='123123')
CONN = redis.Redis(connection_pool=POOL)

class AutoSale(object):

@classmethod
def fetch_users(cls):
# [obj(銷售顧問id,num),obj(銷售顧問id,num),obj(銷售顧問id,num),obj(銷售顧問id,num),]
sales = models.SaleRank.objects.all().order_by('-weight')

sale_id_list = []
count = 0
while True:
flag = False
for row in sales:
if count < row.num:
sale_id_list.append(row.user_id)
flag = True
count += 1
if not flag:
break

if sale_id_list:
CONN.rpush('sale_id_list', *sale_id_list) # 自動pop數據
CONN.rpush('sale_id_list_origin', *sale_id_list) # 原來的數據
return True
return False

@classmethod
def get_sale_id(cls):
# 查看原來數據是否存在
sale_id_origin_count = CONN.llen('sale_id_list_origin')
if not sale_id_origin_count:
# 去數據庫中獲取數據,並賦值給: 原數據,pop數據
status = cls.fetch_users()
if not status:
return None

user_id = CONN.lpop('sale_id_list')
if user_id:
return user_id

reset = CONN.get('sale_id_reset')
# 要重置
if reset:
CONN.delete('sale_id_list_origin')
status = cls.fetch_users()
if not status:
return None
CONN.delete('sale_id_reset')
return CONN.lpop('sale_id_list')
else:
ct = CONN.llen('sale_id_list_origin')
for i in range(ct):
v = CONN.lindex('sale_id_list_origin', i)
CONN.rpush('sale_id_list', v)
return CONN.lpop('sale_id_list')


@classmethod
def reset(cls):
CONN.set('sale_id_reset',1)

@classmethod
def rollback(cls,nid):
CONN.lpush('sale_id_list',nid)
總結:

  一、什麼是redis?

  二、set,get對字符串作操做的,

  三、lpush,rpush,lpop,rpop對於列表作操做的

    lindex:取索引

     llen() :長度

  四、 delete :刪除 :公共的

擴展:app

redis和咱們的數據庫同樣,不能每次都連接,redis支持鏈接池ide

不推薦post

推薦

批量導入

上傳excel文件,頁面上顯示

上傳文件

一、拿到文件名和文件大小

file_obj.field_name:  文件名,

file_obj.size :文件大小

二、打開文件讀取,以寫的方式存起來

三、安裝xlrd-1.1.0的兩種方式

python setup.py  build

pip instail xlrd

四、打開excle文件作操做。拿到每個單元格的數據,寫入數據庫

吧第一行排除,能夠吧列表轉換成字典,錄入到數據庫

五、做業

  自動獲取ID

  錄入客戶表

     錄入分配表

  不在建立臨時xlsx文件,寫在內存裏面,

  寫上一個模板文件,讓用戶去下載

六、文件,用戶下載文件的兩種方式

  吧文件寫在靜態文件裏面,用a標籤去跳轉。可是這種當是可能不行

  設置響應頭(搜索django如何實現文件下載)

微信自動綁定