使用redis作为缓存

1. django中配置

settings.py中加入redis设置:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",  # 这里设定了本机的redis数据
        # "LOCATION": "redis://:passwordpassword@47.193.146.xxx:6379/0", # 如果redis设置密码的话,需要以这种格式host前面是密码
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

2. Redis如何修改密码:

  • 修改密码
1.找到redis配置信息文件,如/etc/redis.conf
2.找到 # requirepass foobared.   并去掉注释,后面的foobared改成你的密码。如:requirepass my_redis
3.重启redis, sudo service redid restart.(或者这样重启:sudo service redid restart, sudo redis-server /etc/redis.conf)
  • 修改密码后登陆:
1.如果直接 redis-cli. 登陆,没密码,那么你能登陆,但无任何操作权限
2.用密码登陆。redis-cli -h 127.0.0.1 -p 6379 -a my_redis.   才能有权限操作
3.先redis-cli登陆,此时没有操作权限,再输入:AUTH your_password. 同样可以完成认证

3. 配置后在django项目中使用缓存:

  • 使用cache
from django.core.cache import cache
# 给redis中加入了键为key1,值为value1缓存,过期时间20秒
cache.set(“key1”, “value1”, 20).  
# 参数:timeout=20, 过期时间20
# nx=True. 默认为False,重复命名时覆盖,True表示重复命名时不能再重新赋值

# 获取cache值:
val = cache.get(“key1”),
# 获取key3的过期时间,返回值:0表示无此键或已过期,None表示未设置过期时间,有过期时间的返回秒数。
cache.ttl(“key3”). 
# 注意:在redis中存储的值并不是按照给定的键存储的,是根据键值又拼装的键(在你的key前面加上了个“:1:”)。
# 删除redis中key1的值
cache.delete(‘key1’)
  • 使用get_redis_connection(保存热词,自动统计次数)
from django_reids import get_redis_connection
# get_redis_connection(‘default’)用法:
Conn = get_redis_connection(‘default’)
# 表示网redis里面存入了数据,键key1,值val1,但是注意不能再redis中获取,只能用conn获取,
# 返回值是添加量,初始为1.0,如果再加一个一摸一样的,就是2.0,注意:可以往一个键中添加多个值,如
Conn.zincrby(key1, '333').   
Conn.zincrby(key1, 'HELLO')
Conn.zincrby(key1, 'ooo')
Conn.zincrby(key1, 'world')
Conn.zincrby(key1, '444')
Conn.zincrby(key1, '444')
Conn.zincrby(key1, '444')。 # 注意:这里val5添加了3次
# 如何获取刚才添加的呢?
li1 = conn.zrevrange(key1, 0, 10, True)
# li1就是:[('444', 3.0), ('world', 1.0), ('ooo', 1.0), ('HELLO', 1.0), ('333', 1.0)]
# 得到的数据是一个列表,取其中0-10(前10),按照刚才添加次数排序,val5添加了3次,所以权重值最大
# True表示,获得的值是个元组,False的话里面没有权重值,默认False
li2 = conn.zrevrange(key1, 0, 10)
# li2就是:['444', 'world', 'ooo', 'HELLO', '333']
# 我统计热搜关键词排序用到了

进阶: 如何管理添加的数据,包括保留数据个数和过期时间???????get_redis_connection(‘default’)中的default的意思,有其他选项吗?待大神解答

4. redis中的操作(redis-cli)

  • redis基本操作(终端):

命令

含义

del key

删除key

keys *

所有键

get name

获取name这个键的值

del name

删除name

set name “wuanger”

创建“wuanger”,键为name

select 2

表示切换到2库,注:Django的cache是存在1库的(上面设置的),进入redis的时候默认是0库的

TTL name

查看剩余过期时间

EXPIRE name 300

设置name的过期时间为300秒

type name

查看name的属性(总共:string, list, hash, set,zset)

5. redis 数据结构

  1. string 字符

操作

含义

set key value

get key

expire key 100

设置过期时间100秒

TTL key

查看剩余过期时间

append key aa

给一个值后面加aa,类似字符串相加

DERC key

给key的值-1,仅限数字

DERCBY key 4

给key的值-4,仅限数字

  1. list 列表(类似于python的列表)

操作

含义

lpush list_name a b c d e f

f e d c b a (依次从左边插入),如果没有就创建

rpush list_name g

从右边插入

lrange list_name 0 -1

显示所有内容(根据下表来的)

lpop list_name

从左边删除第一个数,返回值是删除的那个数

rpop list_name

从右边删除一个数,返回值是删除的那个数

expire TTL

方法和string一样

  1. hash 哈希(类似于python的字典)

操作

含义

hset hash_name key1 val1

hash_name = {key1: val1}

hmset hash_name key1 val1 key2 val2

hash_name = {key1: val1, key2: val2}

hget hash_name key1

获取key1

hmget hash_name key1 key2

获取多个key

hgetall hash_name

获取所有key

hkeys hash_name

获取所有的key

hvals hash_name

获取所有的val

hdel hash_name key

删除hash_name中的key

  1. set 集合(存储不重复的值,无序)

操作

含义

sadd set1 val1 val2

添加一个set1集合里的值val1,val2

srem set1 val1

从set1中移除val1

smembers set1

set1的成员

sismember set1 val1

查看val1是否在set1里,是返回1,否返回0

sinter set1 set2

求交集

sunion set1 set2

求并集

sdiff set1 set2

求差集

  1. zset(有序集合)

操作

含义

zadd zset1 score member

创建、添加一个zset1,member的分数是score(int)

zrangebyscore zset1 0 100 withscores

得出zset1中分数score在0-100的member,score从小到大,后面的withscores是带score输出

zrevrangebyscore zset1 100 0

从大到小输出

zrange zset1 2 4

获取zset1中序号为3,4的member

zrank zset1 a

zset1中成员a的序号

zrem zset1 a

移除zset1中的a

zcount zset1 1 6

获取score为1-6之间的member数量