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被提权