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 modelsPOOL = redis.ConnectionPool(host='47.93.4.198', port=6379, password='123123')
CONN = redis.Redis(connection_pool=POOL)class AutoSale(object):@classmethoddef 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 = 0while True:flag = Falsefor row in sales:if count < row.num:sale_id_list.append(row.user_id)flag = Truecount += 1if not flag:breakif sale_id_list:CONN.rpush('sale_id_list', *sale_id_list)  # 自动pop数据CONN.rpush('sale_id_list_origin', *sale_id_list)  # 原来的数据return Truereturn False@classmethoddef 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 Noneuser_id = CONN.lpop('sale_id_list')if user_id:return user_idreset = CONN.get('sale_id_reset')# 要重置if reset:CONN.delete('sale_id_list_origin')status = cls.fetch_users()if not status:return NoneCONN.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')@classmethoddef reset(cls):CONN.set('sale_id_reset',1)@classmethoddef 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如何实现文件下载)

三、微信自动绑定

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

 

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

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

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

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

答:基于redis的列表实现的。相当于队列用了。

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

转载于:https://www.cnblogs.com/TheLand/p/9140697.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GroupID和ArtifactID

GroupID是项目组织唯一的标识符&#xff0c;实际对应JAVA的包的结构&#xff0c;是main目录里java的目录结构。 ArtifactID就是项目的唯一的标识符&#xff0c;实际对应项目的名称&#xff0c;就是项目根目录的名称。

解决报错:java.lang.NoSuchMethodException: com.tangyuan.entity.RicherProduct.<init>()

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.报错;java.lang.NoSuchMethodException: com.tangyuan.entity.RicherProduct.<init>() 2. 我看到网上有人说是因为少写这一句&…

从另一个角度看大数据量处理利器:布隆过滤器

思路&#xff1a;从简单的排序谈到BitMap算法&#xff0c;再谈到数据去重问题&#xff0c;谈到大数据量处理利器&#xff1a;布隆过滤器。 情景1&#xff1a;对无重复的数据进行排序 给定数据&#xff08;2&#xff0c;4&#xff0c;1&#xff0c;12&#xff0c;9&#xff0c…

例题练习

1,购物车 功能要求&#xff1a;要求用户输入自己拥有总资产&#xff0c;例如&#xff1a;2000显示商品列表&#xff0c;让用户根据序号选择商品&#xff0c;加入购物车购买&#xff0c;如果商品总额大于总资产&#xff0c;提示账户余额不足&#xff0c;否则&#xff0c;购买成功…

A端,B端,C端

A端是开发界面。即管理员所接触的界面。 B端是商家界面。即浏览器界面&#xff0c;依托于web界面。 C端是用户界面。即app的界面&#xff0c;用户所接触最为广泛的界面。

怎么用js动态 设置select中的某个值为选中项

可以使用javascript和jQuery两种实现方式 1&#xff1a;使用javascript实现 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org…

java常用简略语含义

首先这些对象都应用都是一些单词的简称&#xff0c;也是一种应用思想&#xff0c;故其他语言也可以使用&#xff0c;在 Java 里比较常见这些对象吧。下面来一一解释。 一、POJO&#xff08;Plain Ordinary Java Object&#xff09;。 简单而言&#xff0c;就是一个简单的对象&…

并行计算的强大

最近在处理一批数据&#xff0c;10的8次方&#xff0c;处理完毕大概要一个月&#xff0c;并且这个程序占用的CPU只有一个&#xff08;我从来没有注意到这个问题啊啊啊&#xff09;。 突然师兄提醒我可以把10的8次方条数据拆成10个10的7次方&#xff0c;作为10条任务并行处理&a…

Kubernetes集群(概念篇)

Kubernetes介绍 2013年docker诞生&#xff0c;自此一发不可收拾&#xff0c;它的发展如火如荼&#xff0c;作为一个运维如果不会docker&#xff0c;那真的是落伍了。 而2014年出现的kubernetes&#xff08;又叫k8s&#xff09;更加炙手可热&#xff0c;我想大部分人仅仅是听说过…

cannot resolve symbol xxxx问题

1.File->Invalidate Caches/Restart 清除缓存重启 2.还不行就maven -> Reinport

$(“#addLowForm“).serialize()同时提交其它参数的写法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 原本写法&#xff1a; 2. 不光传表单参数&#xff0c;还有别的参数的写法&#xff1a;

JAVA自学笔记25

JAVA自学笔记25 1、GUI 1&#xff09;图形用户接口&#xff0c;以图形的方式&#xff0c;来显示计算机操作的界面&#xff0c;更方便更直观 2&#xff09;CLI 命令行用户接口&#xff0c;就是常见的Dos&#xff0c;操作不直观 3&#xff09; 类Dimension 类内封装单个对象…

360——新式的流氓

360确实是一种新式的流氓。提供一些很多用户有用的工具&#xff0c;然后在同时&#xff0c;也提供一些流氓性的工具或者流浪性的推广方法&#xff0c;比如&#xff1a;对360浏览器&#xff0c;360桌面等工具&#xff0c;通过暗示性的广告语进行推广&#xff0c;而对于安装的诸多…

跳板机

现在一定规模互联网企业&#xff0c;往往都拥有大量服务器&#xff0c;如何安全并高效的管理这些服务器是每个系统运维或安全运维人员必要工作。现在比较常见的方案是搭建堡垒机环境作为线上服务器的入口&#xff0c;所有服务器只能通过堡垒机进行登陆访问&#xff0c;合格的堡…

Map是不是集合?

Map是不是集合&#xff1f; 一、起因 今天在一个群里跟几位朋友就“map是不是集合“”争执了起来&#xff1b;几位朋友一致认为map不是集合&#xff0c;他们说只有Collection接口下的才是集合&#xff0c;而我认为Collection和Map下的实现类都是集合类。二、发展 于是我开始在…

JAVA自学笔记08

JAVA自学笔记08 1、构造方法私有&#xff0c;外界就不能再创建对象 2、说明书的制作过程 1&#xff09;写一个工具类&#xff0c;在同一文件夹下&#xff0c;测试类需要用到工具类&#xff0c;系统将自动编译工具类&#xff1b;工具类的成员方法一般是静态的&#xff0c;因此…

创业,不能兼职

一直在寻找靠谱的技术人才加入自己的创业团队。这个靠谱&#xff0c;不仅是技术靠谱&#xff0c;还要有相同的价值观。价值观的概念也很广泛&#xff0c;除了人品&#xff0c;还有对一些涉及到做人做事最本质的一些理念要相同。最起码的一条是&#xff0c;你是不是真的想好了决…

Java 集合系列07之 Stack详细介绍(源码解析)和使用示例

转载 http://www.cnblogs.com/skywang12345/p/3308852.html转载于:https://www.cnblogs.com/lizhouwei/p/9162251.html

@Controller和@RestController的区别

RestController注解相当于ResponseBody &#xff0b; Controller合在一起的作用。 1)如果只是使用RestController注解Controller&#xff0c;则Controller中的方法无法返回jsp页面&#xff0c;配置的视图解析器InternalResourceViewResolver不起作用&#xff0c;返回的内容就是…

spring AOP解说

1.aop切面编程就是在常规的执行java类中方法前或执行后加入自定义的方法。 比如你本来每天都去打酱油&#xff0c;去&#xff0c;打酱油&#xff0c;回。 现在我每天在你打酱油路上等着&#xff0c;你去打酱油的时候我打你一顿&#xff0c;回来的时候给你点糖果吃。 你根本不…