Django 连接redis方法
1. 按照redis模块
# 在cmd中
pip3 install redis
2. 测试代码
插入单挑数据
import redis
conn = redis.Redis(host='10.0.0.10',port=6379)
conn.set('k1','v1') # 向远程redis中写入了一个键值对
val = conn.get('k1') # 获取键值对
print(val) ############### C:\Python3\python.exe E:/day103/redis_test.py
b'v1'
3 批量插入多条数据
conn = redis.Redis(host='10.0.0.10',port=6379) conn.lpush('names_list',*['把几个','鲁宁']) #
v = conn.llen('names_list')
#
for i in range(v):
val = conn.rpop('names_list')
#从右边第一条开始pop数据
# val = conn.lpop('names_list')
# 从左边第一条开始pop数据
print(val.decode('utf-8'))
v = conn.llen('namessssss_list')
print(v) #########
C:\Python3\python.exe E:/day103/redis_test.py
把几个
鲁宁
0
3. 项目实战
给公司销售人员自动分配客户资源:
1. 创建一张新的表,关联到销售人员,配置权限和每天可分配的客户数量;
2 . 通过权重表控制销售人员的分配权重,权重数越大,越优先分配客户;
3. Django代码通过order_by从大到小排序;
4. 然后以销售人员的可分配的数据作为列表出现的个数
自动分配
分配表:
姓名 数量 权重
番禺 3 7
富贵 3 6
短期 2 9
秦晓 10 1 先获取并排序:
短期 2
番禺 3
富贵 3
秦晓 10
4. 代码实现
import redis
from crm import models POOL = redis.ConnectionPool(host='10.0.0.10',port=6379)
CONN = redis.Redis(connection_pool=POOL) class AutoSale(object): iter_users = None # iter([1,2,1,2,3,1,...])
reset_status = False @classmethod
def fetch_users(cls):
# [obj(销售顾问id,num),obj(销售顾问id,num),obj(销售顾问id,num),obj(销售顾问id,num),]
ret = models.SaleRank.objects.all().order_by('-weight')
sale_id_list = [] for row in ret:
for i in range(row.num):
sale_id_list.append(row.user.id) # cls.users = sale_id_list if sale_id_list:
CONN.rpush('saleid_list',*sale_id_list) # 自动pop数据
CONN.rpush('saleid_list_copy',*sale_id_list) # 原来的数据
return True
return False @classmethod
def get_sale_id(cls):
# 查看原来数据是否存在
sale_id_origin_count = CONN.llen('saleid_list_copy')
if not sale_id_origin_count:
# 去数据库中获取数据,并赋值给: 原数据,pop数据
status = cls.fetch_users()
if not status:
return None
user_id = CONN.lpop('saleid_list')
if user_id:
return user_id
reset = CONN.get('saleid_reset') if reset:
CONN.delete('saleid_list_copy')
status = cls.fetch_users()
if not status:
return None
CONN.delete('saleid_reset')
return CONN.lpop('saleid_list')
else:
ct = CONN.llen('saleid_list_copy')
for i in range(ct):
v = CONN.lindex('saleid_list_copy',i)
CONN.rpush('saleid_list',v)
return CONN.lpop('saleid_list') @classmethod
def reset(cls):
CONN.set('saleid_reset',1) @classmethod
def rollback(cls,nid):
CONN.lpush('saleid_list',nid)
5. 使用
form = SingleModelForm
from xxxxxx import AutoSale
sale_id = AutoSale.get_sale_id()
print(sale_id)
# 每次请求就会从redis中pop出一条数据,当pop完之后,则AutoSale会自动拷贝saleid_list_copy中的数据到saleid_list中,以便下次pop出数据
Django 连接redis方法的更多相关文章
- Django连接redis
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", &q ...
- 如何使用phpredis连接Redis的方法
本文跟大家介绍使用同一VPC内弹性云服务器ECS上的phpredis连接Redis的方法. 更多的客户端的使用方法,请参考https://redis.io/clients 前提条件 已成功申请Redi ...
- Django中redis的使用方法(包括安装、配置、启动)
一.安装redis: 1.下载: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 2.解压 tar -zxvf redis-3.2. ...
- python连接redis、redis字符串操作、hash操作、列表操作、其他通用操作、管道、django中使用redis
今日内容概要 python连接redis redis字符串操作 redis之hash操作 redis之列表操作 redis其他 通用操作,管道 django中使用redis 内容详细 1.python ...
- [技术博客]django连接mysql数据库的方法及部分问题的解决方法
配置机器介绍 操作系统:Ubuntu 18.04.2 LTS 64位 python版本:Python 3.6.7 Django版本:Django 2.2 MySql版本:5.7.26 数据库选择 我们 ...
- redis在.net架构中的应用(1)--使用servicestack连接redis(转)
引言:作为少有的.net架构下的大型网站,stackoverflow曾发表了一篇文章,介绍了其技术体系,原文链接http://highscalability.com/blog/2011/3/3/sta ...
- django+celery+redis环境搭建
初次尝试搭建django+celery+redis环境,记录下来,慢慢学习~ 1.安装apache 下载httpd-2.0.63.tar.gz,解压tar zxvf httpd-2.0.63.tar. ...
- php安装redis扩展连接redis服务器
扩展包的下载地址:https://github.com/nicolasff/phpredis/archive/2.2.4.tar.gz tar xf phpredis-2.2.4.tar.gz cd ...
- Java连接redis的使用演示样例
Java连接redis的使用演示样例 Redis是开源的key-value存储工具,redis通经常使用来存储结构化的数据,由于redis的key能够包括String.hash.listset和sor ...
随机推荐
- 【面试题】新东方.NET工程师面试题总结
1.学校几本(是否统招).英语等级.大学成绩排名Top%几.当前月薪(入职前是否能提供薪资证明材料).期望月薪 二本,统招英语四级排名top10 2.做过的项目技术栈是什么?(例如 .NET.Sql ...
- Clojure 学习入门(14)—— 循环控制
Clojure 基于函数的流程控制 repeatedly 字面意思为重复函数.一般的用法如下: #(rand-int 11)) 8 2 6 6) 重复产生5次随机数.rand-int 11表示0至 ...
- 【转】java:Session(会话)机制详解
书中讲:以下情况,Session结束生命周期,Servlet容器将Session所占资源释放:1.客户端关闭浏览器2.Session过期3.服务器端调用了HttpSession的invalidate( ...
- 如何修改 VIM 制表符的空格数?
想修改一下编辑器vi里的制表符(Tab)的空格数.因为它默认的太长(默认是8个空格). 在网上搜到了这篇文章http://my.oschina.net/captaintheron/blog/515 ...
- centos 7.1开机/etc/rc.local脚本不执行的问题
Centos 7.1中,/etc/rc.local是一个软链接文件.指向的是/etc/rc.d/rc.local 在Centos之前的版本我们都会将一些开机需要执行的命令加入到/etc/rc.loca ...
- Unity3D笔记 GUI 三、实现选项卡二窗口
实现目标: 1.使用个性化Box控件 2.个性化Lable控件 3.添加纵向滚动条 4.新建SelectedItem样式 一.最终效果: 二.主要代码 using UnityEngine; using ...
- Unity3D笔记 愤怒的小鸟<七> 小鸟群准备动画
要实现的目标: 1.3只小鸟初始动画 2.完善代码slingShot.js 3.完善代码BirdMoving.js 1.实现3个准备动画:Unity3D内置的动画管理器 1.1.先选择GameObje ...
- sublime设置tab键为4个空格
在使用sublime的时候,有时候新建的文件,默认的缩进是2个,那么如何将sublime设置tab键为4个空格呢? 具体方法: 配置: , "translate_tabs_to_spaces ...
- DISTINCT 与 GROUP BY 的比较
看了很多文章,这两个SQL语句在不同的数据库上面的实现上可能有相同或有不同,但是应当要明确它们在功能概念上的区别,最终得出结论: GROUP BY 用来使用聚集函数获得值,比如 AVG, MAX, M ...
- POJ-1414 Life Line (暴力搜索)
Life Line Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 855 Accepted: 623 Description L ...