day103 数据库redis安装,数据操作,管道,Django中用redis,redis其他操作

redis安装
 -window下的redis软件安装讲解
    (见day103文件夹下的安装包)

 

redis是一个key-value存储系统。

redis vs memcached 相似与不同:

相似:与memcached一样,为了保证效率,数据都是缓存在内存中。

不同:

  1.memcached所有的值均是简单的字符串,它支持存储的value类型为5种,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。

  2.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

高并发架构系列:Redis为什么是单线程、及高并发快的3大原因详解见http://m.sohu.com/a/282430394_99994950

Redis的高并发和快速原因

1.redis是基于内存的,内存的读写速度非常快;

2.redis是单线程的,省去了很多上下文切换线程的时间;

3.redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,
然后利用epoll的多路复用特性,绝不在io上浪费一点时间。

 

数据操作详细见刘清政

 

十一管道

redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作。

如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。

redis不支持事务,但可以通过管道来模拟事务。()管道原子性义:几个操作要么都成功,要么有一个不成功就都不成功。)

 

import redis
 
pool = redis.ConnectionPool(host='10.211.55.4', port=6379)
 
r = redis.Redis(connection_pool=pool)
 
# pipe = r.pipeline(transaction=False)
pipe = r.pipeline(transaction=True)
pipe.multi()
pipe.set('name', 'alex')#操作1---》这部分可以自定制多个操作,其他固定不变。
pipe.set('role', 'sb')#操作2
 
pipe.execute()

十二 Django中使用redis

方式一:通用方式(这种方法使得在其他框架中也可以用redis,eg在flask中也可以这样)

  1.utils文件夹下,建立redis_pool.py

import redis
POOL = redis.ConnectionPool(host='127.0.0.1', port=6379,password='1234',max_connections=1000)

  2.视图层中:

import redis
from django.shortcuts import render,HttpResponse
from utils.redis_pool import POOL------》来多个连接请求时,这样pool就单例了,而不是多次操作redis.ConnectionPool()。理解这点。

def index(request):
    conn = redis.Redis(connection_pool=POOL)
    conn.hset('kkk','age',18)

    return HttpResponse('设置成功')
def order(request):
    conn = redis.Redis(connection_pool=POOL)
    conn.hget('kkk','age')

    return HttpResponse('获取成功')
 

方式二:利用Django的django-redis模块

2.1在pycharm中安装django-redis模块

方法1:命令行pip3 install django-redis
方法2:file--》settings--》project interpre下搜django-redis然后install加载。

2.2Django项目下settings文件中配置CACHES

# redis配置
#这个CACHES配置,缓存要用到这个配置,redis数据操作也用到它。
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100}
            # "PASSWORD": "123",
        }
    }
}

 2.3视图层

from django_redis import get_redis_connection
def test3(request):   conn=get_redis_connection()   name=conn.get('name1') return HttpResponse('取出成功%s' % name)

 

posted @ 2019-02-28 17:13  timm_book  阅读(61)  评论(0)    收藏  举报