IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 缓存技术—redis -> 正文阅读

[大数据]缓存技术—redis

缓存技术-Redis

什么是redis?

在这里插入图片描述

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。redis是将数据存放到内存中,由于内容存取速度快所以redis被广泛应用在互联网项目中
优点:存取速度快,官方称读取速度会达到30万次每秒,写速度在10万次每秒最有,具体限制于硬件.
缺点:对持久化支持不够良好,所以redis一般配合传统的关系型数据库使用。

redis的应用场景

缓存(数据查询)。<----->(这个是最多使用)
分布式集群架构中的session分离。
聊天室的在线好友列表。
任务队列。(秒杀、抢购、12306等等)
网站访问统计。

安装redis

因为是在linux中安装,以下操作步骤都为linux其中命令
一, 准备
Redis是c语言开发的。安装redis需要c语言的环境。

yum install gcc-c++

将redis-3.0.0.tar.gz拷贝到/usr/upload下解压源码

tar -zxvf redis-3.0.0.tar.gz

进入解压后的目录进行编译

cd /usr/upload/redis-3.0.0

make

安装到指定目录

make install PREFIX=/usr/local/redis

启动和关闭redis

前端启动

1、启动方式:

直接运行bin/redis-server将以前端模式启动。

cd /usr/local/redis/bin
./redis-server

2、启动缺点:

ssh命令窗口关闭则redis-server程序结束,不推荐使用此方法

在这里插入图片描述
**4、前端启动的关闭:**ctrl+c

后端启动

第一步:进入源码目录,里面有一份配置文件 redis.conf,然后将其拷贝到安装路径下

cp /usr/upload/redis-3.0.0/redis.conf  /usr/local/redis/bin

第二步:修改/usr/java/redis/bin下的redis.conf,将daemonize由no改为yes

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RrUaiYhu-1663759438961)(assets\1588858554831.png)]

第三步:启动

./redis-server redis.conf

关闭

到redis/bin目录下执行如下命令

./redis-cli -p 端口号 shutdown

redis的基本命令

redis-cli连上redis服务后,可以在命令行发送命令:

./redis-cli -h 127.0.0.1 -p 6379

1、set和**get:**使用set和get可以向redis设置数据、获取数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CVGMMyAf-1663759438961)(assets\1588858857065.png)]

2、**keys *:**查看当前库中所有的key值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s6jmMzix-1663759438962)(assets\1588858890464.png)]

3、exists:判断key值是否存在

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6i5s2une-1663759438962)(assets\1588859376977.png)]

4、expirettl:expire设置key的过期时间,ttl查看key的有效期

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RcfbJbRw-1663759438962)(assets\1588859832417.png)]

5、**clear:**可以使用clear命令对redis-cli终端屏幕清屏。

Redis的五种数据类型

:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

  1. String:是 redis 最基本的数据类型。一个 key 对应一个value。redis的String可以表示任何数据,比如 jpg图像或者序列化的对象,String的最大值能存储512MB。
  2. Hash:hash 是一个 string 类型的 field 和 value 的映射表
  3. List:有顺序可重复,内部是使用双向链表实现的
  4. Set:元素无顺序,不能重复
  5. SortedSet(zset):有顺序,不能重复

持久化

Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。

? Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者结合用。

RDB持久化

RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘。

? RDB是Redis默认采用的持久化方式,在redis.conf配置文件中默认有此下配置:

save 900 1  #900秒内容如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内容如超过10个key被修改,则发起快照保存
save 60 10000 #表示60秒内如果超过10000个key被修改,则发起快照保存

在redis.conf中:

? 配置dir指定rdb快照文件的位置

? 配置dbfilenam指定rdb快照文件的名称

Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存。

AOF持久化

默认情况下Redis没有开启AOF(append onlyfile)方式的持久化,可以通过appendonly参数开启:appendonly yes
AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof,可以通过appendfilename参数修改:appendfilename appendonly.aof
AOF持久化策略如下:
#appendfsync always #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。
#appendfsync no #从不同步。高效但是数据不会被持久化。

主从复制

在这里插入图片描述
在这里插入图片描述
1、 slave 服务启动,slave 会建立和master 的连接,发送sync 命令。

2、master启动一个后台进程将数据库快照保存到RDB文件中

3、master 就发送RDB文件给slave

4、slave 将文件保存到磁盘上,然后加载到内存恢复

5、master把缓存的命令转发给slave

注意:主死了,从只能读

主从配置

主redis配置

无需特殊配置。

从redis配置

修改从redis服务器上的redis.conf文件,添加slaveof 主redis ip 主redis端口

redis集群的搭建

redis-cluster架构图
redis-cluster架构图
在这里插入图片描述

redis集群的搭建

Redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机。

Redis集群至少需要6台服务器。

搭建伪分布式。可以使用一台虚拟机运行6个redis实例。需要修改redis的端口号7001-7006
使用ruby脚本搭建集群,需要安装ruby。
[root@upload ~]# yum install ruby
[root@upload ~]# yum install rubygems
[root@upload ~]# gem install redis-3.0.0.gem
[root@localhost ~]# cd redis-3.0.0/src
[root@localhost src]# ll *.rb
注意:必须删除dump.rdb和appendonly.aof文件

搭建伪分布式,需要6个redis实例放到/usr/local/redis-cluster目录下,并且运行在不同的端口7001-7006

cp -r  /usr/local/redis  /usr/local/redis-cluster/redis-7001

创建6个redis实例

每个实例运行在不同的端口。还需要修改redis.conf配置文件。配置文件中还需要把cluster-enabled yes前的注释去掉。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pb2f9ndc-1663760831335)(assets\1588862084740.png)]

4.2.2.2.启动每个redis实例

创建启动集群的脚本:start-all.sh 放在/usr/java/redis-cluster目录下。

cd redis-7001
./bin/redis-server bin/redis.conf
cd ..
cd redis-7002
./bin/redis-server bin/redis.conf
cd ..
cd redis-7003
./bin/redis-server bin/redis.conf
cd ..
cd redis-7004
./bin/redis-server bin/redis.conf
cd ..
cd redis-7005
./bin/redis-server bin/redis.conf
cd ..
cd redis-7006
./bin/redis-server bin/redis.conf
cd .. 
[root@localhost redis-cluster]# chmod 777 start-all.sh

创建关闭集群的脚本:shutdown-all.sh,放在/usr/local/redis-cluster目录下。

cd redis-7001
./redis7001/ bin/redis-cli -p 7001 shutdown
./redis7001/ bin/redis-cli -p 7002 shutdown
./redis7001/ bin/redis-cli -p 7003 shutdown
./redis7001/ bin/redis-cli -p 7004 shutdown
./redis7001/ bin/redis-cli -p 7005 shutdown
./redis7001/ bin/redis-cli -p 7006 shutdown
[root@localhost redis-cluster]# chmod 777shutdown-all.sh

4.2.2.3.使用ruby搭建集群

切换到*.rb目录

[root@localhost src]# ./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005  192.168.25.153:7006
>>> Creating cluster
Connecting to node 192.168.25.153:7001: OK
Connecting to node 192.168.25.153:7002: OK
Connecting to node 192.168.25.153:7003: OK
Connecting to node 192.168.25.153:7004: OK
Connecting to node 192.168.25.153:7005: OK
Connecting to node 192.168.25.153:7006: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.25.153:7001
192.168.25.153:7002
192.168.25.153:7003
Adding replica 192.168.25.153:7004 to 192.168.25.153:7001
Adding replica 192.168.25.153:7005 to 192.168.25.153:7002
Adding replica 192.168.25.153:7006 to 192.168.25.153:7003
M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.25.153:7001
   slots:0-5460 (5461 slots) master
M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.25.153:7002
   slots:5461-10922 (5462 slots) master
M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.25.153:7003
   slots:10923-16383 (5461 slots) master
S: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.25.153:7004
   replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3
S: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.25.153:7005
   replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01
S: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.25.153:7006
   replicates 2935007902d83f20b1253d7f43dae32aab9744e6
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.....
>>> Performing Cluster Check (using node 192.168.25.153:7001)
M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.25.153:7001
   slots:0-5460 (5461 slots) master
M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.25.153:7002
   slots:5461-10922 (5462 slots) master
M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.25.153:7003
   slots:10923-16383 (5461 slots) master
M: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.25.153:7004
   slots: (0 slots) master
   replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3
M: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.25.153:7005
   slots: (0 slots) master
   replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01
M: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.25.153:7006
   slots: (0 slots) master
   replicates 2935007902d83f20b1253d7f43dae32aab9744e6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost redis-cluster]# 

4.2.2.4.测试

启动时使用-c参数来启动集群模式,命令如下:

./redis-cli -c -p 7001
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 21:03:44  更:2022-09-24 21:08:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:34:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码