windows下安装
操作:
作用:用于操作内存的软件
使用连接池,本质是维护一个已经和服务端连接成功的socket,以后在此发送数据时,直接获取一个socket,直接send数据
特点:1、可以做持久化(AOF / RDB)
单进程,单线程
相当于是大字典
五大数据类型:大字典的值可以是字符串、列表、集合、字典、元祖{(‘yin’,60),},第二个值是分数,可以排序,是个有序集合。
不支持多层嵌套。可以通过json转换。
应用:
1、自定义redis
import redispool = redis.ConnectionPool(host='127.0.0.1',port=6379,password='xxx',max_connetction=100)conn = redis.Redis(connection_pool=pool)
2、第三方组件django-redis,自动创建连接池
pip install django-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": "密码", } }}
from django_redis import get_redis_connectionconn = get_redis_connection("default")
缓存:
1、全站缓存:在中间件开头和最后分别加一个中间件
使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户,当返回给用户之前,判断缓存中是否已经存在,如果不存在则UpdateCacheMiddleware会将缓存保存至缓存,从而实现全站缓存 MIDDLEWARE = [ 'django.middleware.cache.UpdateCacheMiddleware', # 其他中间件... 'django.middleware.cache.FetchFromCacheMiddleware', ] CACHE_MIDDLEWARE_ALIAS = "" CACHE_MIDDLEWARE_SECONDS = "" CACHE_MIDDLEWARE_KEY_PREFIX = ""
2、单视图缓存:
from django.views.decorators.cache import cache_page@cache_page(60 * 15)def my_view(request): ...
3、局部缓存
a. 引入TemplateTag {% load cache %} b. 使用缓存 {% cache 5000 缓存key %} 缓存内容 {% endcache %}
操作:
事务:将多次请求打包一次发送。
pipe = conn.pipeline(transation=True)pipe.multi()pipe.set(xxx)pipe.hset(xxx)pipe.lpush(xxx)pipe.execute()
全局操作:
conn.keys() 取到所有的key,并且可以通过*做模糊匹配。参数可以(*list)传一个字典,批量删除。
conn.delete("key") 删除一个键
conn.flushall() 清空所有
conn.exists("key") 判断是否存在
一、hash操作(字典)
hset(name,key,value)
hget(name,key)
hgetall(name)
hmset(name,{key:value,key:value})
hmget(name,"k1","k2") 或者 hmget(name,["k1","k2"])
hlen(name)
hkeys(name)
hvals(name)
hincrby(name,key,amount=1)增加1
scan_iter()
二、列表
lpush(name,value) 依次向左边加值
rpush(name,value) 依次向右边加值
lpop(name) 取走最左边的值
rpop(name) 取走最右边的值
blpop(name,timeout=xx) 同pop,但是取不到数据会等待。
lrange(name,start,stop) 取范围内的值
列表中没有封装一点一点取数据的方法,可以自己定义:
import redispool = redis.ConnectionPool(host='127.0.0.1',port=6379,password="ywj971020")conn = redis.Redis(connection_pool=pool)conn.lpush('k1',*[123,22,123,5899,435,12,3,879,345,1,23,5346,7,8,89,89,567,456])def get_iter(key,count=2): index = 0 while True: data_list = conn.lrange(key,index,index+count-1) if not data_list: return index += count for item in data_list: yield itemfor item in get_iter("k1"): print(item)