Loading

01-Redis系列之-Redis介绍安装配置

Redis初识

Redis主要内容

1 redis介绍,特性,安装和配置,典型应用场景
2 单线程架构,5大数据类型操作,通用指令和高级API的使用
3 高级用法(慢查询,管道,shu发布订阅,bitmap位图,HyperLogLog,GEO地理位置信息)
4 持久化rdb和aof
5 主从复制,子进程开销和优化,两大阻塞(fork阻塞和aof追加阻塞)
6 哨兵和集群的详解和搭建,主从架构高可用
7 双写一致性,缓存详解和优化点(缓存更新策略,粒度,缓存穿透,击穿,雪崩)
8 布隆过滤器,MySQL主从搭建,Django集成MySQL读写分离

Redis介绍

开源:早起版本2w3千行

基于键值对的存储系统:字典形式

多种数据结构:字符串,hash,列表,集合,有序集合

高性能,功能丰富

那些公司在用

github,twitter,stackoverflow,阿里,百度,微博,美团,搜狐

Redis特性(8个)

速度快:10w ops(每秒10w读写),数据存在内存中,c语言实现,单线程模型

持久化:rdb和aof

多种数据结构

  • 5大数据结构

  • BitMaps位图:布隆过滤器 本质是 字符串

  • HyperLogLog:超小内存唯一值计数,12kb HyperLogLog 本质是 字符串

  • GEO:地理信息定位 本质是有序集合

支持多种编程语言:基于tcp通信协议,各大编程语言都支持

功能丰富:发布订阅(消息) Lua脚本,事务(pipeline)

简单:源代码几万行,不依赖外部库

主从复制:主服务器和从服务器,主服务器可以同步到从服务器中

高可用和分布式

  • 2.8版本以后使用redis-sentinel支持高可用

  • 3.0版本以后支持分布式

Redis单机安装

版本一览:http://download.redis.io/releases/

下载安装

# 安装
# 0.下载到指定目录
cd /
mkdir hkw
cd hkw
# 1.下载
wget http://download.redis.io/releases/redis-7.0.0.tar.gz
# 2.解压
tar -xzf redis-7.0.0.tar.gz
# 3.建立软连接
ln -s redis-7.0.0 redis
# 4.编译
cd redis
make&&make install
# 在src目录下可以看到
# redis-server--->redis服务器
# redis-cli---》redis命令行客户端
# redis-benchmark---》redis性能测试工具
# redis-check-aof--->aof文件修复工具
# redis-check-dump---》rdb文件检查工具
# redis-sentinel---》sentinel服务器,哨兵
# redis作者对windows维护不好,window自己有安装包

# 卸载redis
# 1、查看redis进程;
ps aux|grep redis
# 2、kill掉进程;
kill 进程id
# 3、进入到redis目录
cd /hkw/redis/
# 4、删除redis对应的文件
rm -f /usr/local/redis/bin/redis*
rm -f /usr/local/bin/redis*
# 5、删除对应的文件
rm -rf redis

三种启动方式

最简启动
# 最简启动(没有配置文件的默认启动方式)
redis-server
ps -ef|grep redis  # 查看进程
netstat -antpl|grep redis  # 查看端口
redis-cli -h ip -p port ping  # 命令查看
动态参数启动
# 动态参数启动(指定一些配置启动)
redis-serve --port 6666  # 启动,监听6666端口
配置文件启动(常用)
# 在redis目录下新建data目录,用来存放数据(配置文件中要用)
mkdir data
# 启动
redis-server /hkw/redis/redis.conf
# 配置文件启动(6379对应手机按键MERZ,意大利女歌手Alessia Merz的名字)
# 通过redis-cli连接,输入config get * 可以获得默认配置
# 在redis目录下创建config目录,copy一个redis.conf文件
# daemonize--》是否是守护进程启动(no|yes)(后台启动redis)
# protected-mode保护模式
# port---》端口号
# logfile--》redis系统日志
# dir--》redis工作目录
# 不支持远程连接:bind 127.0.0.1
# 支持远程连接:bind 0.0.0.0
# requirepass配置密码

# :$ 到文件最后,添加几行
daemonize yes
port 6379
dir "/hkw/redis/data"
logfile "redis.log"
bind 0.0.0.0
protected-mode no
requirepass root123456
配置文件
# 查看一下默认配置,相当于把#和空格都去掉了
cat redis.conf|grep -v "#" |grep -v "^$"
# 重定向到另一个文件
cat redis.conf|grep -v "#" |grep -v "^$" >redis-6666.conf
# 在redis目录下新建data目录,用来存放数据
# 启动redis
redis-server /hkw/redis/redis.conf
# 查看进程
ps -ef |grep redis-server |grep redis
# 查看是否启动
ps aux |grep redis
# 查看日志
cat /hkw/redis/data/redis.log
# 查看redis的配置信息(直接在交互式命令行下修改)
CONFIG GET *  # 查看所有配置信息
CONFIG SET maxmemory 128M
CONFIG REWRITE  # 把修改写到配置文件中

客户端连接

# 客户端连接
redis-cli -h 127.0.0.1 -p 6379
ping  # 返回PONG

关闭redis-server

1.kill -9 进程id号
2.redis-cli -a password shutdown

redis返回值

# redis返回值
状态回复:ping---》PONG
错误回复:hget hello field ---》(error)WRONGTYPE Operation against
整数回复:incr hello---》(integer) 1
字符串回复:get hello---》"world"
多行字符串回复:mget hello foo---》"world" "bar"

Redis典型使用场景

缓存系统:使用最广泛的就是缓存

计数器:网站访问量,转发量,评论数(文章转发,商品销量,单线程模型,不会出现并发问题)

消息队列:发布订阅,阻塞队列实现(简单的分布式,blpop:阻塞队列,生产者消费者)

排行榜:有序集合(阅读排行,点赞排行,推荐(销量高的,推荐))

社交网络:很多特效跟社交网络匹配,粉丝数,关注数,个性推荐

实时系统:垃圾邮件处理系统,布隆过滤器

Redis配置详解

port 6379
daemonize yes   # 以后台模式运行
protected-mode no   # 集群模式下要设置成no,设置为yes的时候需要配合bind参数,只有被bind的ip能访问我们的redis

dir /data/redis # 日记、aof、rdb文件都会保存到这里 所以这个路径要是机器磁盘空间最大的(可通过df –h来获取磁盘信息)
logfile redis-6379.log  # 产生的日记名
loglevel notice  # 日记级别(用于生产环境)

timeout 1800  # 在客户端空闲多久后关闭连接,单位为秒。0表示永不关闭,这里的值必须大于客户端设置的连接池的最小空闲时间
tcp-keepalive 0  # 0表示在没有通信的情况下,不会向客户端发送TCP ACK来检测客户端是否被关闭,因为在客户端有空闲检测,所以服务端没必要去检测客户端的状态

maxmemory 4gb  # redis最多能用多少内存,如果不设置的话,redis会一直消耗完系统所有的内存
maxmemory-policy volatile-lfu  # redis达到maxmemory后的内存回收策略,lfu比lru性能更好
lfu-log-factor 10
lfu-decay-time 1

dbfilename redis-6379.rdb  # 产生的rdb文件名
rdbcompression yes  # 开启rdb文件压缩
stop-writes-on-bgsave-error yes  # bgsave错误的时候停止写操作来保证bgsave成功
rdbchecksum yes  # 检测rdb文件的完整性

appendonly yes  # 开启aof,建议主节点关闭,从节点开启
appendfsync everysec  # aof刷盘策略
auto-aof-rewrite-min-size 64mb  # 当aof文件多大的时候才进行重写
auto-aof-rewrite-percentage 100  # aof增长率
no-appendfsync-on-rewrite yes   # 在aof重写的时候时候不进行正常的aof
appendfilename redis-6379.aof  # 产生的aof文件名

# 当hash的大小小于512个,并且每个值都小于64byte时,就使用ziplist存储
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2    # redis的list结构是quickList,每个quickList由多个quicklistNode组成,每个quicklistNode有个指针指向实际存储的zipList。这里的-2是指zipList的长度8kb,超出了这个字节数,就会新起一个ziplist
list-compress-depth 0   # 压缩深度为0,表示zipList不压缩,不压缩的话,push/pop会快;深度为1时,表示quicklist首尾两个ziplist不压缩,其他的都压缩;如果深度为2,就表示quicklist的首尾第一个ziplist 以及首尾第二个ziplist都不压缩,其他的都压缩;以此类推
set-max-intset-entries 512  # 当intset的元素个数达到512个后,intset升级成dict
zset-max-ziplist-entries 128    # 与hash同理,因为set是hash的特殊情况,set的value都是null
zset-max-ziplist-value 64
# hll-sparse-max-bytes 3000

slowlog-max-len 1000    # 慢查询队列的长度
slowlog-log-slower-than 1000   # 多少时间定义为慢查询 单位微秒

cluster-enabled yes # 是否以集群的形式启动
cluster-config-file redis-nodes.conf
cluster-require-full-coverage no    # 集群中是否16384个槽都可用或所有master节点都没有问题才对外提供服务,保证集群的完整性 
cluster-node-timeout 15000    # 各个节点相互发送消息的频率,单位为毫秒。某节点发现与其他节点最后通信时间超过cluster-node-timeout/2时会发送ping命令,同时带上slots槽数组(2KB)和整个集群1/10的状态数据(10个节点的状态数据约1KB),该参数也会影响故障转移时间

client-output-buffer-limit normal 0 0 0 # 不限制普通客户端缓冲区
client-output-buffer-limit replica 512mb 128mb 60   # slave同步主节点的数据,当slave缓冲区超过512m或者缓冲区在60s秒一直处于128m以上,slave节点会被挂掉
client-output-buffer-limit pubsub 32mb 8mb 60

replica-lazy-flush yes  # 从库接收完rdb文件后的 flush操作
lazyfree-lazy-eviction yes  # 内存达到 maxmemory时进行淘汰
lazyfree-lazy-expire yes    # key过期删除
lazyfree-lazy-server-del yes    # rename指令删除destKey
posted @ 2023-03-05 20:24  hkwJsxl  阅读(20)  评论(0编辑  收藏  举报