系列文章目录
一、列表操作
1.python操作列表
from redis import Redis
redis = Redis()
redis.lpush('list1', 'bbc', 'apper')
redis.lpushx('list1', 'beef')
redis.rpushx('list1', 'down')
print(redis.llen('list1'))
redis.linsert('list1', 'before', 'beef', 'www')
redis.linsert('list1', 'after', 'beef', 'html')
redis.lset('list1', 0, 'ppp')
redis.lrem('list1', 1, 'ppp')
redis.lrem('list1', -1, 'ppp')
print(redis.lpop('list1'))
print(redis.lindex('list1', 1))
print(redis.lrange('list1', 0, 1))
print(redis.ltrim('list1', 3, 3))
redis.rpoplpush('list2', 'list1')
print(redis.blpop(['list1','list2']), 5)
redis.brpoplpush('list1', 'list2', 5)
redis.lpush('test', *['a', 1, 2, 3, 4, 45, 5, 6, 7, 7, 8, 43, 5, 6, 768, 89, 9, 65, 4, 23, 54, 6757, 8, 68])
def scan_list(name, num):
len = redis.llen(name)
for i in range(len):
str = redis.lindex(name, i)
try:
oldvalue = int(str.decode('utf-8'))
redis.lset(name, i, oldvalue + num)
except:
continue
return redis.lrange(name, 0, len)
for item in scan_list('test', 1):
print('---')
print(item)
redis.close()
2.redis操作列表
方法 | 作用 |
---|
BLPOP key1 [key2 ] timeout | 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 | BRPOP key1 [key2 ] timeout | 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 | BRPOPLPUSH source destination timeout | 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 | LINDEX key index | 通过索引获取列表中的元素 | LINSERT key BEFORE | AFTER pivot value | LLEN key | 获取列表长度 | LPOP key | 移出并获取列表的第一个元素 | LPUSH key value1 [value2] | 将一个或多个值插入到列表头部 | LPUSHX key value | 将一个值插入到已存在的列表头部 | LRANGE key start stop | 获取列表指定范围内的元素 | LREM key count value | 移除列表元素 | LSET key index value | 通过索引设置列表元素的值 | LTRIM key start stop | 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 | RPOP key | 移除列表的最后一个元素,返回值为移除的元素。 | RPOPLPUSH source destination | 移除列表的最后一个元素,并将该元素添加到另一个列表并返回 | RPUSH key value1 [value2] | 在列表中添加一个或多个值 | RPUSHX key value | 为已存在的列表添加值 |
二、事务(管道)
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。 一个事务从开始到执行会经历以下三个阶段:
- 开始事务 使用 MULTI
- 命令入队。 redis指令
- 执行事务。使用EXEC
1.redis事务(管道)
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set str2 name
QUEUED
127.0.0.1:6379> get str2
QUEUED
127.0.0.1:6379> set str2 sex
QUEUED
127.0.0.1:6379> get str2
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) "name"
3) OK
4) "sex"
127.0.0.1:6379>
2.python事务(管道)
from redis import Redis
redis = Redis()
pipe = redis.pipeline(transaction=True)
pipe.multi()
pipe.set('str', 'bbc')
print(pipe.get('str'))
pipe.set('str', 'hb')
print(pipe.get('str'))
pipe.execute()
pipe.close()
三、其他操作
from redis import Redis
redis = Redis()
redis.delete(*['test', 'str', 'str2'])
print(redis.exists('list1'))
print(redis.keys())
print(redis.keys('list?'))
print(redis.dbsize())
redis.expire('list2', 30)
redis.rename('list1', 'list2')
redis.move('list2', 1)
print(redis.randomkey())
print(redis.type('food'))
redis.close()
四、django集成redis
1.通用方案
创建一个pool.py(名字自行设定)
import redis
redis_pool = redis.ConnectionPool(max_connections=1024, decode_responses=True)
在需要使用redis的地方创建redis对象然后查询即可
from redis import Redis
from script.pool import redis_pool
def get(self, request):
redis = Redis(connection_pool=redis_pool)
res = redis.get('food')
return Response({'code':200, 'data':res})
2.django中使用django-redis
1.安装django-redis
pip install django-redis
2.配置redis配置文件 dev.py(默认项目中为settings.py)
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": 1024}
}
}
}
3.在需要使用redis的地方使用
from django_redis import get_redis_connection
def get(self, request):
redis = get_redis_connection()
res = redis.get('food')
return Response({'code':200, 'data':res})
五、celery介绍安装
1.介绍
celery分布式异步任务框架,该框架为我们提供了异步执行、延时执行、定时执行。框架对windows适配不好,可能会出问题,但可以通过特殊方法在windows上运行。
概念:celery是独立的服务,跟其它框架无关,需要单独启动
特点:
- 可以不依赖任何服务器,通过自身命令,启动服务
- celery服务为为其他项目服务提供异步解决任务需求的
1 异步执行:解决耗时任务,将耗时操作任务提交给Celery去异步执行,比如发送短信/邮件、消息推送、音视频处理等等 2 延迟执行:解决延迟任务 3 定时执行:解决周期(周期)任务,比如每天数据统计
celery的架构:
- 消息中间件broker——redis,rabbitmq
- 任务执行单元worke——celery的进程
- 结果存储(backend):Task result store——redis,mysql,rabbitmq
2.安装
pip install celery
六、celery快速使用
celerys.py(自由定义)
import time
from celery import Celery
from django_redis import get_redis_connection
backend='redis://127.0.0.1:6379/1'
broker='redis://127.0.0.1:6379/2'
app=Celery('main',broker=broker,backend=backend)
@app.task
def add(a,b):
redis = get_redis_connection()
time.sleep(2)
redis.set(a, b)
return 'add任务触发了'
对需要的任务进行提交
def get(self, request):
res = add.delay('string1', 'fish')
return Response({'code':200, 'data':'任务启动'})
使用celery 来执行任务:启动worker
win上:先安装eventlet
pip install eventlet
celery -A celery的任务所在的py文件名 worker -l info -P eventlet
linux、mac上
celery -A celery的任务所在的py文件名 worker -l info
执行结果在之前设置的backend里对应的redis库,中间消息在broker里redis库
|