Django配置Redis数据库
Redis是什么
官方解释:Redis是一个使用 C语言 编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。
通俗点说:Redis是一个软件,这个软件可以帮助我们维护一部分内存,让我们往那块内存中进行存取值。如果数据在内存中存储,遇到宕机那么数据就会丢失,而redis解决了这个问题,他可以将内存中的数据以某种策略存储到硬盘,以保证宕机数据不丢失。
Redis和MySQL数据库的比较?
Redis直接在内存中进行存取数据,速度非常快;由于在内存,所以存储的数据不能太多,内存一般8G/16G;对数据可以设置自动超时时间;
MySQL通过SQL语句操作的数据都在硬盘上,速度相对慢;由于存储在硬盘,所以存储的数据可以非常多,硬盘一般500G/1T;数据不能自动超时,想超时需要自定写SQL处理;
安装Redis(Docker)
拉取镜像
PS C:\Users\luanx> docker pull redis:latest
latest: Pulling from library/redis
461246efe0a7: Pull complete
edee06fdf403: Pull complete
04b7adc9ef61: Pull complete
675e080de32e: Pull complete
52f80fad4364: Pull complete
fb132777afe2: Pull complete
Digest: sha256:fe5e55a258e98788989fe77a116155088b8a27d8665ba9747df23af53c3b9a82
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
查看镜像列表
PS C:\Users\luanx> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 3534610348b5 28 hours ago 117MB
mysql 5.7 738e7101490b 7 months ago 448MB
创建redis容器
PS C:\Users\luanx> docker run -itd --name redis -p 6379:6379 redis --requirepass 123456
8e9258f495d9eafe6c19a91f2dbad876d711e0dabdb8588d360505e5d4ac5b12
设置密码,验证redis服务
PS C:\Users\luanx> docker exec -it redis-test /bin/bash
root@8e9258f495d9:/data# redis-cli
127.0.0.1:6379> config set requirepass "luanxinchen"
OK
127.0.0.1:6379> auth luanxinchen
OK
127.0.0.1:6379> set test-key test-value
OK
Django配置Redis
安装redis包
pip install django-redis
配置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": 100}
"PASSWORD": "luanxinchen",
}
}
}
操作Redis
from django_redis import get_redis_connection
conn = get_redis_connection("default")
conn.set("xx","123123")
print(conn.get("xx"))
关于Redis安全
Redis默认不开启认证的,如果这个时候把Redis端口不小心放到了公网,黑客可以借助redis命令对数据进行恶意清空,如果恰好你的redis又是以root身份运行的话,那就GG了,黑客可以往服务器上写入ssh公钥文件,从而直接登录服务器!
以下是关于Redis安全的几条建议:
给redis加上认证服务
尽量不要对外网公开,如果实在有允许外网连接的需求,最好只允许bind特定的服务器地址,而不是直接bind所有ip
用权限较低的账号运行redis,防止root被提权