redis简介与环境搭建
redis简介
特性
1、支持复杂的数据特性的内存“database”
他是一种 key-value的存储结构,而其中又包含了string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)这些复杂的存储结构
2、NoSQL = Not Only SQL(key-value)
不同于传统的关系型数据库,redis属于 nosql(not only sql),传统的数据库可以当作是一张张的表,表中有多种多样的字段,字段间有固定的关系,而对于redis,他是一种 key-value的存储结构
3、高性能
redis基于他的内存操作的基础,使用的是单线程的方式进行执行查询命令,这样省去了锁的处理 带来的麻烦,因为redis直接从内存中取数据非常的快,所以他没有使用并发的方式来执行查询命令。相对的,限制redis查询速度的是网络io,还有机器本身的性能。
4、支持灵活的主从同步
数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器
适应场景
1、数据模型比较简单;
2、需要灵活性更强的IT系统;
3、对数据库性能要求较高;
4、不需要高度的数据一致性;
5、对于给定key,比较容易映射复杂值的环境
redis与memcached的区别
1、网络IO;
Memcached是多线程,实际Memcached所有操作都要对这个全局变量加锁,进行计数等工作,带来了性能损耗;Redis使用单线程
2、内存管理;
Memcached使用预分配的内存池的方式,会造成一定程度的空间浪费;Redis使用现场申请内存的方式来存储数据
3、数据一致性;
Memcached提供了cas命令,可以保证多个并发访问操作同一份数据的一致性问题;Redis没有提供cas 命令,并不能保证这点,不过Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断
4、存储方式;
Memcached基本只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能;Redis除key/value之外,还支持list,set,sorted set,hash等众多数据结构,提供了KEYS
5、其他方面—持久化
Redis的持久化;
RDB持久化:是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储(容灾恢复较快)
RDB-相关配置:
save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。
AOF持久化:AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录(数据可靠性一致性更好)
AOF-相关配置:
appendfsync always #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。
appendfsync no #从不同步。高效但是数据不会被持久化。
redis安装
安装环境
wget http://download.redis.io/releases/redis-6.0.1.tar.gz(下载)
tar xzf redis-6.0.1.tar.gz(解压)
cd redis-6.0.1
make(编译)–make成功完后 redis对应目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下
sudo make install<安装>
sudo make test<检查安装是否正确>
新创建一个端口
sh redis-6.0.1/utils/install_server.sh <执行创建端口>(需要root权限)注:红色的部分我们可以自定义,因为默认的路径work权限不能去进行操作,所有需要我们自己去修改这些路径
介绍一下对应的配置文件以及每个配置文件需要我们自己做些什么:
- /etc/redis/[port].conf 设置的端口对应的配置文件
- /var/lib/redis/[port] 存储文件夹,新建端口,mkdir [port]即可
- /var/run/redis_[port].pid pid文件,vim一个空文件
- /etc/init.d/redis_[port] init文件,负责一份其它端口的文件,修改文件中的端口号即可
- /var/log/redis_[port].log 日志文件,vim一个空文件
新建一个集群
./redis-trib.rb create ----replicas 1 127.0.0.1:1001 127.0.0.1:1002 127.0.0.1:1003 127.0.0.1:1004
注:新建集群时需要安装ruby和rubygems组件还需要加载对应接口
<1>yum install ruby
<2>yum install rubygems
<3>gem install redis
QA
Q:如果自己没有root权限,如何新建一个端口
A:可以直接复制一个文件的conf配置,直接通过修改conf配置即可完成端口的配置(如下配置内容)
daemonize yes #是否以后台方式运行
pidfile “/opt/redis/pid/redis_6372.pid”
port 6372
timeout 0
loglevel notice
logfile “/opt/soft/redis-4.0.6/log/redis_6372.log”
databases 16
stop-writes-on-bgsave-error yes
dbfilename “dump.rdb”
dir “/opt/soft/redis-4.0.6/data/6372”
slave-serve-stale-data yes
slave-read-only yes
slave-priority 100
requirepass qwer1234 #密码
appendonly no
appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000 #慢查询预警阀值,单位微秒
slowlog-max-len 128 #慢查询最大储存的条数
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
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
protected-mode yes
启动命令
开启端口服务指令:./opt/soft/redis-4.0.6/src/redis-server …/conf/[port].conf
重启指令:
/etc/init.d/redis_[port] stop
/etc/init.d/redis_[port] start
eg:./opt/soft/redis-4.0.6/src/redis-server …/conf/6372.conf
ps -ef|grep redis-server(查看进程)
如果需要对当前端口的相关内容进行修改设置,直接修改conf文件下对应的配置文件
cat 6372.conf |grep -v ‘#’
redis其他
1、redis建立主从关系----slaveof
修改6372_conf文件,新增主从配置
slaveof 192.168.117.12 6373 ----6372是6373的从节点,6373的数据会被同步到6372这个端口中
2、redis是属于不安全的存储,所以在任何机器上只要知道redis相关配置都可以连接
3、DBSIZE----查看redis的大小
4、–raw---------以中文的方式展示
eg:redis-cli -p 6372 -h localhost --raw
5、redis主从同步的方法
[5.1]config set masterauth ××××× 需要连接的主节点的密码
eg:config set masterauth qwer1234
[5.2]slaveof ip port -----需要连接的主节点的ip和端口
slaveof test.rdb.58dns.org 6372
[5.3]info 等待主从同步
master_link_status:down------down 等待中,若是up就表示同步完了
同步完了后,如果想要去掉主从配置需要如下操作:
[5.4]slaveof no one -----删除从节点配置
[5.5]config set masterauth “” -----将之前设置的主节点密码缓存清空
[5.6]INFO查看即可,这样就保证线上和线下同步了,后续如果有新增数据,只要刷新新数据即可
redis对应相关配置文件
redis.conf
这是redis最重要的配置文件,我们通过redis-server redis.conf 的命令来启动redis
dump.rdb
redis有两种持久化方式,一种是rdb的快照方式,一种是aof的方式,快照方式(当我们的redis down了,只要有这个rdb镜像,只要重启就可以很快的恢复数据,同时,也可以使用这个镜像文件进行数据的迁移)
redis_6372.log
日志是排查问题的主要依据,例如Connection refused(网络问题)Failed Opening .rdb for saving(保存失败) Background saving started (开始备份)
slowlog
名为慢日志,但是他并不是一份真正的日志,他是存在内存中到的,记录了较慢的查询记录,包括查询的key值,查询耗时,方便我们定位超时的问题
使用方式:
slowlog get N-----获取指定数量的慢查询,如果查找全部,去掉N
Slowlog len—查看当前慢查询的长度
SLOWLOG RESET----清空慢查询日志