目录

一、应用发展之路

二、Redis安装 -Windows安装

三、Redis - Linux安装


一、应用发展之路

1、单机Mysql

2、Memcached(缓存)+Mysql+垂直拆分

3、Mysql主从读写分离

4、分表分库+水平拆分+mysql集群

5、Mysql的扩展性瓶颈

6、今天什么样子

Nosql,这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系型数据库,增删字段宛如噩梦。

大数据时代3V和3高:3V 海量Volume 多样Variety 实时Velocity;3高 高可用 高并发 高可扩。

redis,可容许 一秒钟写8W,读11W

nosql数据模型:聚合模型 KV模型,BSON模型,列存储(Cassandra、HBase、分布式文件系统)、图关系数据库(Neo4J、InfoGrid)

二、分布式数据库的CAP+BASE

关系型数据库 ACID、A原子性 C一致性 I独立性 D持久性

A(Atomicity)原子性:原子性很容易理解,也就是说事物里所有操作要么全部做完,要么都不做,事物成功的条件是事物里的所有操作都成功,只要有一个操作失败整个事物就失败,需要会滚。比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱就会莫名其妙少100元。

C(Consistency)一致性:一致性指数据库要一直处于一致的状态,事物的运行不会改变数据库原本的一致性约束。

I(Isolation)独立性:所谓独立性是指并发的事物之间不会互相影响,如果一个事务要访问的数据正在被另一个事务修改,只要另一个事务未提交,它所访问的数据就不受未提交事务的影响。比如现在有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。

D(Durability)持久性:持久性是指一旦事务提交后,他所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。

Nosql CAP、 C强一致性 A可用性 P分区容错性

CA 传统数据库

AP 大部分网站架构

CP Redis、Mongodb

BASE:基本可用 软状态 最终一致

二、Redis安装 -Windows安装

1、下载redis

Releases · microsoftarchive/redis · GitHub

网盘下载:

链接:https://pan.baidu.com/s/1ZRzMaS5eqCPaotX5DljY3w&shfl=sharepset

提取码:spf0

2、安装启动

安装服务:redis-server.exe redis.windows.conf

#启动服务:redis-server.exe  --service-start --service-name redisserver1

#停止服务:redis-server.exe  --service-stop --service-name redisserver1

#卸载服务:redis-server.exe  --service-uninstall--service-name redisserver1

验证已安装:①查看服务 win+r 查看服务

②连接redis 打开另一个cmd窗口,客户端调用:redis-cli.exe -h 127.0.0.1 -p 6379

配置文件 redis.windows.conf:

ip bind 127.0.0.1

端口 port 6379

密码 requirepass footbared

三、Redis - Linux安装

下载github:GitHub - redis/redis: Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps.Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps. - GitHub - redis/redis: Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps.

redis启动报错 系统找不到指定文件_nosql

https://github.com/redis/redis

主从结构

1、yum install gcc-c++

2、获取安装包redis-4.0.11.tar.gz,放到服务器 10.29.192.47 和10.29.192.48中

安装路径 /usr/local/redis

3、解压 tar -zxvf redis-4.0.11.tar.gz

4、进入 cd redis4.0.11

5、make

6、启动: ./src/redis-server redis.conf

启动成功

redis启动报错 系统找不到指定文件_Redis_02

由于不是守护线程方式启动,需要ctrl+c 停止服务

7、vi redis.conf 修改配置文件

daemonize no 修改为 daemonize yes ,以守护线程启动

8、./src/redis-server redis.conf 再次启动redis

9、ps -ef |grep redis 查看redis服务

10、./src/redis-cli 启动客户端链接

输入info,查看当前redis信息

输入shutdown,停止redis服务

11、改造主从

47 服务器 cd /usr/local/redis/redis-4.0.2路径下新建config文件夹,新增三个配置文件

48 服务器 cd /usr/local/redis/redis-4.0.2路径下新建config文件夹,新增三个配置文件

vi master-6739.conf

bind 0.0.0.0
port 6379
logfile "6379.log"
dbfilename "dump-6379.rdb"
daemonize yes
rdbcompression yes

vi slave-6380.conf

bind 0.0.0.0
port 6380
logfile "6380.log"
dbfilename "dump-6380.rdb"
daemonize yes
rdbcompression yes
slaveof 1.2.3.4 6379

vi slave-6381.conf

bind 0.0.0.0
port 6381
logfile "6381.log"
dbfilename "dump-6381.rdb"
daemonize yes
rdbcompression yes
slaveof 1.2.3.5 6379

完整配置文件master:

# 守护进程模式
daemonize yes 

# pid file
pidfile /usr/local/redis/redis.pid

# 监听端口
port 6379

# TCP接收队列长度,受/proc/sys/net/core/somaxconn和tcp_max_syn_backlog这两个内核参数的影响
tcp-backlog 511

# 一个客户端空闲多少秒后关闭连接(0代表禁用,永不关闭)
timeout 0

# 如果非零,则设置SO_KEEPALIVE选项来向空闲连接的客户端发送ACK
tcp-keepalive 60

# 指定服务器调试等级
# 可能值:
# debug (大量信息,对开发/测试有用)
# verbose (很多精简的有用信息,但是不像debug等级那么多)
# notice (适量的信息,基本上是你生产环境中需要的)
# warning (只有很重要/严重的信息会记录下来)
loglevel notice

# 指明日志文件名
logfile "./redis7003.log"

# 设置数据库个数
databases 16

# 会在指定秒数和数据变化次数之后把数据库写到磁盘上
# 900秒(15分钟)之后,且至少1次变更
# 300秒(5分钟)之后,且至少10次变更
# 60秒之后,且至少10000次变更
save 900 1
save 300 10
save 60 10000


# 默认如果开启RDB快照(至少一条save指令)并且最新的后台保存失败,Redis将会停止接受写操作
# 这将使用户知道数据没有正确的持久化到硬盘,否则可能没人注意到并且造成一些灾难
stop-writes-on-bgsave-error yes

# 当导出到 .rdb 数据库时是否用LZF压缩字符串对象
rdbcompression yes

# 版本5的RDB有一个CRC64算法的校验和放在了文件的最后。这将使文件格式更加可靠。
rdbchecksum yes

# 持久化数据库的文件名
dbfilename dump.rdb

# 工作目录
dir ./

# 当master服务设置了密码保护时,slav服务连接master的密码  master需要注释此行,slave打开
masterauth m2z4kz9*l

# 当一个slave失去和master的连接,或者同步正在进行中,slave的行为可以有两种:
#
# 1) 如果 slave-serve-stale-data 设置为 "yes" (默认值),slave会继续响应客户端请求,
# 可能是正常数据,或者是过时了的数据,也可能是还没获得值的空数据。
# 2) 如果 slave-serve-stale-data 设置为 "no",slave会回复"正在从master同步
# (SYNC with master in progress)"来处理各种请求,除了 INFO 和 SLAVEOF 命令。
slave-serve-stale-data yes

# 你可以配置salve实例是否接受写操作。可写的slave实例可能对存储临时数据比较有用(因为写入salve
# 的数据在同master同步之后将很容易被删除
slave-read-only yes

# 是否在slave套接字发送SYNC之后禁用 TCP_NODELAY?
# 如果你选择“yes”Redis将使用更少的TCP包和带宽来向slaves发送数据。但是这将使数据传输到slave
# 上有延迟,Linux内核的默认配置会达到40毫秒
# 如果你选择了 "no" 数据传输到salve的延迟将会减少但要使用更多的带宽
repl-disable-tcp-nodelay no

# slave的优先级是一个整数展示在Redis的Info输出中。如果master不再正常工作了,哨兵将用它来
# 选择一个slave提升=升为master。
# 优先级数字小的salve会优先考虑提升为master,所以例如有三个slave优先级分别为10,100,25,
# 哨兵将挑选优先级最小数字为10的slave。
# 0作为一个特殊的优先级,标识这个slave不能作为master,所以一个优先级为0的slave永远不会被
# 哨兵挑选提升为master
slave-priority 100


# 密码验证
# 警告:因为Redis太快了,所以外面的人可以尝试每秒150k的密码来试图破解密码。这意味着你需要
# 一个高强度的密码,否则破解太容易了
requirepass 02394kz9*l 

# redis实例最大占用内存,不要用比设置的上限更多的内存。一旦内存使用达到上限,Redis会根据选定的回收策略(参见:
# maxmemmory-policy)删除key
maxmemory 3gb

# 最大内存策略:如果达到内存限制了,Redis如何选择删除key。你可以在下面五个行为里选:
# volatile-lru -> 根据LRU算法删除带有过期时间的key。
# allkeys-lru -> 根据LRU算法删除任何key。
# volatile-random -> 根据过期设置来随机删除key, 具备过期时间的key。 
# allkeys->random -> 无差别随机删, 任何一个key。 
# volatile-ttl -> 根据最近过期时间来删除(辅以TTL), 这是对于有过期时间的key 
# noeviction -> 谁也不删,直接在写操作时返回错误。
maxmemory-policy volatile-lru

# 默认情况下,Redis是异步的把数据导出到磁盘上。这种模式在很多应用里已经足够好,但Redis进程
# 出问题或断电时可能造成一段时间的写操作丢失(这取决于配置的save指令)。
#
# AOF是一种提供了更可靠的替代持久化模式,例如使用默认的数据写入文件策略(参见后面的配置)
# 在遇到像服务器断电或单写情况下Redis自身进程出问题但操作系统仍正常运行等突发事件时,Redis
# 能只丢失1秒的写操作。
#
# AOF和RDB持久化能同时启动并且不会有问题。
# 如果AOF开启,那么在启动时Redis将加载AOF文件,它更能保证数据的可靠性。
appendonly no

# aof文件名
appendfilename "appendonly.aof"

# fsync() 系统调用告诉操作系统把数据写到磁盘上,而不是等更多的数据进入输出缓冲区。
# 有些操作系统会真的把数据马上刷到磁盘上;有些则会尽快去尝试这么做。
#
# Redis支持三种不同的模式:
#
# no:不要立刻刷,只有在操作系统需要刷的时候再刷。比较快。
# always:每次写操作都立刻写入到aof文件。慢,但是最安全。
# everysec:每秒写一次。折中方案。 
appendfsync everysec

# 如果AOF的同步策略设置成 "always" 或者 "everysec",并且后台的存储进程(后台存储或写入AOF
# 日志)会产生很多磁盘I/O开销。某些Linux的配置下会使Redis因为 fsync()系统调用而阻塞很久。
# 注意,目前对这个情况还没有完美修正,甚至不同线程的 fsync() 会阻塞我们同步的write(2)调用。
#
# 为了缓解这个问题,可以用下面这个选项。它可以在 BGSAVE 或 BGREWRITEAOF 处理时阻止主进程进行fsync()。
# 
# 这就意味着如果有子进程在进行保存操作,那么Redis就处于"不可同步"的状态。
# 这实际上是说,在最差的情况下可能会丢掉30秒钟的日志数据。(默认Linux设定)
# 
# 如果你有延时问题把这个设置成"yes",否则就保持"no",这是保存持久数据的最安全的方式。
no-appendfsync-on-rewrite yes

# 自动重写AOF文件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# AOF文件可能在尾部是不完整的(这跟system关闭有问题,尤其是mount ext4文件系统时
# 没有加上data=ordered选项。只会发生在os死时,redis自己死不会不完整)。
# 那redis重启时load进内存的时候就有问题了。
# 发生的时候,可以选择redis启动报错,并且通知用户和写日志,或者load尽量多正常的数据。
# 如果aof-load-truncated是yes,会自动发布一个log给客户端然后load(默认)。
# 如果是no,用户必须手动redis-check-aof修复AOF文件才可以。
# 注意,如果在读取的过程中,发现这个aof是损坏的,服务器也是会退出的,
# 这个选项仅仅用于当服务器尝试读取更多的数据但又找不到相应的数据时。
aof-load-truncated yes

# Lua 脚本的最大执行时间,毫秒为单位
lua-time-limit 5000

# Redis慢查询日志可以记录超过指定时间的查询
slowlog-log-slower-than 10000

# 这个长度没有限制。只是要主要会消耗内存。你可以通过 SLOWLOG RESET 来回收内存。
slowlog-max-len 128

# redis延时监控系统在运行时会采样一些操作,以便收集可能导致延时的数据根源。
# 通过 LATENCY命令 可以打印一些图样和获取一些报告,方便监控
# 这个系统仅仅记录那个执行时间大于或等于预定时间(毫秒)的操作, 
# 这个预定时间是通过latency-monitor-threshold配置来指定的,
# 当设置为0时,这个监控系统处于停止状态
latency-monitor-threshold 0

# Redis能通知 Pub/Sub 客户端关于键空间发生的事件,默认关闭
notify-keyspace-events ""

# 当hash只有少量的entry时,并且最大的entry所占空间没有超过指定的限制时,会用一种节省内存的
# 数据结构来编码。可以通过下面的指令来设定限制
hash-max-ziplist-entries 512
hash-max-ziplist-value 64

# 与hash似,数据元素较少的list,可以用另一种方式来编码从而节省大量空间。
# 这种特殊的方式只有在符合下面限制时才可以用
list-max-ziplist-entries 512
list-max-ziplist-value 64

# set有一种特殊编码的情况:当set数据全是十进制64位有符号整型数字构成的字符串时。
# 下面这个配置项就是用来设置set使用这种编码来节省内存的最大长度。
set-max-intset-entries 512

# 与hash和list相似,有序集合也可以用一种特别的编码方式来节省大量空间。
# 这种编码只适合长度和元素都小于下面限制的有序集合
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

# HyperLogLog稀疏结构表示字节的限制。该限制包括
# 16个字节的头。当HyperLogLog使用稀疏结构表示
# 这些限制,它会被转换成密度表示。
# 值大于16000是完全没用的,因为在该点
# 密集的表示是更多的内存效率。
# 建议值是3000左右,以便具有的内存好处, 减少内存的消耗
hll-sparse-max-bytes 3000

# 启用哈希刷新,每100个CPU毫秒会拿出1个毫秒来刷新Redis的主哈希表(顶级键值映射表)
activerehashing yes

# 客户端的输出缓冲区的限制,可用于强制断开那些因为某种原因从服务器读取数据的速度不够快的客户端
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

# 默认情况下,“hz”的被设定为10。提高该值将在Redis空闲时使用更多的CPU时,但同时当有多个key
# 同时到期会使Redis的反应更灵敏,以及超时可以更精确地处理
hz 10

# 当一个子进程重写AOF文件时,如果启用下面的选项,则文件每生成32M数据会被同步
aof-rewrite-incremental-fsync yes

redis.salve配置文件

# pid file
pidfile /var/run/redis_slave.pid
bind 10.10.10.1
# 监听端口
port 8003
 
# 指明日志文件名
logfile "./redis8003.log"
 
# 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
slaveof 127.0.0.1 7003
 
# 当master服务设置了密码保护时,slav服务连接master的密码
masterauth m2z4kz9*l
daemonize yes
rdbcompression yes

12、启动redis

47服务器:./src/redis-server config/master-6379.conf

./src/redis-server config/slave-6380.conf

48服务器:./src/redis-server config/slave-6381.conf

13、测试主从模式

连接主 ./src/redis-cli -a 02394kz9*l -h 10.10.10.1 -p 6379

连接从:./src/redis-cli -a 02394kz9*l -h 10.10.10.2 -p 6380

连接从:./src/redis-cli -a 02394kz9*l -h 10.10.10.2 -p 6381

用master set值 set name cmp

用salver get值 get name

连接redis显示(error) NOAUTH Authentication required. 未认证,需要输入密码

auth "02394kz9*l"

14、redis地址

主: 10.10.10.1 6379 密码:02394kz9*l

从: 10.10.10.2 6380 密码:02394kz9*l

从: 10.10.10.2 6381 密码:02394kz9*l

15、常用命令

进入redis安装路径

启动 ./src/redis-server ./redis.config 

杀redis  kill -9

或者连接redis-cli 进去shutdown:./src/redis-cli -h ip -p 端口 

进入之后 输入 auth “redis密码”

关闭不保存 shutdown nosave

清空整个redis数据  flushall

清空当前redis库数据 flushdb

保存数据 save

保存并关闭redis服务 shutdown