没有合适的资源?快使用搜索试试~ 我知道了~
2.丰富的数据类型--Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作 3.原子
资源详情
资源评论
资源推荐
www.linuxfan.cn
1
第四十五章:Redis 高性能数据库
一、Redis 概述;
二、应用场景分析;
三、Redis 的数据回收策略;
四、案例:搭建 Redis 高性能数据库;
五、扩展:Nginx+Tomcat+Mysql+Redis+实现 session 回话共享;
一、Redis 概述:
概述:redis 是一个可持久化的单进程单线程 key-value 类型高速内存缓存系统,和 Memcached
类似,它支持存储的 value 类型相对更多,包括 string(字符串)、list(列表)、set(集合)、zset(sorted
set --有序集合)和 hashs(哈希类型)。这些数据类型都支持 push/pop、add/remove 及取交集
并集和差集及更丰富的操作。
与 memcached 一样,为了保证效率,数据都是缓存在内存中。区别的是 redis 会定期通过
异步操作把数据库数据 flush 到硬盘上进行保存。因为是纯内存操作,Redis 的性能非常出色,
每秒可以处理超过 10 万次读写操作,是已知性能最快的 Key-Value DB,并且在此基础上实
现了 master-slave(主从)同步,当前 Redis 的应用已经非常广泛,国内像新浪、淘宝,国外像
Flickr、Github 等均在使用 Redis 的缓存服务。官网地址:https://redis.io/ ,目前由 redis 项
目的开发和维护由 vmware 厂商负责提供支持;
优点:
1.性能极高--Redis 能支持超过 100K+ 每秒的读写频率。
2.丰富的数据类型--Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据
类型操作。
3.原子性--Redis 的所有操作都是原子性(即所有操作要么成功要么失败不执行),同时 Redis
还支持对几个操作全并后的原子性执行。
4.Redis 运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权
衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上
相同的复杂的数据结构,在内存中操作起来非常简单,这样 Redis 可以做很多内部复杂性很
强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进
行随机访问。
二、应用场景分析:
MySql+Memcached 架构的问题:实际 MySQL 是适合进行海量数据存储的,通过 Memcached
将热点数据加载到 cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据
量的不断增加,和访问量的持续增长,我们遇到了很多问题:
1.MySQL 需要不断进行拆库拆表,Memcached 也需不断跟着扩容,扩容和维护工作占据大
量开发时间。
2.Memcached 与 MySQL 数据库数据一致性问题。
3.Memcached 数据命中率低或 down 机,大量访问直接穿透到 DB,MySQL 无法支撑。
4.跨机房 cache 同步问题。
www.linuxfan.cn
2
Redis 的应用场景:
Redis 更像一个加强版的 Memcached,那么何时使用 Memcached,何时使用 Redis 呢?
1.Redis 不仅仅支持简单的 k/v 类型的数据,同时还提供 list,set,zset,hash 等数据结构的
存储。
2.Redis 支持数据的备份,即 master-slave 模式的数据备份。
3.Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载
进行使用。
4.Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量
的情况(如人人网大量查询用户信息、好友信息、文章信息等)。
Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如
新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。
三、Redis 的数据回收策略:
Redis 的回收策略:
volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据
淘汰;
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰;
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰;
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰;
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰;
no-enviction(驱逐):禁止驱逐数据;
四、案例:搭建 Redis 高性能数据库:
案例环境:
系统
主机名
IP 地址
软件
Centos 7.4
redis.linuxfan.cn
192.168.100.101
redis-4.0.9.tar.gz
phpredis-4.0.2.tar.gz
实验步骤:
➢ 安装并配置 Redis 服务;
www.linuxfan.cn
3
➢ 调整 Redis 服务的配置;
➢ 结合 PHP 测试 Redis 服务;
➢ Redis 中操作之 String;
➢ Redis 中操作之 list;
➢ Redis 中操作之 set;
➢ Redis 中操作之 zset;
➢ Redis 中操作之 hash;
➢ Redis 中操作之其他操作;
➢ 安装并配置 Redis 服务;
[root@redis ~]# wget http://download.redis.io/releases/redis-4.0.9.tar.gz
[root@redis ~]# tar zxvf redis-4.0.9.tar.gz
[root@redis ~]# cd redis-4.0.9
[root@redis redis-4.0.9]# make
[root@redis redis-4.0.9]# echo $?
[root@redis redis-4.0.9]# cd
[root@redis ~]# mkdir -p /usr/local/redis
[root@redis ~]# cp /root/redis-4.0.9/src/redis-server /usr/local/redis/ ##服务端程序
[root@redis ~]# cp /root/redis-4.0.9/src/redis-cli /usr/local/redis/ ##客户端程序
[root@redis ~]# cp /root/redis-4.0.9/redis.conf /usr/local/redis/ ## 主 配 置 文
件
[root@redis ~]# ls /usr/local/redis/
redis-cli redis.conf redis-server
[root@redis ~]# sed -i '/^bind 127.0.0.1$/s/127.0.0.1/192.168.100.101/g'
/usr/local/redis/redis.conf
[root@redis ~]# sed -i '/protected-mode/s/yes/no/g' /usr/local/redis/redis.conf
##关闭 redis 的保护模式
[root@redis ~]# sed -i '/daemonize/s/no/yes/g' /usr/local/redis/redis.conf
##开启 redis 的后台守护进程模式
[root@redis ~]# sed -i '/requirepass/s/foobared/123123/g' /usr/local/redis/redis.conf ##
设置 redis 的密码为 123123
[root@redis ~]# sed -i '/requirepass 123123/s/^#//g' /usr/local/redis/redis.conf ##
开启 redis 的密码
附:redis.conf 主配置文件详解
daemonize yes #以后台 daemon 方式运行 redis
pidfile "/var/run/redis.pid" #redis 以后台运行,默认 pid 文件路径/var/run/redis.pid
port 6379 #默认端口
bind 127.0.0.1 #默认绑定本机所有 ip 地址,为了安全,可以只监听内网 ip
timeout 300 #客户端超时设置,单位为秒
loglevel verbose #设置日志级别,支持四个级别:debug、notice、verbose、warning
logfile stdout #日志记录方式,默认为标准输出,logs 不写文件,输出到空设备/deb/null
www.linuxfan.cn
4
logfile "/usr/local/redis/var/redis.log" #可以指定日志文件路径
databases 16 #开启数据库的数量
save 900 1
save 300 10
save 60 10000
创建本地数据库快照,格式:save * *
900 秒内,执行 1 次写操作后触发快照
300 秒内,执行 10 次写操作
60 秒内,执行 10000 次写操作
rdbcompression yes #启用数据库 lzf 压缩,也可以设置为 no
dbfilename dump.rdb #本地快照数据库名称
dir "/usr/local/redis/var/" #本地快照数据库存放目录
requirepass 123456 #设置 redis 数据库连接密码
maxclients 10000 #同一时间最大客户端连接数,0 为无限制
maxmemory 1024MB #设定 redis 最大使用内存,值要小于物理内存,必须设置
appendonly yes #开启日志记录,相当于 MySQL 的 binlog
appendfilename "appendonly.aof" #日志文件名,注意:不是目录路径
appendfsync everysec #设置日志同步的频率,每秒执行同步,还有两个参数 always、no 一般
设置为 everysec,相当于 MySQL 事物日志的写方式
Slaveof 设置数据库为其他数据库的从数据库
Masterauth 主数据库连接需要的密码验证
vm-enabled 是否开启虚拟内存支持 (vm 开头的参数都是配置虚拟内存的)
vm-swap-file 设置虚拟内存的交换文件路径
vm-max-memory 设置 redis 使用的最大物理内存大小
vm-page-size 设置虚拟内存的页大小
vm-pages 设置交换文件的总的 page 数量
vm-max-threads 设置使用 swap 存储同时使用的线程数量,通常设置值为核心数相同,如果
设置为 0,则会以串行方式,对数据的完整性有着极大的保证
Glueoutputbuf 把小的输出缓存存放在一起
hash-max-zipmap-entries 设置 hash 的临界值
Activerehashing 重新 hash
[root@redis ~]# cat <<END >>/etc/init.d/redis
#!/bin/sh
# chkconfig: 2345 80 90
# description: Start and Stop redis
#PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/redis/redis-server
REDIS_CLI=/usr/local/redis/redis-cli
PIDFILE=/var/run/redis_6379.pid
CONF="/usr/local/redis/redis.conf"
AUTH="123123"
LISTEN_IP=\$(netstat -utpln |grep redis-server |awk '{print \$4}'|awk -F':' '{print \$1}')
剩余15页未读,继续阅读
文润观书
- 粉丝: 22
- 资源: 318
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240430_144340_com.ss.android.ugc.live.jpg
- 回到山沟沟.mp3
- 基于matlab实现自适应波束形成RLS及LMS算法仿真源程序1.rar
- 基于matlab实现自己编写的基于卡尔曼滤波的利用加速度传感器的计步器,测试数据是传感器放在腰部和手臂 .rar
- 基于matlab实现阵列信号处理,波束形成.rar
- 111111111111111111
- 基于matlab实现计步器编程;对当前的计步器装置的数值算法模拟 .rar
- Mdb学习查看PW;access;mdb;pw;password;patch
- 基于matlab实现关于语音信号声源定位DOA估计所用的一些传统算法.rar
- 基于ultralytics-yolov8, 将其检测/分类/分割/姿态等任务移植到rk3588上
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0