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如何实现文件下载)

微信自动绑定