redis缓存代码
# 01.redis缓存
第一步:查询redis缓存是否存在这个key
第二步:如果存在这个key,不用去mysql中查询,直接从redis中取出数据即可(减轻了mysql压力)
第三步:如果查询的key不存在,先到mysql中查询数据,让后设置到redis中,下次查询就有了
1
2
3
2
3
# 1.1 2B青年操作
2B青年每一个需要使用缓存的数据,我都写一个方法获取数据,再写一个方法处理缓存。
若需要用到缓存的地方越来越多,每一个都需要这么写一套代码,代码冗余繁琐。
# coding:utf-8
from django.core.cache import cache
import time
# 获取readed缓存
def get_readed_cache():
# 判断键是否存在
key = 'readed'
if cache.has_key(key):
data = cache.get(key)
else:
# 不存在,则通过sql语句获取数据,并写入缓存,这里只是一个举例的sql语句
data = "select name from tb"
# 写入缓存
cache.set(key, data, 3600 - int(time.time() % 3600))
return data
def test1():
data = get_readed_cache()
return data
def test2():
data = get_readed_cache()
return data
if __name__ == '__main__':
test1()
test2()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 1.2 NB青年
- NB青年可以使用三级装饰器,在装饰器中判断key如果存在就从reids中获取,如果不存在就从数据库查询,并设置到reids中
# coding:utf-8
from django.core.cache import cache
# 获取redis缓存的装饰器
def redis_cache(key, timeout):
def __redis_cache(func):
def warpper(*args, **kw):
if cache.has_key(key): # 判断缓存是否存在
data = cache.get(key)
else:
# 若不存在则执行获取数据的方法
# 注意返回数据的类型(字符串,数字,字典,列表均可)
data = func(*args, **kw) # 从数据库查询到数据设置到redis中
cache.set(key, data, timeout)
return data
return warpper
return __redis_cache
#键值为test,超时时间为60秒
@redis_cache('test', 60)
def get_test_data():
# 获取Blog模型随机排序前3条数据
# (Blog模型是我自己的模型,具体代码根据自己需求获取数据)
# values执行结果,将返回一个字典。字典可以直接存入redis
# data = Blog.objects.values('id', 'caption').order_by('?')[:3]
data = '从数据库查询到了数据'
return data
#键值为test,超时时间为60秒
@redis_cache('name', 60)
def get_test_name():
# 获取Blog模型随机排序前3条数据
# (Blog模型是我自己的模型,具体代码根据自己需求获取数据)
# values执行结果,将返回一个字典。字典可以直接存入redis
# data = Blog.objects.values('id', 'caption').order_by('?')[:3]
data = '从数据库查询到了数据'
return data
if __name__ == '__main__':
get_test_data()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
编辑 (opens new window)
上次更新: 2023/05/17, 23:08:21