Redis基本原理和基础知识

目录

一、基本原理

(一)非关系型数据库

(二)关系型数据库与非关系型数据库的区别

(三)Redis简介

1.什么是Redis

2.数据存储结构

3.默认端口号

4.数据类型

(1)五大基础类型

(2)三种特殊类型

(四)Redis优点

1.极高的数据读写速度

2.支持丰富的数据类型

3.支持数据的持久化

4.原子性

5.支持数据备份

(五)redis快的原因

二、部署Redis

(一)环境准备

(二)修改内核参数

(三)安装Redis

(四)修改配置文件

(五)定义systemd服务管理脚本

(六)启动服务

三、实操

(一)Redis 命令工具

(二)redis-cli 命令行工具

(三)redis-benchmark 测试工具

(四)Redis数据库常用命令

1.String(字符串)

2.List(列表)

3.Hash(哈希/散列)

4.Set(无序集合)

5.Zset/Sorted Set(有序集合)

6.通用


一、基本原理

(一)非关系型数据库

       不需要预先建库建表定义数据存储表结构,每条记录可以有不同的数据类型和字段个数(比如微信群聊里的文字、图片、视频、音乐等)。

      主流的 NoSQL 数据库有 Redis、MongBD、Hbase、Memcached、ElasticSearch、TSDB 等。

(二)关系型数据库与非关系型数据库的区别

关系型数据库(SQL)非关系型数据库(NOSQL)
存储结构二维表格结构可以是文档、键值对、索引、时间序列等,不同类型数据库使用不同的存储结构
扩展方式纵向扩展(提升硬件性能)横向扩展(增加服务器节点数量)
事务支持基于ACID原则基于BASE原则
典型代表MySQL、Oracle、SQL-server等Redis、MongBD、Hbase、Memcached、ElasticSearch、TSDB等

(三)Redis简介

1.什么是Redis

Redis(远程字典服务器) 是一个开源的、使用 C 语言编写的、基于内存运行的 NoSQL 数据库

2.数据存储结构

 键值对(Key/Value  KV)

3.默认端口号

TCP的6379

4.数据类型

(1)五大基础类型
  • String(字符串)
  •  List(列表)
  •  Hash(哈希/散列)
  • Set(无序集合)
  • Zset/Sorted Set(有序集合)
(2)三种特殊类型
  • HyperLogLogs(基数统计)
  • Bitmaps (位图)
  • geospatial (地理位置)

(四)Redis优点

1.极高的数据读写速度

数据读取的速度最高可达到 110000 次/s,数据写入速度最高可达到 81000 次/s

2.支持丰富的数据类型

支持 key-value、Strings、Lists、Hashes、Sets 及 Sorted Sets 等数据类型操作。

3.支持数据的持久化

可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

4.原子性

Redis 所有操作都是原子性的。

5.支持数据备份

即 master-salve 模式的数据备份。

(五)redis快的原因

1.redis是基于内存运行的,数据读写都是在内存中完成的

2.数据读写采用单线程模式,避免了多线程切换带来的CPU性能消耗,同时也不要考虑各种锁的问题

3.采用IO多路复用模型,可以使线程处理更多的网络连接请求,提高并发能力

二、部署Redis

(一)环境准备

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config

(二)修改内核参数

vim /etc/sysctl.conf
vm.overcommit_memory = 1
##允许给到所有物理内存,无论当前的内存状态如何
net.core.somaxconn = 2048
##表示允许TCP连接等待长度
 
sysctl -p

(三)安装Redis

yum install -y gcc gcc-c++ make
tar -xf redis-7.0.13.tar.gz
cd redis-7.0.13
make
make PREFIX=/usr/local/redis install
#由于Redis源码包中直接提供了 Makefile 文件,所以在解压完软件包后,不用先执行 ./configure 进行配置,可直接执行 make 与 make install 命令进行安装。
 
#创建redis工作目录
mkdir /usr/local/redis/{conf,log,data}
cp /opt/redis-7.0.13/redis.conf /usr/local/redis/conf/
useradd -M -s /sbin/nologin redis
chown -R redis.redis /usr/local/redis/
 
#环境变量
vim /etc/profile 
PATH=$PATH:/usr/local/redis/bin		#增加一行
 
source /etc/profile

(四)修改配置文件

vim /usr/local/redis/conf/redis.conf
 
bind 127.0.0.1 192.168.88.40					#87行,添加 监听的主机地址
protected-mode no					            #111行,将本机访问保护模式设置no。
port 6379										#138行,Redis默认的监听6379端口
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 123								    #1037行,增加一行,设置redis密码

(五)定义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 start redis-server
systemctl enable redis-server
 
netstat -lntp | grep 6379

三、实操

(一)Redis 命令工具

redis-server:Redis 服务器启动命令
redis-benchmark:性能测试工具,用于检测 Redis 在本机的运行效率
redis-check-aof:修复有问题的 AOF 持久化文件
redis-check-rdb:修复有问题的 RDB 持久化文件
redis-cli:Redis 客户端命令行工具
redis-sentinel:Redis 哨兵集群使用

(二)redis-cli 命令行工具

语法:redis-cli -h host -p port [-a password]
-h :指定远程主机
-p :指定 Redis 服务的端口号
-a :指定密码,未设置数据库密码可以省略-a 选项
若不添加任何选项表示,则使用 127.0.0.1:6379 连接本机上的 Redis 数据库
 
redis-cli -h 指定远程主机 -p 端口 -a 指定密码

(三)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.88.40、端口为 6379 的 Redis 服务器发送100个并发连接与 100000 个请求测试性能
redis-benchmark -c 100 -n 100000 -h 192.168.20.12 -a 123 -p 6379 -t set,rpush -q

redis-benchmark -c 100 -n 100000 -h 192.168.20.12 -a 123 -p 6379 -d 100 -q

(四)Redis数据库常用命令

1.String(字符串)

set 键 值    #创建键值
get 键       #查看键值
del 键       #删除键

2.List(列表)

lpush|rpush 键 值1 值2 值3 ....     #创建yy键
lrange 键  起始下标    终止下标      #查看yy键
           0(第一个) -1(最后一个)
lrem 键  元素个数  元素值            
del 键                             #删除键

3.Hash(哈希/散列)

hset 键 字段1 值1 字段2 值2 ....         #创建键
hget 键 字段                            #查看单个字段值
hgetall 键                              #查看键的所有字段和字段值
hkeys 键                                #查看键的所有字段
hvals 键                                #查看键的所有值
hdel 键 字段                            #删除单个字段
del 键                                  #删除键

4.Set(无序集合)

sadd 键 值1 值2 值3 ....    #创建键
smembers 键                #查看键值
srem 键 值                 #删除单个键值
del 键                     #删除键

5.Zset/Sorted Set(有序集合)

zadd 键 序号1 值1  序号2 值2 ....           #创建zadd类型键
zrange 键 起始下标  终止下标 [withscores]   #查看键
          0         -1
zrangebyscore 键 起始序号 结束序号          #用序号查看键
zrem 键 值1 值2 ....                       #删除键值
zrembyscore 键  起始序号 结束序号           #用序号删除键值
del 键                                     #删除键

6.通用

type 键                             #查看键的数据类型
keys 键 * ?                         #查询键名,支持通配符 * ?
exists 键                           #判断键是否存在
expire 键 过期时间                   #为已存在的键设置过期时间
setex 键 过期时间 值                 #创建string类型的键并设置过期时间
ttl 键                              #查看键的生命周期时间,-1 永不过期,-2 已过期
rename 旧键 新键                     #重命名键名,会覆盖已存在的键
renamenx 旧键 新键                   #重命名键名,不会覆盖已存在的键
dbsize                              #统计当前库中键的总数
config set requirepass '密码'       #设置/修改redis密码
config get requirepass              #查看密码
auth '密码'                         #在redis里验证密码
select 库ID                         #切换库,默认库ID为 0~15
move 键 库ID                        #移动键到指定的库
flushdb                             #清空当前库(慎用)
flushall                            #清空所有库(慎用)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/304309.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux文件系统与日志服务管理

目录 一.Linux文件系统 1.inode表和block &#xff08;1&#xff09;inode &#xff08;2&#xff09;block 2.查看inode号命令 3.Linux系统文件三种主要时间属性 4.磁盘空间还剩余很多但无法继续创建文件 5.inode大小 二.日志 1.日志保存位置 2.日志文件的分类 &a…

Linux ls命令

目录 一. 配置项1.1 ls -l1.2 ls -a1.3 ls -lrt1.4 ls -ld .?* 二. 案例2.1 查看指定文件夹下文件的数量2.2 查看多个文件夹下文件信息 一. 配置项 1.1 ls -l ⏹ ls 列出当前文件夹下所有文件名称(不包含隐藏文件) jmw_num_00 jmw_num_02 jmw_num_04 jmw_num_06 jmw_n…

手机怎么把卷子的答案擦掉?4款神器帮你轻松搞定

手机怎么把卷子的答案擦掉&#xff1f;随着技术的不断进步&#xff0c;手机已经成为我们日常生活中不可或缺的一部分。除了通信和娱乐功能之外&#xff0c;手机还可以在学习和考试方面发挥重要作用。比如&#xff0c;手机可以帮助学生们进行考试前的复习和准备。学生们还可以将…

Qt 三维柱状图 Q3DBar 和 三维条形图中的数据序列 QBar3DSeries

(一) 使用 Q3DBars 图形类和 QBar3DSeries 序列类可以绘制三维柱状图 窗口右侧是用 Q3DBars 和 QBar3DSeries 绘制的三维柱状图&#xff0c;这个图只有一个QBar3DSeries序列&#xff0c;数据是按行存储的&#xff0c;可以有多行。水平方向是行坐标轴和列坐标轴&#xff0c;使用…

食品饮料加工厂需要哪些污水处理设备和工艺

食品饮料加工厂是一类特殊的工业领域&#xff0c;其生产过程中产生的污水具有较高的含有机物质浓度和COD&#xff08;化学需氧量&#xff09;指标&#xff0c;因此需要根据自身的实际情况选择合适的污水处理设备和工艺。以下是食品饮料加工厂常见的污水处理设备和工艺&#xff…

C#不会循环响应的Action设计与实现

目录 一、简述二、测试代码三、测试的输出四、核心代码五、其它 一、简述 特点&#xff1a; 不光是能防止直接的死循环调用&#xff1b;还能防止间接的死循环调用&#xff1b;还支持对不同参数判定&#xff0c;不同参数的调用可以不当循环调用&#xff1b; 消息事件系统中必…

element-ui确认框

代码示例&#xff1a; <template slot-scope"scope"><el-popconfirmtitle"确定删除吗&#xff1f;"confirm"doDelete"><el-button type"danger" slot"reference" click"del(scope.row.id)">删…

转速传感器信号正弦波方波锯齿波信号输入隔离转换器200mV~50V/5V/12V/24V转0-5V/0-12V/0-24V/集电极开路输出

特点 转速传感器信号直接输入&#xff0c;方波信号输出正弦波、锯齿波信号输入&#xff0c;方波信号输出200mV峰值微弱信号的放大与整形不改变原波形频率&#xff0c;响应速度快电源、信号&#xff1a;输入/输出 3000VDC三隔离辅助电源&#xff1a;5V、12V、15V或24V直流单电源…

自定义HBase负载均衡器MyCustomBalancer实现步骤与代码解析

目录 1.HBase默认负载均衡策略 1.1 负载均衡总体流程 1.2 不能触发负载均衡的情况 1.3 负载均衡算法 2.自定义的 HBase 负载均衡器的步骤 3.MyCustomBalancer的代码细节 3.1 balanceCluster 方法的作用 3.2balanceCluster 对数据的影响 3.3监控HBase的性能指标 3.3.…

Labelimg打标工具编译版使用介绍——免安装conda等python虚拟环境,简单易用上手快,不容易报错

首先直接给出免积分的下载地址&#xff0c;开源软件&#xff0c;直接共享给csdn的各位开发者&#xff0c;求个三连不过分吧。点赞关注收藏。谢谢各位支持 资源地址如下 1 打开D:\xxxxx\labelImg\data内的predefined_classes.txt文件&#xff0c; 修改其中的类别为自己需要的…

工程部设备巡检管理的必要性!使用智能化设备巡检系统有什么好处?

随着科技的发展&#xff0c;智能化管理已逐渐成为企业提升效率、确保设备运行安全的重要手段。工程部作为企业内维护设施运行的关键部门&#xff0c;其巡检工作的重要性不言而喻。本文将探讨如何利用智能化技术优化工程部的设备巡检工作&#xff0c;以确保设备的及时有效维护。…

西电期末考点总结

一.“打擂台” 介绍 打擂台用于找到一个数组中的最值问题&#xff0c;先设置一个虚拟擂主&#xff0c;并保证他是“最弱的”&#xff0c;然后遍历数组&#xff0c;找到“更强的”数据&#xff0c;就交换擂主&#xff0c;“打”到最后的“擂主”就是最值数据 相关题目 1004.…

【UML】第16篇 活动图

目录 一、什么是活动图 二、应用场景&#xff1a; 三、绘图符号的说明&#xff1a; 四、语法&#xff1a; 五、例图 六、建模的流程 6.1 对业务流程建模时 6.2 对用例进行活动图建模时 一、什么是活动图 活动图&#xff08;Activity Diagram&#xff09;是UML中用于描…

01-连接池项目背景:C++的数据库操作

从0开始学习C与数据库的联动 1.原始方式-使用MySQL Connector/C 提供的API查询 1.1 数据库预操作 我的本地电脑上有mysql数据库&#xff0c;里面预先创建了一个database名叫chat&#xff0c;用户名root&#xff0c;密码password。 1.2 Visual Studio预操作 在Windows上使用…

iOS 接入firebase消息推送

前言 APP推送消息和很正常&#xff0c;这就像你谈女朋友一样&#xff0c;如果你经常沉默等着她来找你&#xff0c;那肯定不行&#xff0c;你需要主动一下。APP也是一样&#xff0c;你下载了APP但是你不经常用它&#xff0c;那么他想要让你关注她&#xff0c;自然就要主动推送消…

1.4~1.5链表复习,代码操作(反转链表(用栈解决,双指针),删除链表指定元素),链表选择题,广义表

删除链表内指定范围的数 思路是双指针&#xff0c;定义两个指针&#xff0c;一个去找当前这个数满不满足要求&#xff0c;然后另一个定义为删除区间的起点 &#xff0c; 当不满足时&#xff0c;两个指针同时向后移动&#xff1b;当满足时&#xff0c;前驱指针就不动了&#xf…

强烈推荐!这8款在线画图工具好用极了

即时设计 即时设计作为一种简单的绘图工具&#xff0c;为创作者提供了一个方便而强大的创作平台&#xff0c;具有丰富的绘图工具、实时合作、矢量绘图和组件设计系统等功能。即时设计可以满足不同的创作需求&#xff0c;使创意自由流动。 强大的矢量编辑工具 即时设计提供了…

Windows 环境多个JDK安装与切换

一、下载jdk 去Oracle官网上下载想要安装的jdk版本&#xff0c;https://www.oracle.com/java/technologies/downloads/。 二、安装jdk 双击.exe文件&#xff0c;选择好安装目录进行安装。多个版本的jdk重复这两步操作就好。 三、多版本的jdk都下载安装完成之后&#xff0…

leetcode贪心(单调递增的数字、监控二叉树)

738.单调递增的数字 给定一个非负整数 N&#xff0c;找出小于或等于 N 的最大的整数&#xff0c;同时这个整数需要满足其各个位数上的数字是单调递增。 &#xff08;当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。&#xff…