redis

目录:

  1、自动分配(redis)

    - 批量导入

  2、微信自动绑定

  3、django的ORM做不了的操作,怎么自定义操作数据库

    extra

    ’

  4、报表

    公司每个月销售的业绩

  5、权限

=================================

1、自动分配、你在什么时候用到了自动分配?

答:市场部或运营部招来的新的客户,单条(批量)录入数据的时候,进行自动分配。

2、那你们是怎么自动分配的呢?

答:基于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")   #查看长度

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,已经取完,再把备用的列表里面的数据在放回去

分配表里面的数据如果更新的话就需要重置了。

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)

总结:

  1、什么是redis?

  2、set,get对字符串做操作的,

  3、lpush,rpush,lpop,rpop对于列表做操作的

    lindex:取索引

     llen() :长度

  4、 delete :删除 :公共的

 扩展:

redis和我们的数据库一样,不能每次都链接,redis支持连接池

不推荐

 推荐:

二、批量导入

上传excel文件,页面上显示

上传文件

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

file_obj.field_name:  文件名,

file_obj.size :文件大小

2、打开文件读取,以写的方式存起来

3、安装xlrd-1.1.0的两种方式

python setup.py  build

pip instail xlrd

4、打开excle文件做操作。拿到每一个单元格的数据,写入数据库

吧第一行排除,可以吧列表转换成字典,录入到数据库

5、练习

  自动获取ID

  录入客户表

     录入分配表

  不在创建临时xlsx文件,写在内存里面,

  写上一个模板文件,让用户去下载

6、文件,用户下载文件的两种方式

  吧文件写在静态文件里面,用a标签去跳转。但是这种当是可能不行

  设置响应头(搜索django如何实现文件下载)

三、微信自动绑定

前提:公司里的每一个人都得关注公众号,才可以给推送消息

Redis数据类型之列表操作的更多相关文章

  1. redis数据类型及订阅操作

    Redis数据类型详解 Redis键/值介绍 Redis key值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如“foo”的简单字符串到一个JPG文件的内容都可以.空字符串也是有效k ...

  2. Redis数据类型之列表(list)

    1. 什么是列表 redis的列表使用双向链表实现,往列表中放元素的时候复杂度是O(1),但是随机访问的时候速度就不行了,因为需要先遍历到指定的位置才可以取到元素. 既然列表是使用链表实现的,那么就说 ...

  3. Redis数据类型之列表List

    Redis列表简介 Redis列表是简单的字符串列表,一个列表最多可以包含 232 - 1 个元素.列表按照插入顺序排序,可以从列表的头部或者尾部添加元素 上图演示了使用LPUSH向列表中插入元素,并 ...

  4. 【Redis学习之五】Redis数据类型:列表和散列

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 redis-2.8.18 一.列表 基于Linked Lis ...

  5. redis 数据类型之列表

    1.lpush lpush(name,values) # 在name对应的list中添加元素,每个新的元素都添加到列表的最左边 # 如: # conn.lpush('oo', 11,22,33) # ...

  6. Redis数据类型之散列表

    Redis五大数据类型以及操作 目录: 一.redis的两种链接方式 二.redis的字符串操作(string) 三.redis的列表操作(list) 四.redis的散列表操作(类似于字典里面嵌套字 ...

  7. Redis五大数据类型的常用操作

    在上一篇博文<centos安装redis>中,已经详细介绍了如何在centos上安装redis,今天主要介绍下Redis五大数据类型及其五大数据类型的相关操作. Redis支持五种数据类型 ...

  8. 缓存数据库-redis数据类型和操作(list)

    转: 狼来的日子里! 奋发博取 缓存数据库-redis数据类型和操作(list) 一:Redis 列表(List) Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素导列表的头部( ...

  9. Redis系列(二):Redis的数据类型及命令操作

    原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...

随机推荐

  1. 阶段3 3.SpringMVC·_01.SpringMVC概述及入门案例_04.入门程序之搭建开发环境

    选择骨架构建 默认选中next-然后finish后就会去网上下载插件.会比较耗费时间. 添加一组键值对: archetypeCatalog internal 添加了这组坚持对,就可以解决Mavn项目创 ...

  2. 关于 if __name__ == '__main__':的使用

    当是用  if __name__ == '__main__': 时,下面调用函数只是在当前脚本调试, 而我们需要在别处导入这个脚本中的类或者函数时,这个if __name__ == '__main__ ...

  3. eigenvalues problem

    由于在看paper中经常会看到generalized eigenvalues.eigenvalues problem等字眼,今晚终于开始认真地重新看了一下线性代数中这部分内容.下面是在学习过程中找出来 ...

  4. kernel function

    下面这张图位于第一.二象限内.我们关注红色的门,以及“北京四合院”这几个字下面的紫色的字母.我们把红色的门上的点看成是“+”数据,紫色字母上的点看成是“-”数据,它们的横.纵坐标是两个特征.显然,在这 ...

  5. JavaScript 奇怪的代码

    错误代码: var input = document.getElementsByTagName("input"); for (var i=0; i<input.length; ...

  6. TypeError: reduction operation 'argmax' not allowed for this dtype

    这个错误真的tmd伤脑筋.我用idxmax函数去求series类型的最大值的索引,结果明明是下面这种数据, 无论我如何pint他的shape,type,他怎么看都是一个满足idxmax函数要求的参数类 ...

  7. windows OS安全配置【持续更新20190618】

    https://www.52stu.org/?p=76 来源:5号暗区 5号黯区 五号黯区 5号暗区 windows系统的一些加固方法等 关闭445端口: REG ADD HKLM\SYSTEM\Cu ...

  8. flask url_for的用法

    from flask import Flask,url_for app = Flask(__name__) @app.route('/') def hello_world(): print(url_f ...

  9. start-all.sh启动HDFS,datanode没有启动

    第一次格式化dfs后,启动并使用hadoop,之后如果再次重新执行了格式化(hdfs namenode -format) start-all.sh启动时就会遇到datanode无法启动的问题,通常情况 ...

  10. webpack的插件 http-webpack-plugin。 webpack-dev-server

    自动的生成: bundle.js  和 index.html 在该项目的目录下:npm init -yes npm install vue -D npm install webpack@3.12.0 ...