部署redis服务

1. Redis入门简介

  • Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
  • Redis是一个key-value存储系统。 和Memcached缓存类似,Redis支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、hash(哈希类型)。并且支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。Redis也被看成是一个数据结构服务器。
  • Redis支持主从同步,数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制,由于完全实现了发布/订阅机制,使得从数据库在
    任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录,同步对读取操作的可扩展性
    和数据冗余很有帮助。

2.安装redis:

  • yum安装:
  • 源码安装:

2.1. yum安装redis:

  • 创建redis repo文件:
[root@localhost ~]# yum  -y install  https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm
[root@localhost ~]# vim /etc/yum.repos.d/remi.repo
修改如下:
[remi]
name=Remi's RPM repository for Enterprise Linux 7 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/remi/$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/7/remi/httpsmirror
mirrorlist=http://cdn.remirepo.net/enterprise/7/remi/mirror
enabled=1        这里原本默认是0的修改为1开启
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
  • 安装redis:
[root@localhost ~]# yum  -y install redis-5*

2.2. 源码安装redis:

  • 下载redis源码文件并解压到/usr/src/目录下:
[root@localhost ~]# wget http://download.redis.io/releases/redis-5.0.8.tar.gz
[root@localhost ~]# tar -xf redis-5.0.8.tar.gz -C /usr/src/
  • 编译&&安装:
[root@localhost ~]# yum -y install gcc 
[root@localhost ~]# cd  /usr/src/redis-5.0.8/
[root@localhost redis-5.0.8]# make PREFIX=/usr/local/redis install
  • 创建配置文件:
[root@localhost redis-5.0.8]# cd /usr/local/redis/
[root@localhost redis]# ls
bin
[root@localhost redis]# mkdir -p 6379
[root@localhost redis]# cp /usr/src/redis-5.0.8/redis.conf 6379/6379.conf
到这一步redis安装好了:
  • 启动服务:
在前端允许redis:
[root@localhost redis]# /usr/local/redis/bin/redis-server  /usr/local/redis/6379/6379.conf
后台允许redis:
[root@localhost redis]# nohup /usr/local/redis/bin/redis-server /usr/local/redis/6379/6379.conf &
  • 关闭redis:
[root@localhost redis]# /usr/local/redis/bin/redis-cli -p 6379 shutdown
[1]+  完成                  nohup /usr/local/redis/bin/redis-server /usr/local/redis/6379/6379.conf
  • 启动之时,redis会出现一些警告信息:

5983:M 14 Jun 2020 16:07:13.550 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

5983:M 14 Jun 2020 16:07:13.550 # 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.

5983:M 14 Jun 2020 16:07:13.550 # 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.

  • 第一个警告是backlog参数导致的,backlog主要控制的是三次握手的时候,server端收到客户端ack确认号的队列长度,如果队列满了,客户端将收到错误提示。
    修复如下:
[root@localhost redis]# vim /etc/sysctl.conf
net.core.somaxconn=512
  • 第二个警告是因为vm.overcommit_memory=0。 0表示内核会检查有没有多的内存给进程使用,如果没有,内存的申请失败,并将错误返回给进程。1表示内核允许分配所有的物理内存给进程。2表示所有的物理内存和swap全部给进程。
    这里修改为1即可:
[root@localhost redis]# vim /etc/sysctl.conf
vm.overcommit_memory=1
  • 第三个警告是开启了大页内存动态分配,设置关闭,让redis负责内存管理
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    然后执行以下下命令,重启redis就不会提示警告信息了:
[root@localhost redis]# sysctl -p
  • 启动麻烦,可以配置脚本启动:

[root@localhost redis]# /usr/src/redis-5.0.8/utils/install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis server

配置redis的端口,可以默认为6379,直接回车
Please select the redis port for this instance: [6379] 
Selecting default: 6379

配置redis的配置文件,放到redis的安装目录,加上文件名:这里放到/usr/local/redis/6379/6379.conf
Please select the redis config file name [/etc/redis/6379.conf] /usr/local/redis/6379/6379.conf

配置redis的日志,放到redis的安装目录,加上文件名,这里放到/usr/local/redis/6379/redis_6379.log
Please select the redis log file name [/var/log/redis_6379.log] /usr/local/redis/6379/redis_6379.log

配置redis的数据目录,也放在安装目录,加上端口号区分,这里放在/usr/local/redis/6379/
Please select the data directory for this instance [/var/lib/redis/6379] /usr/local/redis/6379

选择redis的启动程序,加上文件名,这里的启动文件在/usr/local/redis/bin/redis-server
Please select the redis executable path [] /usr/local/redis/bin/redis-server
Selected config:
Port           : 6379
Config file    : /usr/local/redis/6379/6379.conf
Log file       : /usr/local/redis/6379/redis_6379.log
Data dir       : /usr/local/redis/6379
Executable     : /usr/local/redis/bin/redis-server
Cli Executable : /usr/local/redis/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!

3. 常用命令

命令解释
set key名 key值存储1个key值
mset key名 key 值 key名 key值…存储多个key值
lpush key名 key值 key值…创建一个key名指定多个值
keys *显示所有key名
get key名获取key值,这个只能获取一个key名的单个值
mget key名 key名…获取多个key值
select 数据库编号0-15切换数据库
keys a?显示指定key名,?代表一个字符
exists key名测试key名是否存在,结果是1代表存在,0不存在
ttl key名查看key生存时间,结果-1代表永不过期,-2代表过期了
type key名查看key类型
move key名 库编号移动key到指定库
expire key名 数字设置key在内存里有效时间
del key名 key名…删除指定的key或者多个key
flushall删除内存里所有key
flushdb删除当前所在库的所有key
save保存所有key到硬盘,默认在/var/lib/mysql
shutdown停止服务
  • 常用命令操作
[root@redis10 ~]# redis-cli    --登录redis
127.0.0.1:6379> set id 1       --创建key名=id key值=1
OK
127.0.0.1:6379> mset name bob sex boy age 25    --创建key名=name key值=bob key名=sex key值=boy key名=age key值=25
OK

127.0.0.1:6379> lpush id 1 2 3 4   --创建key名=id,key值=1、2、3、4
(integer) 4
127.0.0.1:6379> keys *
1) "name"
2) "id"

127.0.0.1:6379> keys *     ---显示所有key名
1) "age"
2) "sex"
3) "name"
4) "id"
127.0.0.1:6379> get id     ---显示key名=id的值
"1"
127.0.0.1:6379> mget id name sex age  ---显示key名等于id、name、sex、age的值
1) "1"
2) "bob"
3) "boy"
4) "25"

127.0.0.1:6379[1]> select 0   ---切换到数据库0,数据库只有0-15
OK

127.0.0.1:6379> keys nam?   ---显示nam后面只有一个字符的key名
1) "name"
127.0.0.1:6379> exists name   ---查看key名=name是否存在
(integer) 1
127.0.0.1:6379> ttl name       ---查看key名=name的生存时间。
(integer) -1
127.0.0.1:6379> type name      --查看key名=name的类型为string即为字符型
string

127.0.0.1:6379> move id 1    ---把key名=id的数据转移到数据库1
(integer) 0

4. redis配置文件详解:

4.1. 配置分类:

配置项名称说明
INCLUDES装载配置
MODULES模块配置
NETWORK网络配置
GENERAL常规配置
SNAPSHOTTING快照配置
REPLICATION复制配置(主从同步)
SECURITY安全配置
CLIENTS客户端配置
MEMORY MANAGEMENT内存管理配置

4.2. 常用配置

参数说明
bind 127.0.0.1监听地址,默认是监听本地回环地址,可以修改为0.0.0.0,表示监听所有ip地址,如果要监听多个,用空格隔开。
port 6379监听端口
protected-mode yes保护模式,一般注释掉,如果protected-mode是yes的话,如果没有指定bind或者没有指定密码,那么只能本地访问。
tcp-backlog 511TCP半连接队列长度配置
timeout 0是否超时无操作关闭连接,0代表用不关闭
tcp-keepalive 300TCP连接保活策略,可以通过tcp-keepalive配置项来进行设置,单位为秒,假如设置为60秒,则server端会每60秒向连接空闲的客户端发起一次ACK请求,以检查客户端是否已经挂掉,对于无响应的客户端则会关闭其连接。如果设置为0,则不会进行保活检测。
daemonize yes是否以守护(后台)进程的方式启动,默认no。
pidfile /var/run/redis_6379.pid指定redis进程文件路径
loglevel notice日志级别,debug:能设置的最高的日志级别,打印所有信息,包括debug信息。verbose:打印除了debug日志之外的所有日志。notice:打印除了debug和verbose级别的所有日志。warning:仅打印非常重要的信息。
logfile /var/log/redis/redis.log指定redis日志文件路径
databases 16指定数据库的数量,redis默认有16个数据库,编号从0开始
always-show-logo yes启动是否显示logo
save 900 1在900秒内修改一个key触发快照
save 300 10在300秒修改10个key触发快照
save 60 10000在60秒修改10000个key触发快照
stop-writes-on-bgsave-error yes在快照出现问题时,禁止redis写入操作
rdbcompression yes进行持久化时,是否压缩,默认为压缩
rdbchecksum yes在保存或者加载rdb数据库时是否开启校验
dbfilename dump.rdbrdb文件名,可以修改
dir /var/lib/redis/6379数据库目录的配置
maxclients 10000并发连接数量的配置
maxmemory redis使用最大内存
maxmemory-policy noevictiy指定内存清除策略,默认是不删除
maxmemory-samples 5选取key模板的个数(针对 lru 和 ttl 策略),意思是使用内存清除策略时(LRU、LFU、TTL)参考的的例子数量,这里是5个,数量越多越浪费CPU

4.3. 内存管理

  • 内存清除策略
  • volatile-lru ------最近最少使用(针对设置了TTL的key,即设置了有效期的变量)
  • allkeys-lru -----删除最少使用的key(针对所有的key,即所有变量,包括设置与没设置有效期的)
  • allkeys-lfu -----从所有key中清除使用频率最少的key
  • volatile-lfu -----从所有配置了过期时间的key中清除使用频率最少的key
  • volatile-random ----在设置了TTL的key里随机移除
  • allkeys-random -----随机移除key,所有的key里进行随机删除
  • volatile-ttl(minor TTL) ----移除最近过期的key
  • noeviction ----不删除,写满时报错
  • 默认内存清除策略是noeviction不删除(maxmemory-policy noevictiy)
  • 内存优化:
  • maxmemory //最大内存
  • maxmemory-policy //定义使用策略
  • maxmemory-samples //选取key模板的个数(针对 lru 和 ttl 策略)

5. 设置连接

5.1. 设置密码、IP地址、端口

  • redis服务默认是不需要使用密码登录的

注意:生产环境中redis服务器是内存存储服务器,redis服务器一般不设置连接密码,redis服务的安全应该由linux操作系统来完成,通过系统设置防火墙服务,来允许谁来访问本机的redis服务

[root@redis10 ~]# vim /etc/redis.conf
##修改如下:
requirepass   1234    ---指定redis登录密码
 bind    0.0.0.0     ---设置运行连接的IP地址,这里设置运行任何ip登录。
 port   6379         ---修改redis服务的端口号
 ##重启服务
[root@redis10 ~]# systemctl restart redis

##登录redis方法1
[root@redis10 ~]# redis-cli -h 192.168.2.10 -p 6379
192.168.2.10:6379> keys *
(error) NOAUTH Authentication required.    --这里提示需要输入密码
192.168.2.10:6379> auth 1234    --输入密码
OK
192.168.2.10:6379> keys *
1) "name"
2) "id"
3) "age" 

##登录redis方法2
[root@redis10 ~]# redis-cli -h 192.168.2.10 -p 6379 -a 1234
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.2.10:6379> keys *
1) "name"
2) "id"
3) "age"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值