💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
Redis是一个开源的,内存数据结构存储系统,它可以用作数据库、缓存和消息中间件。 Redis支持多种数据类型,包括字符串、哈希、列表、集合、有序集合等,并且它的所有数据都存储在内存中,因此读取和写入的速度非常快。此外,Redis还支持数据的持久化,可以通过配置将内存中的数据保存到磁盘上,以便在重启后能够恢复数据。Redis的设计哲学是“一切都是数据”,即任何数据都可以作为键值对存储在Redis中。
Redis的主要特性包括:
- 高性能:由于Redis完全基于内存,因此它的读取和写入速度非常快,适合作为缓存层使用。
- 丰富的数据类型:支持多种数据类型,如字符串、哈希、列表、集合和有序集合等,满足不同的应用需求。
- 持久化:支持RDB和AOF两种持久化方式,确保数据的安全性。
- 事务:支持简单的事务操作,可以保证一系列操作的原子性。
- 发布/订阅模型:支持发布/订阅模型,用于实现实时消息系统。
- Lua脚本:支持Lua脚本执行,可以在服务器端进行复杂操作,减少网络往返时间。
Redis的广泛应用场景包括缓存层、消息队列、实时数据分析、应用级缓存等。由于其高性能和丰富的功能集,Redis已经成为许多高性能应用的首选数据库和缓存解决方案
目录
- NoSQL之Redis配置与优化
- 1. 关系数据库和非关系型数据库
- 2. SQL 与 NoSQL 的区别
- 3. Redis
- 3.5 五大基础数据类型3.1 Redis概述
- 问题
- 3.2 Redis 为什么那么快?
- 3.3 Redis安装部署
- 3.3.1 环境准备
- 3.3.2 修改内核参数
- 3.3.3 安装redis
- 3.3.4 修改配置文件
- 3.3.5 定义systemd服务管理脚本
- 3.4 Redis 命令工具
- 3.4.1 redis-cli 命令行工具
- 3.4.2 redis-benchmark 测试工具
- 3.5 五大基础数据类型
- 3.5.1 String
- 3.5.2 List
- 3.5.3 Hash
- 3.5.4 Set
- 3.5.5 Zset
- 3.6 通用
- 3.5 五大基础数据类型3.1 Redis概述
NoSQL之Redis配置与优化
1. 关系数据库和非关系型数据库
- 关系型数据库
- 一个结构化的数据库,创建在关系模型基础上
- 一般面向于记录
- 包括 Oracle、MySQL、SQL Server、Microsoft Access、DB2等
- 非关系型数据库
- 除了主流的关系型数据库外的数据库
- 包括 Redis、MongBD、Hbase、Memcached等
2. SQL 与 NoSQL 的区别
SQL | NoSoSQL | |
---|---|---|
存储方式 | 二维表格结构 | 不固定的,键值对、文档、索引、图形结构、时间序列等 |
扩展方式 | 纵向扩展(提升硬件性能) | 横向扩展(增加服务器节点数量) |
事务支持 | 基于ACID原则,事务控制更稳定,细粒度更高 | 基于BASE原则,稳定性和细粒度控制方面不如SQL |
典型代表 | MySQL、MariaDB、Oracle、SQL-Server、PostgreSQL | Redis、MongBD、Hbase、Memcached、ElasticSearch、Prometheus |
3. Redis
3.1 Redis概述
-
C语言开发的 、开源的、基于内存运行的 NoSQL
-
数据存储结构 键值对(Key = Value K/V)
-
优点:
- 具有极高的数据读写速度
- 支持丰富的数据类型
- 支持数据的持久化
- 原子性
- 支持数据备份
-
数据类型
-
五大基础类型
-
String 字符串
-
List 列表
-
Hash 哈希/散列
-
Set 无序集合
-
Sorted Set/Zset 有序集合
-
-
三种特殊数据类型
- HyperLogLogs 基数统计
- Bitmaps 位图
- geospatial 地理位置
-
-
端口号:6379
问题
Redis支持几种数据类型?
五种
String 字符串
List 列表
Hash 哈希/散列
Set 无序集合
Sorted Set/Zset 有序集合
3.2 Redis 为什么那么快?
1. redis 基于内存运行,数据操作都是内存中完成的
2. 数据读写采用单线程模型,避免了多线程切换的CPU性能消耗,同时也不用考虑各种锁的问题
3. 采用IO多路复用模型,可以使线程处理更多的网络连接请求,提高并发能力
3.3 Redis安装部署
3.3.1 环境准备
systemctl stop firewalld
systemctl disable --now firewalld
setenforce 0
vim /etc/sysconfig/selinux
SELINUX=disabled
3.3.2 修改内核参数
vim /etc/sysctl.conf
vm.overcommit_memory = 1
net.core.somaxconn = 2048
sysctl -p
3.3.3 安装redis
yum install -y gcc gcc-c++ make
cd /opt
tar xf redis-7.0.13.tar.gz
cd redis-7.0.13/
ls
make
make PREFIX=/usr/local/redis install
#由于Redis源码包中直接提供了 Makefile 文件,所以在解压完软件包后,不用先执行 ./configure 进行配置,可直接执行 make 与 make install 命令进行安装。
cd /usr/local/
cd redis/
ls bin/
ls
mkdir conf log data
ls
cd /opt/redis-7.0.13/
ls
cp redis.conf /usr/local/redis/conf/
useradd -M -s /sbin/nologin redis
cd /usr/local
ll
chown -R redis:redis redis/
ll redis/
cd redis/bin/
ls
pwd
#环境变量
vim /etc/profile
PATH=$PATH:/usr/local/redis/bin #增加一行
source /etc/profile
3.3.4 修改配置文件
vim /usr/local/redis/conf/redis.conf
bind 127.0.0.1 192.168.175.101 #87行,添加 监听的主机地址
protected-mode no #111行,将本机访问保护模式设置no。如果开启了,那么在没有设定bind ip且没有设密码的情况下,Redis只允许接受本机的响应
port 6379 #138行,Redis默认的监听6379端口
tcp-backlog 511 #147 1024/2048
daemonize yes #309行,设置为守护进程,后台启动
pidfile /usr/local/redis/log/redis_6379.pid #341行,指定 PID 文件
logfile "/usr/local/redis/log/redis_6379.log" #354行,指定日志文件
dir /usr/local/redis/data #504行,指定持久化文件所在目录
requirepass abc123 #1037行,增加一行,设置redis密码
ls
3.3.5 定义systemd服务管理脚本
vim /usr/lib/systemd/system/redis-server.service
[Unit]
Description=Redis Server
After=network.target
[Service]
User=redis
Group=redis
Type=forking
TimeoutSec=0
PIDFile=/usr/local/redis/log/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
#启动服务
systemctl daemon-reload
systemctl start redis-server.service
systemctl enable redis-server.service
netstat -lntp | grep 6379
3.4 Redis 命令工具
redis-server:Redis 服务器启动命令
redis-benchmark:性能测试工具,用于检测 Redis 在本机的运行效率
redis-check-aof:修复有问题的 AOF 持久化文件
redis-check-rdb:修复有问题的 RDB 持久化文件
redis-cli:Redis 客户端命令行工具
redis-sentinel:Redis 哨兵集群使用
cd ..
cd conf/
ls
vim redis.conf
redis-cli
keys *
#登录失败
exit
redis-cli -h 192.168.175.101 -p 6379
#-h 指定地址 -p 指定端口号
keys *
#登录失败
auth abc123
keys *
#登录成功
exit
redis-cli -h 192.168.175.101 -p 6379 -a abc123
#-a指定密码可以直接登录
keys *
#没有报错
redis-cli
set name 777
get name
type name
lpush mykey a b c d
lrange mykey 0 1
lrange mykey 0 2
lpush mykey e
lrange mykey 0 2
lrange mykey 0 -1
rpush mykey f
#从右往左推
lrange mykey 0 -1
hset car color blue
hset car name bmw
hlen car
hset car price 50
hlen car
hget car name
hget car price
hget car color
sadd myset a b c d
smembers myset
#无序集合
zadd myzset 1 'cyw' 2 'ylc' 3 'fsj'
zrange myzset 0 -1
zrange myzset 0 -1 WITHSCORES
3.4.1 redis-cli 命令行工具
语法:redis-cli -h host -p port [-a password]
-h :指定远程主机
-p :指定 Redis 服务的端口号
-a :指定密码,未设置数据库密码可以省略-a 选项
若不添加任何选项表示,则使用 127.0.0.1:6379 连接本机上的 Redis 数据库
redis-cli -h 192.168.175.10 -p 6379 -a 'abc123'
3.4.2 redis-benchmark 测试工具
redis-benchmark 是官方自带的 Redis 性能测试工具,可以有效的测试 Redis 服务的性能。
基本的测试语法:redis-benchmark [选项] [选项值]。
-h :指定服务器主机名。
-p :指定服务器端口。
-s :指定服务器 socket
-c :指定并发连接数。
-n :指定请求数。
-d :以字节的形式指定 SET/GET 值的数据大小。
-k :1=keep alive 0=reconnect 。
-r :SET/GET/INCR 使用随机 key, SADD 使用随机值。
-P :通过管道传输<numreq>请求。
-q :强制退出 redis。仅显示 query/sec 值。
--csv :以 CSV 格式输出。
-l :生成循环,永久执行测试。
-t :仅运行以逗号分隔的测试命令列表。
-I :Idle 模式。仅打开 N 个 idle 连接并等待。
#向 IP 地址为 192.168.175.101、端口为 6379 的 Redis 服务器发送 100 个并发连接与 100000 个请求测试性能
redis-benchmark -h 192.168.175.101 -p 6379 -c 100 -n 100000
#测试存取大小为 100 字节的数据包的性能
redis-benchmark -h 192.168.175.10 -p 6379 -q -d 100
#测试本机上 Redis 服务在进行 set 与 lpush 操作时的性能
redis-benchmark -t set,lpush -n 100000 -q
3.5 五大基础数据类型
3.5.1 String
set 键 值
get 键
3.5.2 List
lpush | rpush 键 值1 值2 值3…
lrange 键:
0(起始下标)代表第一个元素
-1(终止下标)代表最后一个元素
3.5.3 Hash
hset 键 字段1 值1
hget 键 字段
3.5.4 Set
sadd 键 值1 值2 值3…
smembers 键
3.5.5 Zset
zadd 键 序号1 值1 序号2 值2…
zrange 键 起始下标 终止下标 [WITHSCORES]
zrangebyscore 键 序号1 序号2
zrem 键 值1 值2…
zremrangebyscore 键 序号1 序号2
3.6通用
type 键 #查看键的数据类型
keys 键 #查询键,支持通配符 * ?
exists 键 #判断键是否存在
expire 键 过期秒数 #设置键的过期时间
ttl 键 #查看键的生命周期时间,-1表示永不过期,-2表示已过期
rename 旧键 新键 #重命名键名,会覆盖已存在的键的值
renamenx 旧键 新键 #重命名键名,如果新键已存在则不执行重命名操作
dbsize #统计当前库的键的数量
select 库ID #切换库,默认库ID为 0~15
move 键 库ID #移动键到指定的库
flushdb #清空当前库(慎用)
flushall #清空当前库(慎用)
config set requirepass 密码 #设置/修改redis密码
config get requirepass #查询redis密码
auth 密码 #在redis中验证密码