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. 百度地图POI爬取

    我们研究生的课程内容,做下笔记记录一下. 使用的python环境是python3.7 用的图大部分都是老师ppt里的图,懒得自己截了-- 申请百度开发者密匙 (1)注册百度用户,注册过的话,直接登录就 ...

  2. 【图形学手记】Inverse Transform Sampling 逆转换抽样

    需求: 我们通过调查,得知大多数人在20岁左右初恋,以20岁为基准,以随机变量X表示早于或晚于该时间的年数,为了简单,假设X值域为[-5,5],并且PDF(X)是一个正态分布函数(当然可以为任意分布, ...

  3. 关于js函数闭包的理解

    在开始之前我们先来了解一下函数的变量作用域 JavaScript 变量可以是局部变量或全局变量. 私有变量可以用到闭包. 全局变量 函数可以访问由函数内部定义的变量,如: 实例1 function m ...

  4. Day06:抽象类、接口和内部类(上)

    JVAV中的常量 什么是常量? 常量就是不会变化的数值 为什么需要常量? 方便使用(调用)不会变化的数值 特性 不能修改 所有对象共享 常量一定是成员 定义 public static final 类 ...

  5. How do I add a Foreign Key Field to a ModelForm in Django?

    What I would like to do is to display a single form that lets the user: Enter a document title (from ...

  6. 【PI系列】SAP IDOC发送状态03,PI没有收到消息的解决办法

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[PI系列]SAP IDOC发送状态03,PI没 ...

  7. 【VS开发】【图像处理】Pleora推出iPORT CL-U3外置抓帧器

    全球领先的高性能视频接口产品供应商Pleora科技公司近日宣布推出可将Camera Link®摄像头转化为USB3Vision™摄像头的首个产品iPORT CL-U3外置抓帧器,树立了另一个行业里程碑 ...

  8. 【DSP开发】shared memory VS mailbox

    Hello, Hi everyone, I have a simple question. Could anyone explain to me the difference between Mail ...

  9. 跨域设置之corsheaders

    安装 pip install django-cors-headers 注册应用 INSTALLED_APPS = ( ... 'corsheaders', ... ) 中间层设置 MIDDLEWARE ...

  10. Cause: org.xml.sax.SAXParseException: The content of elements must consist of well-formed character data or markup.

    Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org ...