Django框架中session存储到redis中的配置

官网:
https://redis.io/

Redis安装教程:

建议安装目录放在/usr/local目录

wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xzf redis-5.0.5.tar.gz
cd redis-5.0.5
make    # 同时会自动执行make install

make完后 redis-5.0.5目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下。注意:安装完成后,redis-server和redis-cli命令,也会存放在:

redis-server: /usr/local/bin/redis-server
redis-cli: /usr/local/bin/redis-cli

所以可以直接运行redis-server和redis-cli命令.
    
    下面启动redis服务:

cd redis-5.0.5/src
./redis-server

    注意这种方式启动redis 使用redis.conf默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。 

cd redis-5.0.5/src
./redis-server ../redis.conf

# 启动后,会收到如下几条告警,通过下面方法消除告警.
8430:M 10 Jul 2019 14:30:05.028 # WARNING: The TCP backlog setting of 511 cannot
 be enforced because /proc/sys/net/core/somaxconn is set to the lower value of
 128.
# 临时解决方法:(即下次启动还需要修改此值)
echo 511 > /proc/sys/net/core/somaxconn

# 永久解决方法:
# 将如下添加到/etc/sysctl.conf文件里
net.core.somaxconn= 1024 
# 然后执行sysctl -p 就可以永久消除这个warning

8430:M 10 Jul 2019 14:30:05.028 # WARNING overcommit_memory is set to 0! 
Background save may fail under low memory condition. To fix this issue add 
'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 
'sysctl vm.overcommit_memory=1' for this to take effect.
# 永久解决方法:
# 将如下添加到/etc/sysctl.conf文件里
vm.overcommit_memory = 1
# 然后执行sysctl -p 就可以永久消除这个warning

8430:M 10 Jul 2019 14:30:05.028 # WARNING you have Transparent Huge Pages (THP) 
support enabled in your kernel. This will create latency and memory usage issues 
with Redis. To fix this issue run the command 'echo never > 
/sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your 
/etc/rc.local in order to retain the setting after a reboot. Redis must be 
restarted after THP is disabled.
# 临时解决方法:
echo never > /sys/kernel/mm/transparent_hugepage/enabled

#永久解决方法:
echo never > /sys/kernel/mm/transparent_hugepage/enabled 
# 写入/etc/rc.local文件中。

# 以上步骤做完后,重启redis服务,重启步骤如下:
# 1 查询redis进程号,以下两种办法都可以查询:
[root@localhost ~]# ps aux | grep redis
root      3812  0.3  0.1 153888  2324 ?        Ssl  00:43   0:00 redis-server 127.0.0.1:6379
root      3817  0.0  0.0 112708   976 pts/0    R+   00:43   0:00 grep --color=auto redis
[root@localhost ~]# 
[root@localhost ~]# netstat -antp | grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      3812/redis-server 1 

# 2 杀死进程
kill 3812

# 启动redis服务(我这里的redis,安装在/var/django/路径.
redis-server /var/django/redis-5.0.5/redis.conf 
# 也可以用下面这种启动服务
/var/django/redis-5.0.5/src/redis-server /var/django/redis-5.0.5/redis.conf

    启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如:

cd redis-5.0.5/src
./redis-cli
127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> get foo
"bar"

   防火墙放行Redis TCP/6379端口:

firewall-cmd --permanent --zone=public --add-port=6379/tcp
firewall-cmd --reload
# 或者采用如下配置,采用严格的源地址控制,只允许某些地址访问数据库
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.200/32" port protocol="tcp" port="6379" accept"
firewall-cmd --reload

修改配置文件:

vi /redis-5.0.5/redis.conf    修改daemonize,为yes。不必担心退出进程redis服务终止,后台会自动启动redis服务。

# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
daemonize yes
logfile "/var/log/nginx/redis.log"     # 指定日志存储的日志,默认logfile未指定位置.

    此时,启动服务要使用:

cd redis-5.0.5/src
./redis-server ../redis.conf

    查看进程:

netstat -antp | grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      10256/src/redis-ser 
tcp        0      0 192.168.0.100:6379      0.0.0.0:*               LISTEN      10256/src/redis-ser 
tcp        0      0 192.168.0.100:6379      192.168.0.185:51862     ESTABLISHED 10256/src/redis-ser 

ps -aux | grep redis
root     10256  0.2  0.1 153892  3016 pts/3    Sl+  07:25   0:03 src/redis-server 192.168.0.100:6379
root     10270  0.0  0.0 112708   976 pts/1    R+   07:44   0:00 grep --color=auto redis


    设置开机启动:

vi /etc/rc.d/rc.local 
# 添加如下
redis-server /var/django/redis-5.0.5/redis.conf
# 或者下面这么写也可以:
/var/django/redis-5.0.5/src/redis-server /var/django/redis-5.0.5/redis.conf 

# 在centos7中,/etc/rc.d/rc.local的权限被降低了,所以需要执行如下命令赋予其可执行权限
chmod +x /etc/rc.d/rc.local

    配置bind和requirepass:

    redis3.2版本后新增protected-mode配置,默认是yes,即开启。设置外部网络连接redis服务,设置方式如下:
    1、关闭protected-mode模式,此时外部网络可以直接访问
    2、开启protected-mode保护模式,需配置bind ip和设置访问密码(推荐)

下面是根据开启protected-mode保护模式时,需要在redis.config 做bind和requirepass的配置:

 bind 192.168.0.100  

# 注:这里的192.168.0.100,指的是redis服务器,自身网卡IP地址,哪个地址可以用来被远程连接。如果Django和Redis放在一台机器上,这里只要写127.0.0.1即可。需要不加127.0.0.1,本机只能使用:redis-cli -h 192.168.0.100 来连接.

requirepass 123456

注意:为了安全,这里要在firewall-cmd上,添加明细策略,只允许特定的地址,可以访问redis的6379端口。

"""
    redis设置密码的两种方式
        1-修改配置文件(需重启redis服务,永久修改,推荐)
        2-命令修改密码(临时密码,无需重启redis服务,但服务器重启后失效)
    方式1:
        1-打开redis.config 文件
        2-找到 :# requirepass foobared  在下面添加:requirepass 123456  保存文件
        3-重启redis
        4-连接redis:  redis-cli -h 127.0.0.1 -p 6379 -a 密码。当配置密码后,建议采用如下方式登入redis更安全:

[root@localhost ~]# redis-cli -h 192.168.0.100
192.168.0.100:6379> auth 123456
OK

    方式2:
        1-连接redis
        2-config get requirepass           # 获取当前密码
        3-config set requirepass  123456   # 设置当前密码为123456
        4-config get requirepass           # 获取当前密码
"""

指定日志存放路径:

logfile "/var/log/nginx/redis.log"

Redis 基础命令:


CONFIG GET CONFIG_SETTING_NAME

实例:
CONFIG GET loglevel

使用 * 号获取所有配置项:
CONFIG GET *

切换数据库:默认有16个,通过0-15来标识,默认是第一个数据库0号数据库。
select n

keys *     查看所有的键
get keyname 查看键myname对应值,

查看key的超时时间
以秒计算,-1代表没有超时时间,如果不存在key或者key已经超时则为-2
 ttl keyname
超时后,redis默认会自动删除超时的key。

设置超时时间戳,以秒为单位
expire key seconds

------------------------------------

Django相关操作:


默认情况下session是存储在数据库中的,但是当用session保存用户的状态时,用户频繁的访问服务器,会增大数据库的压力,也会降低用户访问的速度。为了解决这个问题将session存储到redis中。

第一种配置方法(推荐):

不使用Django中session默认的存储方式,直接将session存储的地方配置到redis中.

# 1.在虚拟环境中安装包
pip3 install django-redis-sessions

# 2.在Django项目的settings文件中增加下面的配置

SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS = {
    'host': '192.168.0.100',
    'port': 6379,
    'db': 1,
    'password': '123456',
    'prefix': 'session',
    'socket_timeout': 10
    }


第二种配置方法:

先将Django中的缓存设置为redis,然后将session的存储地方设置为Django的缓存中
#1.先在虚拟环境中安装包
pip3 install django_redis

#2. 设置redis作为django的缓存设置

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        # 把这里缓存你的redis服务器ip和port
        "LOCATION": "redis://192.168.0.100:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

'''
注意:如果Redis有密码,采用如下代码:
"LOCATION": "redis://:密码@127.0.0.1:6379/1",    
redis://冒号:密码@ip:port/库号
比如:
"LOCATION": "redis://:123456@192.168.0.100:6379/1",
'''

 

# 3.设置redis存储django的session信息

# 我们定义一个cache(本地缓存来存储信息,cahe指定的是redis
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
# 指定本地的session使用的本地缓存名称是'default'
SESSION_CACHE_ALIAS = "default"

---------
存储在数据库中,如下设置可以写,也可以不写,这是默认存储方式,如果是存放数据库, 一般以db结尾。
SESSION_ENGINE='django.contrib.sessions.backends.db'

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值