Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets)和有序集合(sorted sets)等类型。
一、Redis概述
1.1、NoSQL
NoSQL,泛指非关系型的数据库,是不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储,收集万亿比特的数据。这些类型的数据存储没有固定的形式,没有多余操作就可以横向扩展。
1.2、什么是Redis
Redis是NoSQL中的一种存储工具,他是一个key-value存储系统。默认有16个数据库从0到15来进行表示。Redis的存储类型:包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。在此基础上,Redis支持各种不同方式的排序。
Redis 被广泛应用在缓存方向,与传统数据库不同的是 Redis 的数据是存在内存中的,因此读写速度非常快。
Redis为分布式缓存,在多客户端的情况下,共用一份缓存数据,缓存具有一致性。
Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步,为了可靠性。
1.3、Redis特点
性能极高 – Redis读的速度是11W次/s,写的速度是81K次/s
支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
丰富的数据类型,Redis不仅仅支持简单的key-value类型的数据,同时还提供Strings, Lists, Hashes, Sets 及 Ordered Sets 等数据结构的存储。
支持数据的备份,即master-slave模式的数据备份。
1.4、Redis优缺点
优点:
- 对数据高并发读写
- 对海量数据的高效率存储和访问
- 对数据具有的可扩展性和高可用性
缺点:
- redis(ACID)处理非常简单
- 无法做到太复杂的关系数据库模型
1.5、Redis 特性
-
速度快
-
单节点读 110000次/s,写81000次/s
- 数据存放内存中
- 用C语言实现,离操作系统更近
- 单线程架构,6.0开始支持多线程(CPU、IO读写负荷)
-
持久化
-
数据的更新将异步地保存到硬盘(RDB和 AOF)
-
多种数据结构
-
不仅仅支持简单的 key-value 类型数据,还支持:字符串、hash、列表、集合、有序集合,
-
支持多种编程语言
-
功能丰富
-
HyperLogLog、GEO、发布订阅、Lua脚本、事务、Pipeline、Bitmaps,key 过期
-
简单稳定
-
源码少、单线程模型
-
主从复制
-
Redis 支持数据的备份(master-slave)与集群(分片存储),以及拥有哨兵监控机制。
-
Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作合并后的原子性执行。
1.6、Redis 典型使用场景
缓存:
计数器:
消息队列:
排行榜:
社交网络:
1.7、Redis 高并发原理
- Redis是纯内存数据库,一般都是简单的存取操作,线程占用的时间很多,时间的花费主要集中在IO上,所以读取速度快
- Redis使用的是非阻塞 IO,IO 多路复用,使用了单线程来轮询描述符,将数据库的开、关、读、写都转换成了事件,减少了线程切换时上下文的切换和竞争。
- Redis采用了单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争。
- Redis存储结构多样化,不同的数据结构对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据结构加快读取的速度。
- Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。
二、Redis下载与安装
2.1、Redis下载
这里只提供 linux 版本的安装部署
下载 Redis
进入官网找到下载地址:https://redis.io/download
右键 Download 按钮,选择复制链接地址,然后进入 linux 的 shell 控制台:输入 wget 将上面复制的下载链接粘贴上,如下命令:
wget https://download.redis.io/releases/redis-6.2.14.tar.gz
回车后等待下载完毕。
历史版本下载地址: http://download.redis.io/releases/
2.2、Redis安装
2.2.1、指定redis存放位置
[root@localhost]# cd /usr/local/
[root@localhost local]# wget http://download.redis.io/releases/redis-6.2.14.tar.gz
2.2.2、解压
[root@localhost local]# tar -xvf redis-6.2.14.tar.gz
2.2.3、改名
[root@localhost local]# mv redis-6.2.14 redis
2.2.3、安装
CentOS7 安装依赖
yum clean all
yum makecache fast
yum -y install gcc gcc-c++ make tcl
# (可选安装) 安装新版本gcc
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
source /opt/rh/devtoolset-9/enable
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
gcc --version
Ubuntu22.04安装依赖
sudo apt install build-essential gcc g++ make tcl -y
进入redis目录,输入make
[root@localhost /]# cd /usr/local/redis
[root@localhost redis]# make
2.2.4、启动服务
进入src目录,输入./redis-server
[root@localhost redis]# cd src
[root@localhost src]# ./redis-server
2.2.5、使用客户端程序
进入src目录,输入./redis-cli
./redis-cli -h 指定ip -p 指定端口 -a 指定密码
[root@localhost ~]# cd /usr/local/redis/src
[root@localhost src]# ./redis-cli
三、服务器操作
3.1、常用配置
在目录 /usr/local/redis
下有一个 redis.conf 的配置文件。我们上面启动方式就是执行了该配置文件的配置运行的。我们可以通过 cat、vim、less
等 linux 内置的读取命令读取该文件。
这里列举下比较重要的配置项:
配置项名称 | 配置项值范围 | 说明 |
---|---|---|
daemonize | yes、no | yes表示启用守护进程,默认是no即不以守护进程方式运行。其中Windows系统下不支持启用守护进程方式运行 |
port | 指定 Redis 监听端口,默认端口为 6379 | |
bind | 绑定的主机地址,如果需要设置远程访问则直接将这个属性备注下或者改为bind * 即可,这个属性和下面的protected-mode控制了是否可以远程访问 | |
protected-mode | yes 、no | 保护模式,该模式控制外部网是否可以连接redis服务,默认是yes,所以默认我们外网是无法访问的,如需外网连接rendis服务则需要将此属性改为no |
loglevel | debug、verbose、notice、warning | 日志级别,默认为 notice |
databases | 16 | 设置数据库的数量,默认的数据库是0。整个通过客户端工具可以看得到 |
rdbcompression | yes、no | 指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变得巨大 |
dbfilename | dump.rdb | 指定本地数据库文件名,默认值为 dump.rdb |
dir | 指定本地数据库存放目录 | |
requirepass | 设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH命令提供密码,默认关闭 | |
maxclients | 0 | 设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息 |
maxmemory | XXX | 指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新的 vm 机制,会把 Key 存放内存,Value 会存放在 swap 区。配置项值范围列里XXX为数值 |
3.2、服务器端
3.2.1、查看是否启动
[root@localhost redis]# ps -ef|grep redis
或
[root@localhost redis]# ./src/redis-cli ping
3.2.2、启动
前台启动
[root@localhost redis]# ./src/redis-server
后台启动
修改/usr/local/redis/redis.conf文件
daemonize yes #前台启动,改后台启动
指定配置文件,启动
[root@localhost redis]# ./src/redis-server ./redis.conf
3.1.3、关闭
[root@localhost redis]# ./src/redis-cli shutdown
3.2、客户端
3.2.1、启动
[root@localhost redis]# ./src/redis-cli
127.0.0.1:6379>
3.2.2、关闭
方式一:指令ctrl+c
方式二:执行指令quit
方式三:执行指令exit
3.3、设置远程访问
修改/usr/local/redis/redis.conf文件
#bind 127.0.0.1 #注释掉允许本地连接
protected-mode no #允许远程访问
四、Redis客户端
4.1、Redis客户端下载
下载地址:
(局域网)http://192.168.3.200/Software/RedisDesktopManager.exe
4.2、安装
双击打开程序,选择“下一步”
继续选择“我同意”
选择安装路径,点击“安装”
安装中。。。。。。。
安装完成,点击“下一步”
选择“桌面快捷”,点击“完成”
五、Redis客户端应用
5.1、连接Redis服务端
打开客户端
点击“Connect to Redis Server”,创建连接