[데이터베이스] 레디 스 데이터 형식

내용 :

  1 자동 할당 (레디 스)

    - 일괄 가져 오기

  바인딩 자동 2 마이크로 채널

  3, 장고의 ORM가 작업을 할 수 없어, 데이터베이스 작업을 사용자 지정하는 방법

    특별한

    '

  4, 보고서

    이 회사의 월간 판매 실적

  5 권한

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

1, 자동 할당, 당신은 어떤 시간에 자동 할당을 사용할 수 있습니까?

A : 마케팅이나 운영은 새로운 고객, 단일 (배치) 데이터 입력 시간, 자동 할당을 끌었다.

2, 그건 당신이 자동으로 할당하는 방법이다?

A : 구현 목록 레디 스 기준으로합니다. 그것은 큐에 대응한다.

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

자동 분배 (레디 스)

속도를 위해 데이터 캐시를 넣어

데이터가 배치 될 파일에 이미 후 종료하면 레디 스는 지속적인 지원

설치 레디 스 서버 소프트웨어 : 컴퓨터를 구입하려면,

  - 서버가 작동하는 네트워크 IP를 가지고 : 47.93.4.198

  - 포트 : 6379

우리의 컴퓨터 : 모듈 링크 레디 스를 설치

  - 핍 instaill의 레디 스

레디 스 : 흰색이 소프트웨어 서버 인 것을, 우리가 내부 메모리에 데이터를 저장하는 데 도움이

 conn.lpush ( "이름": "SSS") # 왕 Libian 값을 넣어

 conn.lpush ( "이름"* 지방 법령 ","dfgdf "]) # 삽입 더 왼쪽에서 부가가치 동등한 넣어

 conn.rpush ( "이름": * [지역 법률 및 규정 ","dfgdf "]) # 뒤에서 추가 더 많은 가치를 넣어 상응하는 추가하기

conn.lpop ( "이름") 내부에서 # 값 a는 입력 바이트

conn.rpop ( "이름") 바이트 내부 입력에서 # 값

 conn.llen ( "이름") #보기 길이

레디 스 가져 오기 
코네티컷 주 = redis.Redis (호스트 = "192.168.20.150"는 = 6379 포트) # =========== 문자열 세트, 설정 얻을, 값이 ======= 획득 ==== 
conn.set ( "K13", "V2")에서 원격 레디 스에 키를 작성 # 
발 = conn.get ( "K13") #이 얻을 키 - 값 쌍의 
인쇄 (발) 
conn.set ( "이름", "SS") 
을 val2 = conn.get ( "이름") 
인쇄 (을 val2) # ===========하여 목록의 동작 : 넣어 왼쪽에서 lpush 운영 및 lpop 작동, ( 값이 왼쪽에서 값) ============= 
VAL4 = conn.lpush ( "names_s"* "류", "삼"]) 
conn.lpush를 ( 'names_s' * '횟수', 'Luning']) # '루 닝 ","숫자 ","리우 ","삼 " 
conn.delete ("names_s ") 
conn.llen V = (" names_s ") 
인쇄 (conn.llen ("names_s ")) 4 #. 
범위에서 I에 대한 (V) : 
    . 인쇄 (conn.lpop ( "names_s") (디코딩)) "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") 
# 인쇄 (V) #이 
범위의 난에 대한 (V) : 
    인쇄 (.. "UTF-8"conn.rpop ( "ABCD") 디코드 ()) #의 C, B, A, [1,2,3]
 

 

프로젝트의 응용 프로그램

레디 스 링크, 그것은 또한 레디 스 내부에 배치 롤백 레디 스에있는 모든 데이터를 나열

 

반복자 값으로 밝혀졌다, 우리는 이제 링크 레디 스는의 값을 rpop 수 있습니다

문제 롤백 (또는하지를 사용) 할 때, 우리는 rpush에게 그것을에서 추가 사용 후 반출 할 수 있습니다

인덱스 뷰의 값에 대응 conn.lindex ( "said_id_list_origin", 0) 0 #

 

첫 번째 실행 만 데이터베이스 데이터

값은 다음 데이터베이스, 직접 반환 없음에 액세스 할 수없는 경우

없음으로 촬영하는 경우 다음 중 하나를 얻기, 당신은 다시 방전 내부 완료 후 대기 목록 데이터를 가지고 가야

업데이트해야 할 경우 내부 할당 테이블 데이터는 다음 다시 설정합니다.

 

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

三、微信自动绑定

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

추천

출처www.cnblogs.com/xqjoker/p/11127649.html