Redis

1、简介

        Redis 是一个 key-value 存储系统,是跨平台的非关系型数据库

        Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API

        Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型

2、应用

        当需要频繁地读取数据库中的某条记录时,可将其放入 Redis 缓存中,减少数据库的链接读取操作

3、实战

database_operation(project)

models.py

from django.db import models


# Create your models here.
class PersonModel(models.Model):
    id = models.CharField(db_column='id', primary_key=True, max_length=255)
    name = models.CharField(db_column='name', max_length=255)
    description = models.CharField(db_column='description', max_length=1000)
    age = models.CharField(db_column='age', max_length=255)
    goodtotal = models.IntegerField(db_column='goodtotal', default=0)
    moneytotal = models.FloatField(db_column='moneytotal', default=0.0)
    goodused = models.IntegerField(db_column='goodused', default=0)
    moneyused = models.FloatField(db_column='moneyused', default=0.0)

urls.py

from django.conf.urls import url
from base_operation.views import Tenant

urlpatterns = [
    url(r'^person$', Tenant.as_view()),
]

views.py

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from base_operation.models import PersonModel
import redis


# Create your views here.
class Tenant(APIView):
    def __init__(self):
        self.pool = redis.ConnectionPool(host='127.0.0.1')
        self.redis = redis.Redis(connection_pool=self.pool)

    def get(self, request_paras, *args, **kwargs):
        # person_data = {
        #     "id": '001',
        #     "name": 'su',
        #     "description": 'first person',
        #     "age": '18',
        #     "goodtotal": 100,
        #     "moneytotal": 100.0,
        #     "goodused": 20,
        #     "moneyused": 10.0
        # }
        # PersonModel.objects.create(**person_data)

        info_person = PersonModel.objects.filter(id='001').values('name').first()
        print(info_person)
        # name = self.redis.get('name')
        # print('name in redis is %s' % name)
        # if name:
        #     info_person = name
        # else:
        #     info_person = PersonModel.objects.filter(id='001').values('name').first()
        #     # print(info_tenant, type(info_tenant))
        #     self.redis.set('name', info_person['name'])

        return Response(status=status.HTTP_200_OK, data=info_person)

tests.py

from django.test import TestCase
from django.test import Client
import time
from base_operation.models import PersonModel


# Create your tests here.
class RedisTest(TestCase):
    def setUp(self):
        self.base_url = '127.0.0.1:8000'
        self.client = Client()
        self.exist_person0_data = {
            "id": '001',
            "name": 'su',
            "description": 'first person',
            "age": '18',
            "goodtotal": 100,
            "moneytotal": 100.0,
            "goodused": 20,
            "moneyused": 10.0
        }
        PersonModel.objects.create(**self.exist_person0_data)

    def tearDown(self):
        PersonModel.objects.all().delete()

    def test_get_10000_from_database(self):
        url = '/person'
        start_time = time.time()
        for index in range(10000):
            response = self.client.get(url)
        end_time = time.time()
        print('共耗时:%s' % (end_time - start_time))
        # redis: 共耗时:20.29421329498291
        # no redis: 共耗时:19.77984619140625
        print(response.status_code, response.data)

调用接口读取数据库中的数据

CallPerson(project)

urls.py

from django.conf.urls import url
from cache.views import PersonCall

urlpatterns = [
    url(r'^person$', PersonCall.as_view()),
]

views.py

from rest_framework.views import APIView
import requests
from django.shortcuts import HttpResponse
import time


# Create your views here.
class PersonCall(APIView):
    @staticmethod
    def get(request_paras, *args, **kwargs):

        start_time = time.time()
        for index in range(1000):
            response = requests.get('http://10.56.131.73:8088/person', verify=False)
            status = response.status_code
            print(index, status, type(status))

        data = response
        print(data, type(data))
        end_time = time.time()
        print("执行用时:%s" % (end_time - start_time))

        return HttpResponse("执行用时:%s" % (end_time - start_time))
    #    redis: 执行用时:6.76716637611389
    # no redis: 执行用时:9.44646430015564

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值