官网:
https://redis.io/
建议安装目录放在/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
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"
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
------------------------------------
默认情况下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://:[email protected]: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'