运维之道 | Redis 安装及配置解析

Redis 安装及配置解析

一、Redis 特性

  • 速度极快:官方给出的数据是 10 万次 ops 的读写,这主要归功于这些数据都存在于内存中。由于 Redis 是开源的,当你打开源代码,就会发现 Redis 都是用 C 语言写的,C 语言是最接近计算机语言的代码,而且只有区区 5 万行,保证了 Redis 的速度。同时一个 Redis 只是一个单线程,其真正的原因还是因为单线程在内存中是效率最高的。
  • 持久化:Redis 的持久化可以保证将内存中的数据每隔一段时间就保存于磁盘中,重启的时候会再次加载到内存。持久化方式是 RDB 和 AOF。
  • 支持多种数据结构:分别支持哈希、集合、BitMaps,还有位图(多用于活跃用户数等统计)、HyperLogLog(超小内存唯一值计数,由于只有 12K,是有一定误差范围的)、GEO(地理信息定位)。
  • 支持多种编程语言:支持 Java、PHP、Python、Ruby、Lua、Node.js。
  • 功能丰富:如发布订阅、Lua 脚本、事务、Pipeline(管道,即当指令到达一定数量后,客户端才会执行)。
  • 简单:不依赖外部库、单线程、只有 23000 行 Code。
  • 主从复制:主节点的数据做副本,这是做高可用的基石。
  • 高可用和分布式:Redis-Sentinel(v2.8)支持高可用,Redis-Cluster(v3.0)支持分布式。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

二、Redis安装部署

1、从Redis官网下载安装包
[root@localhost src]# wget http://download.redis.io/releases/redis-5.0.4.tar.gz

好习惯:将安装包存放于/usr/local/src目录下

2、解压缩Redis源码压缩包
[root@localhost src]# tar -xzvf redis-5.0.4.tar.gz
3、建立一个redis目录的软连接,指向redis-5.0.4
[root@localhost src]# ln -s redis-5.0.4 redis

建立一个redis目录的软链接,这样做是为了不把redis目录固定在指定版本上,有利于Redis未来版本升级

4、进入redis目录
[root@localhost src]# cd redis
[root@localhost redis]# make && make install 

PS:Redis基于C语言编写,在执行安装前必须安装GCC环境(yum install -y gcc gcc-c++);
PS:若执行失败(jemalloc/jemalloc.h:没有那个文件或目录),执行下方命令即可安装;

[root@localhost redis]# make MALLOC=libc
5、验证是否安装成功,查看版本号
[root@localhost bin]# redis-cli -v
redis-cli 5.0.4

PS:版本号第二位如果是奇数,则为非稳定版本(例如2.7、2.9、3.1),如果是偶数,则为稳定版本(例如2.6、2.8、3.0、3.2)。当前奇数版本就是下一个稳定版本的开发版本,例如2.9版本是3.0版本的开发本。


三、Redis启动关闭命令

1、启动及关闭redis服务
  • server终端启动
[root@server bin]# pwd
/usr/local/bin
[root@server bin]# redis-server
9667:C 09 Jan 10:58:17.134 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
9667:M 09 Jan 10:58:17.135 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.0.7 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 9667
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               
  • cli终端启动
[root@cli bin]# redis-cli
127.0.0.1:6379> ping
PONG
  • 关闭redis服务
    只需在客户端终端上执行shutdown命令,即可退出服务
127.0.0.1:6379> shutdown
  • shutdown还有一个参数,代表是否在关闭Redis前,生成持久化文件
127.0.0.1:6379> shutdown nosave|save

2、在远程服务上执行命令

如果需要在远程 redis 服务上执行命令,同样我们使用的也是 redis-cli 命令

redis-cli -h host -p port -a password
[root@cli bin]# redis-cli -h 192.168.182.111 -p 6379 -a 123456

PS:启动redis服务,必须先在一台终端上启动redis-server服务,再在另外一台终端启动redis-cli服务


四、redis配置文件详解

[root@server redis]# find / -name redis.conf
/usr/local/src/redis-5.0.4/redis.conf
daemonize yes 
#`是否以后台进程运行,此处要改为yes,将进程在后台运行,此处需要修改!!!` 

pidfile /var/run/redis/redis-server.pid  
#`pid文件位置` 

port 6379
#`监听端口` 

bind 127.0.0.1  
#`绑定地址,如外网需要连接,设置0.0.0.0 `

timeout 300   
#`连接超时时间,单位秒` 

loglevel notice 
#`日志级别,分别有:` 
# debug :适用于开发和测试 
# verbose :更详细信息
# notice :适用于生产环境 
# warning :只记录警告或错误信息 

logfile /var/log/redis/redis-server.log  
#`日志文件位置`

syslog-enabled no  
#`是否将日志输出到系统日志` 

databases 16
#`设置数据库数量,默认数据库为0`
 
####################################### `快照方式` ######################################## 
save 900 1  
#`在900s(15m)之后,至少有1个key发生变化,则快照` 
save 300 10  
#`在300s(5m)之后,至少有10个key发生变化,则快照` 
save 60 10000 
#`在60s(1m)之后,至少有1000个key发生变化,则快照`
rdbcompression yes  
#`dump时是否压缩数据` 
dir /var/lib/redis  
#`数据库(dump.rdb)文件存放目录`
  
####################################### `主从复制` ########################################
slaveof <masterip> <masterport> 
#`主从复制使用,用于本机redis作为slave去连接主redis`
 
masterauth <master-password>  
#`当master设置密码认证,slave用此选项指定master认证密码`
 
slave-serve-stale-data yes   
#`当slave与master之间的连接断开或slave正在与master进行数据同步时,如果有slave请求,当设置为yes时,slave仍然响应请求,此时可能有问题,如果设置no时,slave会返回"SYNC with master in progress"错误信息。但INFO和SLAVEOF命令除外`
  
####################################### `安全` ######################################### 
requirepass 123456  
#`配置redis连接认证密码,此处需要修改!!!`
  
####################################### `限制` #########################################
maxclients 128
#`设置最大连接数,0为不限制`
 
maxmemory <bytes>
#`内存清理策略,如果达到此值,将采取以下动作:`
 
# volatile-lru :默认策略,只对设置过期时间的key进行LRU算法删除 
# allkeys-lru :删除不经常使用的key 
# volatile-random :随机删除即将过期的key 
# allkeys-random :随机删除一个key 
# volatile-ttl :删除即将过期的key 
# noeviction :不过期,写操作返回报错
 
maxmemory-policy volatile-lru
#`如果达到maxmemory值,采用此策略`
 
maxmemory-samples 3  
#`默认随机选择3个key,从中淘汰最不经常用的`
 
###################################### `附加模式` #########################################
appendonly no  
#`AOF持久化,是否记录更新操作日志,默认redis是异步(快照)把数据写入本地磁盘`
 
appendfilename appendonly.aof 
#`指定更新日志文件名`
 
# AOF持久化三种同步策略: 
# appendfsync always   #每次有数据发生变化时都会写入appendonly.aof 
# appendfsync everysec #默认方式,每秒同步一次到appendonly.aof 
# appendfsync no       #不同步,数据不会持久化
 
no-appendfsync-on-rewrite no  
#`当AOF日志文件即将增长到指定百分比时,redis通过调用BGREWRITEAOF是否自动重写AOF日志文件`
 
###################################### `虚拟内存` #########################################
vm-enabled no   
#`是否启用虚拟内存机制,虚拟内存机将数据分页存放,把很少访问的页放到swap上,内存占用多,最好关闭虚拟内存`
 
vm-swap-file /var/lib/redis/redis.swap  
#`虚拟内存文件位置`
 
vm-max-memory 0  
#`redis使用的最大内存上限,保护redis不会因过多使用物理内存影响性能`
 
vm-page-size 32  
#`每个页面的大小为32字节`
 
vm-pages 134217728 
#`设置swap文件中页面数量`
 
vm-max-threads 4  
#`访问swap文件的线程数`
 
###################################### `高级配置` ######################################### 
hash-max-zipmap-entries 512  
#`哈希表中元素(条目)总个数不超过设定数量时,采用线性紧凑格式存储来节省空间`
 
hash-max-zipmap-value 64   
#`哈希表中每个value的长度不超过多少字节时,采用线性紧凑格式存储来节省空间`
 
list-max-ziplist-entries 512 
#`list数据类型多少节点以下会采用去指针的紧凑存储格式`
 
list-max-ziplist-value 64  
#`list数据类型节点值大小小于多少字节会采用紧凑存储格式`
 
set-max-intset-entries 512  
#`set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储`
 
activerehashing yes    
#`是否激活重置哈希`
带上配置文件启动服务:
  • 进入到redis安装目录,将redis配置文件redis.conf移动至redis启动文件所在目录下
[root@cli redis-3.0.7]# pwd
/usr/local/src/redis-3.0.7

[root@cli redis-3.0.7]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README     runtest-cluster  src
[root@cli redis-3.0.7]# cp redis.conf /usr/local/bin/
  • 启动 redis-server 服务,并查看启动进程(终端A)
[root@cli bin]# redis-server redis.conf
[root@cli bin]# ps -ef | grep redis
root       9791   9631  0 13:09 pts/1    00:00:00 redis-cli
root      14674      1  0 14:23 ?        00:00:00 redis-server 127.0.0.1:6379
root      14681  13264  0 14:23 pts/2    00:00:00 grep --color=auto redis
  • 启动 redis-cli 服务(终端B)
[root@cli bin]# redis-cli -h 192.168.182.10 -a 123456
192.168.182.10:6379> ping 
PONG

redis相关原理及面试官由浅到深必问的15大问题(高级)
面试中关于Redis的问题看这篇就够了
Redis详解 - 原理和机制

发布了97 篇原创文章 · 获赞 10 · 访问量 3378

猜你喜欢

转载自blog.csdn.net/VillianTsang/article/details/103902838