一、redis介绍

Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序。

Redis属于非关系型数据库和Memcached类似,redis也是一个key-value型存储系统。但redis支持的存储value类型相对更多,包括string(字符串)、list(列表)、set(集合)和zset(有序集合)等。这些数据类型都支持push/pop、add/remove及取交集、并集和差集及更丰富的操作,而且这些操作都是原子性的。为了保证效率,redis的数据都是缓存在内存中。区别是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在基础上实现了master-slave(主从)同步。 

Redis官方网网站是:http://www.redis.io/ 

Redis中文资料网站:https://redis.io/topics/problems

1、redis特点:

①、支持内存缓存,这个功能相当于memcached
②、支持持久化存储,这个功能相当于memcachedb,ttserver
③、数据库类型更丰富。比其他key-value库功能更强
④、支持主从集群、分布式
⑤、支持队列等特殊功能

2、Redis和Memecache的不同

①、存储方式:
memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小, Redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化(笔者注:有RDB快照和AOF日志两种持久化方式,在实际应用的时候,要特别注意配置文件快照参数,要不就很有可能服务器频繁满载做dump)
②、数据支持类型:
redis在数据支持上要比memecache多的多。
③、使用底层模型不同
新版本的redis直接自己构建了VM 机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
④、运行环境不同
redis目前官方只支持Linux 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统环境上的优化

3、Redis支持的键值类型

String 字符串
Hash  哈希
List    列表
Set    集合
Zset  有序集合

二、部署安装redis

1、环境

[root@redis ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@redis ~]# uname -r
2.6.-.el6.x86_64
[root@redis ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[root@redis ~]# getenforce
Disabled

2、安装

mkdir /server/tools -p
cd /server/tools/
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
tar xf redis-3.2..tar.gz
cd redis-3.2.
make
make PREFIX=/usr/local/redis–3.2. install
ln -s /usr/local/redis–3.2. /usr/local/redis
echo "export PATH=/usr/local/redis/bin:$PATH" >>/etc/profile
source /etc/profile

3、安装目录文件介绍

[root@redis ~]# tree /usr/local/redis/bin/
/usr/local/redis/bin/
├── redis-benchmark #redis性能读写测试工具
├── redis-check-aof #对更新日志appenonly.aof检查,类似于mysql binlog
├── redis-check-rdb #用于本地数据库rdb文件的检查
├── redis-cli #redis命令行客户端操作工具
├── redis-sentinel -> redis-server
└── redis-server #redis服务器daemon启动程序

4、创建redis配置文件目录

启动redis

mkdir /usr/local/redis/conf/ -p                                    #创建配置文件目录
cp -a /server/tools/redis-3.2./redis.conf /usr/local/redis/conf/ #拷贝配置文件
redis-server /usr/local/redis/conf/redis.conf & #启动redis

启动成功如下:

[root@redis ~]# :C  May ::39.704 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2. (/) bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port:
| `-._ `._ / _.-' | PID: 4876
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-' :M May ::39.708 # WARNING: The TCP backlog setting of cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of .
:M May ::39.708 # Server started, Redis version 3.2.
:M May ::39.708 # WARNING overcommit_memory is set to ! 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.
:M May ::39.708 # 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.
:M May ::39.708 * The server is now ready to accept connections on port

关闭redis

①使用redis自带脚本:redis-cli shutdown
②ps –ef|grep redis 进行kill杀掉进程

5、redis配置文件详解

daemonize yes                              #是否以后台进程运行
pidfile /var/run/redis/redis-server.pid #pid文件位置
port 6379 #监听端口
bind 127.0.0.1 #绑定地址,如外网需要连接,设置0.0.0. 空格分隔
timeout #连接超时时间,单位秒
loglevel notice #日志级别,分别有:
# debug :适用于开发和测试
# verbose :更详细信息
# notice :适用于生产环境
# warning :只记录警告或错误信息
logfile /var/log/redis/redis-server.log #日志文件位置
syslog-enabled no #是否将日志输出到系统日志
databases 16 #设置数据库数量,默认数据库为0
############### 快照方式 ###############
save #在900s(15m)之后,至少有1个key发生变化,则快照
save #在300s(5m)之后,至少有10个key发生变化,则快照
save #在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 foobared #配置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个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 #redis使用的最大内存上限,保护redis不会因过多使用物理内存影响性能
vm-page-size #每个页面的大小为32字节
vm-pages #设置swap文件中页面数量
vm-max-threads #访问swap文件的线程数
############### 高级配置 ###############
hash-max-zipmap-entries #哈希表中元素(条目)总个数不超过设定数量时,采用线性紧凑格式存储来节省空间
hash-max-zipmap-value #哈希表中每个value的长度不超过多少字节时,采用线性紧凑格式存储来节省空间
list-max-ziplist-entries #list数据类型多少节点以下会采用去指针的紧凑存储格式
list-max-ziplist-value #list数据类型节点值大小小于多少字节会采用紧凑存储格式
set-max-intset-entries #set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储
activerehashing yes #是否激活重置哈希

三、redis主从搭建

1、Master节点

cp -a /server/tools/redis-3.2./redis.conf /usr/local/redis/conf/.conf
修改配置文件如下:
daemonize no
修改为:
daemonize yes #后台程序方式运行

启动Master:

redis-server /usr/local/redis/conf/.conf
[root@redis ~]# ps aux|grep redis
root 0.0 0.9 ? Ssl : : redis-server 127.0.0.1:

2、配置slave节点

cp -a /server/tools/redis-3.2./redis.conf /usr/local/redis/conf/.conf
修改配置文件如下:
daemonize no 修改为:daemonize yes
port
修改为:
port
增加一行:
slaveof 127.0.0.1

启动Slave

redis-server /usr/local/redis/conf/.conf
[root@redis ~]# ps aux|grep redis
root 0.0 0.7 ? Ssl : : redis-server 127.0.0.1:

3、查看redis主从同步信息

     启动redis客户端连接6379和6380两个实例

[root@redis ~]# redis-cli  -h 127.0.0.1 -p
127.0.0.1:>
[root@redis ~]# redis-cli -h 127.0.0.1 -p
127.0.0.1:>

①主节点输入info

[root@redis ~]# redis-cli  -h 127.0.0.1 -p
127.0.0.1:> info

②从节点输入info

 

4、测试

主节点:

127.0.0.1:> set name lulu
OK
127.0.0.1:> get name
"lulu"

从节点:

127.0.0.1:> get name
"lulu"

###至此两个实例实现了数据同步###

四、生产中单机版配置文件

[root@CTC-CaaS-Master01 conf]# egrep -v "#|^$" redis.conf
bind 192.168.166.4
port
protected-mode yes
port
tcp-backlog
timeout
tcp-keepalive
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile "/data/redis-5.0.6/log/redis-server.log"
databases
always-show-logo yes
save
save
save
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay
repl-disable-tcp-nodelay no
replica-priority
requirepass Harbor12345
maxclients
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit
slowlog-log-slower-than
slowlog-max-len
latency-monitor-threshold
notify-keyspace-events ""
hash-max-ziplist-entries
hash-max-ziplist-value
list-max-ziplist-size -
list-compress-depth
set-max-intset-entries
zset-max-ziplist-entries
zset-max-ziplist-value
hll-sparse-max-bytes
stream-node-max-bytes
stream-node-max-entries
activerehashing yes
client-output-buffer-limit normal
client-output-buffer-limit replica 256mb 64mb
client-output-buffer-limit pubsub 32mb 8mb
hz
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

linux运维、架构之路-redis的更多相关文章

  1. linux运维架构师职业规划

    1.假如你从来未接触过Linux的话,首先要做的就找一本指导书来学习.现在公认的Linux的入门书籍是“鸟哥的私房菜”,讲的很全面,鸟哥的私房菜一共分为两部,一部是基础篇,一部是服务器篇.“鸟哥的私房 ...

  2. Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz!

    Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Disc ...

  3. Linux运维企业架构实战系列

    Linux运维企业架构项目实战系列 项目实战1-LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2-LVS.nginx实现负载均衡系列 2.1 项目实战2.1-实现基于LVS负载均衡集 ...

  4. 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路

    做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...

  5. Linux运维企业架构项目实战系列

    Linux运维企业架构项目实战系列 项目实战1—LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2—LVS.nginx实现负载均衡系列2.1 项目实战2.1—实现基于LVS负载均衡集群 ...

  6. Linux 运维入门到跑路书单推荐

    一.基础入门 <鸟哥的Linux私房菜基础学习篇>:最具知名度的Linux入门书<鸟哥的Linux私房菜基础学习篇>,全面而详细地介绍了Linux操作系统. https://b ...

  7. 从零起步做到Linux运维经理, 你必须管好的23个细节

    “不想成为将军的士兵,不是好士兵”-拿破仑 如何成为运维经理? 一般来说,运维经理大概有两种出身:一种是从底层最基础的维护做起,通过出色的维护工作,让公司领导对这个人非常认可,同时对Linux运维工作 ...

  8. linux运维工程师面试题收集

    面试必考 mysql5和mysql6 有什么区别 mysql-server-5.5:默认引擎改为Innodb,提高了性能和扩展性,提高实用性(中继日志自动恢复) mysql-server-5.6:In ...

  9. 从零起步做到Linux运维经理,你必须管好的23个细节

    不想成为将军的士兵,不是好士兵-拿破仑 如何成为运维经理?成为运维经理需要什么样的能力?我想很多运维工程师都会有这样的思考和问题. 如何成为运维经理.一般来说,运维经理大概有两种出身,一种是从底层最基 ...

  10. Linux运维工程师成长必经之路

    本路线图是从0基础开始,全方位由浅入深,按照多年Linux培训经验和优秀教学方法制定的学习思路和学习方法,路线图包括初级入门.中级进阶.高级提升和资深冲刺四个阶段,每阶段对应着不同优秀的课程和学习方法 ...

随机推荐

  1. N个小时学SAP ABAP

    接触SAP已将近3年了,期间ABAP资料也看了不少,都是东看一点.西看一点的,也没做个笔记之类的,很明显效果不是很好.今天突然间领悟到了一点:不能再这样漫无目的的学习了,应该一本书一本书的看,否则就太 ...

  2. 中国MOOC_零基础学Java语言_第4周 循环控制_1素数和

    第4周编程题 查看帮助 返回   第4周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截 ...

  3. lambda一些查询语句

    <!--得分数据结构-->1 <Score> <studentid>1</studentid> <courseid>1</course ...

  4. appium输入和清除操作各方法对比(android)

    最近在写android app自动化测试时,发现输入和清除操作耗费时间比较长,下面我用了不同的方法进行输入和清除操作,对比下时间(选取测试的一组数据做分析),选出最佳方法. 1.输入操作 1.1.we ...

  5. robot framework python3环境下学习笔记(1)——安装robot framework

    安装环境:win10 64位,python3.6 1,安装robot framework pip install robotframework 2,安装wxPython pip install wxP ...

  6. Django-DRF组件学习-预备知识

    1.web开发应用模式 在开发Web应用中,有两种应用模式: 1.1 前后端不分离 所谓的前后端不分离,就是前后端数据都在同一个服务器中,前端的样式以及页面渲染都由后端一次性渲染出来在前端浏览器中展示 ...

  7. note.js 引用jQuery,

    1.安装jQuery npm install jquery 在自己的项目目录里面打开cmd进行安装 2.下面直接在js文件里面引用jQuery //调用jQuery来操作页面 const jsdom ...

  8. xmake新增对Cuda代码编译支持

    最近研究了下NVIDIA Cuda Toolkit的编译环境,并且在xmake 2.1.10开发版中,新增了对cuda编译环境的支持,可以直接编译*.cu代码. 关于Cuda Toolkit相关说明以 ...

  9. django中的一对一的关系

    在django中一对一的关系其实就是在后面加上了unique=True 唯一的操作 源码就是这样的 其余的操作跟多对一的操作一样

  10. (3.4)常用知识-char与varchar的选择

    1.char与varchar的比较 (1)数据存储开销 [1]varchar列需要2个额外的字节来记录存储数据的长度 [2]每个可为null的char列,需要一些字节(空位图)来反应数据的为空性 [3 ...