非关系型数据库---Redis安装与基本使用

news2024/11/28 4:29:08

一、数据库类型

  • 关系数据库管理系统(RDBMS)
  • 非关系数据库管理系统(NoSQL)

按照预先设置的组织机构,将数据存储在物理介质上(即:硬盘上)
数据之间可以做无关联操作 (例如: 多表查询,嵌套查询,外键等)

主流的RDBMS软件:MySQL、MariaDB、Oracle、DB2、SQL Server;要存储的数据是有固定格式的(例如:要向银行存现金,需要录入:姓名,年龄,金额,家庭住址等),并且是永久存储的,类似这种对于同一个业务,录入数据的方式一样的采用关系型数据库。

二、NoSQL(NoSQL = Not Only SQL)

意思是“不仅仅是SQL”
泛指非关系型数据库,不需要预先定义数据存储结构,每条记录可以有不同的 数据类型 和 字段个数

NoSQL主流软件:Memcached、Redis、MongoDB、Neo4j、FlockDB

三、Redis介绍

Remote Dictionary Server(远程字段服务器)是一款高性能的(Key/Values)分布式内存数据库
支持数据持久化(定期把内存里数据存储到硬盘)
支持多种数据类型 string、list、hash
支持 master-slave 模式数据备份

中文网站 www.redis.cn

四、部署Redis服务

环境准备,创建template主机,ip地址为192.168.11.10
PS:官网稳定版6的版本,编译的时候一直报错找不到src目录
换成4版本成功的截图:

步骤一:直接wget下载到/root目录下

[root@template ~]# wget -c http://download.redis.io/releases/redis-4.0.8.tar.gz

步骤二:源码编译安装

# 安装编译环境gcc gcc-c++
[root@template~]# yum -y install gcc

# 解压到指定目录,个人习惯
[root@template ~]# tar xf redis-4.0.8.tar.gz -C /usr/local/

# 进入目录
[root@template ~]# cd /usr/local/redis-4.0.8/
[root@template redis-4.0.8]# ls
00-RELEASENOTES  CONTRIBUTING  deps     Makefile   README.md   runtest          runtest-moduleapi  sentinel.conf  tests   utils
BUGS             COPYING       INSTALL  MANIFESTO  redis.conf  runtest-cluster  runtest-sentinel   src            TLS.md

# 编译安装
[root@template redis-4.0.8]# make && make install

# 测试
[root@template redis-4.0.8]# redis-
redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli        redis-sentinel   redis-server

步骤三:初始配置,配置服务运行参数

[root@template utils]# pwd
/usr/local/redis-4.0.8/utils
[root@template utils]# ./install_server.sh         执行源码目录下的初始化脚本
端口						6379
主配置文件					/etc/redis/6379.conf
日志文件					        /var/log/redis_6379.log
数据库目录					/var/lib/redis/6379
服务启动程序				        /usr/local/bin/redis-server
命令行连接命令				        /usr/local/bin/redis-cli

# 运行初始化脚本,一路回车即可
Welcome to the redis service installer
This script will help you easily set up a running redis server

选择redis端口号:【6379】 回车确认

Please select the redis port for this instance: [6379]
Selecting default: 6379

选择redis主配置文件:【/etc/redis/6379.conf】 回车确认

Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf

选择redis日志文件:【/var/log/redis_6379.log】 回车确认

Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log

选择redis数据库目录:【/var/lib/redis/6379】 回车确认

Please select the data directory for this instance [/var/lib/redis/6379]
Selected default - /var/lib/redis/6379

选择redis启动程序:【/usr/local/bin/redis-server】 回车确认

Please select the redis executable path [/usr/local/bin/redis-server]

以上选择的配置

Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli

确认,则选择回车即可;否则按 Ctrl + C 重新配置

Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!         #安装成功

步骤四:查看redis的启动端口号

[root@template utils]# ss  -lntup | grep redis
tcp    LISTEN     0      128    127.0.0.1:6379                  *:*                   users:(("redis-server",pid=9043,fd=6))

步骤五:管理redis服务,通过脚本的方式停止redis的服务

[root@template utils]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
[root@template utils]#
[root@template utils]#
[root@template utils]# ss  -lntup | grep redis

步骤六:重新开启redis服务

[root@template utils]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@template utils]# ss  -lntup | grep redis
tcp    LISTEN     0      128    127.0.0.1:6379                  *:*                   users:(("redis-server",pid=10977,fd=6))

步骤七:连接服务:redis-cli 默认连接本机的redis服务

[root@template utils]# redis-cli

# 使用ping命令,查看连接是否成功,结果是PONG,则代表redis正常连接
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>
127.0.0.1:6379> keys *				#使用keys命令,查看当前库下的所有数据
127.0.0.1:6379> set school tarena		#使用set命令,存入数据,school:tarena
127.0.0.1:6379> get school			#使用get命令,从内存中,取出变量"school"对应的值
127.0.0.1:6379> keys *				#使用keys命令,查看当前库下的所有数据
127.0.0.1:6379> exit				#断开redis连接

五、基本操作命令

PS:可以借助官方文档:https://docs.redis.com/

[root@template utils]# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>

# set命令,存数据,给变量赋值(x:99)【给单个变量赋值】
127.0.0.1:6379> set x 99

# mset命令,存数据,给变量赋值(i:77),(j:88),(k:99)【给多个变量同时赋值】
127.0.0.1:6379> mset i 77 j 88 k 99

# get命令,取数据,获取变量i的值【获取单个变量的值】
127.0.0.1:6379> get i

# mget命令,取数据,获取多个变量j,k,x的值【获取多个变量的值】
127.0.0.1:6379> mget i j k
1) "77"
2) "88"
3) "99"

# keys命令,显示所有的变量名【* 代表所有】
127.0.0.1:6379> keys *
1) "j"
2) "i"
3) "k"
4) "x"

# keys命令,显示变量名为一个字符的变量【? 代表单个字符】
127.0.0.1:6379> keys ?
1) "j"
2) "i"
3) "k"
4) "x"

# keys命令,显示变量名为六个字符的变量【? 代表单个字符】
127.0.0.1:6379> keys ??????

# keys命令,显示age的变量名,不存在,即为空
127.0.0.1:6379> keys age
(empty list or set)

# keys命令,显示school的变量名,存在
127.0.0.1:6379> keys school

# type命令,查看变量i的类型【string 为字符类型】
127.0.0.1:6379> type i
string

# set命令,存数据,给z赋值(z:10)【给单个变量赋值】
127.0.0.1:6379> set z 10

# type命令,查看变量z的类型【string 为字符类型】
127.0.0.1:6379> type z
string

# lpush命令,存数据,给变量赋值(hostname:pc99,pc88)【列表类型】
127.0.0.1:6379> lpush hostname pc99 pc88
(integer) 2

# type命令,查看变量hostname的类型【list 为列表类型】
127.0.0.1:6379> type hostname
list

# exists命令,检查变量是否存在,重复给一个变量赋值,会覆盖上一次变量的值
返回值为1,代表变量存在;返回值为0,则代表变量不存在
127.0.0.1:6379> exists hostname
(integer) 1

注意:在redis中,使用set和mset存入的数据,数据类型都是字符类型

# keys命令,查看redis中所有的变量
127.0.0.1:6379> keys *

# ttl命令,查看变量有效期,-1 为永不过期【不重启redis服务和清空内存的情况下】
127.0.0.1:6379> ttl j
(integer) -1

# expire命令,设置变量j的有效期为20秒
127.0.0.1:6379> expire j 20
(integer) 1

# ttl命令,查看变量有效期,16秒
127.0.0.1:6379> ttl j
(integer) 16

# ttl命令,查看变量有效期,当变量的有效期为-2时,到期,该变量会被删除
127.0.0.1:6379> ttl j
(integer) -2

# exists命令,检查变量是否存在,变量被删除,返回值为1,代表变量存在;返回值为0,则代表变量不存在
127.0.0.1:6379> exists j
(integer) 0

# select命令,切换库,切换到编号3的库下
127.0.0.1:6379> select 3

# 当前处于编号3库下, select命令,切换到编号1的库下
127.0.0.1:6379[3]> select 1
OK

# 当前处于编号1库下, select命令,切换到编号0的库下
127.0.0.1:6379[1]> select 0
OK

# 当前处于编号0库下,查看0库下所有的变量
127.0.0.1:6379> keys *

# 将编号0库下的变量school,移动到编号1的库下
127.0.0.1:6379> move school 1
(integer) 1

# 将编号0库下的变量x,移动到编号2的库下
127.0.0.1:6379> move x 2
(integer) 1

# 编号0库下,变量school和变量x消失
127.0.0.1:6379> keys *

# 查看编号1库下的所有变量,变量"school"移动过来了
127.0.0.1:6379> select 1
127.0.0.1:6379[1]> keys *

# 查看编号2库下的所有变量,变量"x"移动过来了
127.0.0.1:6379[1]> select 2
127.0.0.1:6379[2]> keys *

# save命令,把内存中的数据保存到硬盘中
127.0.0.1:6379[2]> save
127.0.0.1:6379[2]> exit

# 执行save命令后,内存中的数据被保存到下面文件中
[root@template utils]# ls /var/lib/redis/6379/
dump.rdb

# 连接数据库 redis-cli 
# del命令,删除变量i
127.0.0.1:6379> del i
(integer) 1

# flushdb命令,删除当前所在库下的所有数据
127.0.0.1:6379> flushdb

# 查看编号0库下的所有变量,为空
127.0.0.1:6379> keys *

127.0.0.1:6379> select 1		#切换到其他库下,还有数据
127.0.0.1:6379[1]> keys *

# flushall命令,删除redis所有库下的数据
127.0.0.1:6379[0]> flushall
127.0.0.1:6379[1]> keys *
127.0.0.1:6379[1]> select 2
127.0.0.1:6379[2]> keys *
# shutdown停止服务
127.0.0.1:6379[2]> shutdown
not connected> exit
[root@template utils]]# ss -antlp | gre p6379

六、配置文件解析

1、查看redis配置文件信息,修改配置时,在对应的模块下写即可

[root@template ~]# vim /etc/redis/6379.conf

                             .........
############################# INCLUDES ##############################
                             .........
############################# MODULES ##############################
                             .........
############################# NETWORK ##############################
                             .........
############################# GENERAL ##############################

2、数据单位,不区分字母大小写

[root@template ~]# vim /etc/redis/6379.conf
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes

3、查看redis常用配置信息

守护进程:指进程会一直存在,等待用户访问(耗资源,客户端访问速度快)
非守护进程:当服务运行后,如果一段时间内没有用户访问,服务会进入到休眠状态;当有用户访问时,服务会被唤醒,供用户去访问(节省资源,客户端访问速度慢一些)

70 bind 127.0.0.1				#指定客户访问的IP地址,这里只允许本机访问
  93 port 6379					#指定redis的访问端口
 137 daemonize yes				#以守护进程方式运行(进程一直存在,等待用户访问)
 172 logfile /var/log/redis_6379.log	#记录redis运行的启动和运行过程中的信息
 187 databases 16					#数据库个数,默认16个,可以修改
 264 dir /var/lib/redis/6379			#定义数据库目录
 533 # maxclients 10000			#客户端同时访问redis的并发数量,默认10000

4、内存管理,查看内存清除策略

.........
 562 # MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
 563 # is reached. You can select among five behaviors:
 564 #
 565 # volatile-lru ->  向redis中存入数据时,数据已满,则会在设置了TTL过期时间的变量中选择,删除最近最少使用的key,用于存放新的key;
 
 566 # allkeys-lru ->   向redis中存入数据时,数据已满,则会在所有的变量中选择,删除最近最少使用的key,用于存放新的key;

 567 # volatile-lfu ->  向redis中存入数据时,数据已满,则会在设置了TTL过期时间的变量中选择,删除使用频率最少的key,用于存放新的key;

 568 # allkeys-lfu ->   向redis中存入数据时,数据已满,则会在所有的变量中选择,删除使用频率最少的key,用于存放新的key;

 569 # volatile-random ->  向redis中存入数据时,数据已满,则会在设置了TTL过期时间的变量中选择,随机删除key,用于存放新的key;
 
 570 # allkeys-random ->   向redis中存入数据时,数据已满,则会在所有的变量中选择,随机删除key,用于存放新的key;
 
 571 # volatile-ttl ->  向redis中存入数据时,数据已满,删除最近过期的key;
 572 # noeviction ->    向redis中存入数据时,数据已满,显示报错提示;

5、内存优化设置,

从物理内存中划分多少内存给redis使用,这里没有指定,则代表将本机的所有物理内存交给redis去使用

560 # maxmemory <bytes> 
 
#maxmemory-policy 定义当内存空间不足时,删除已存储数据的方式,策略为 noeviction,即,即使内存使用完了,也不删除已存储的数据 
591 # maxmemory-policy noeviction   
 
#当使用lru,lfu,ttl 策略时,需要指定key模板的个数
602 # maxmemory-samples 5

6、修改redis运行参数,修改密码,IP地址和端口号

[root@template ~]# /etc/init.d/redis_6379 stop		#停掉redis的服务
[root@template ~]# vim /etc/redis/6379.conf
70 bind 192.168.4.50		#如果想让其他主机访问本机,修改监听地址为本机网卡地址
93 port 6350   			#修改端口号为6350
501 requirepass 123456		#取消注释,修改用户连接redis的密码为123456

启动redis的服务
[root@template ~]# /etc/init.d/redis_6379 start
查看redis服务的端口号
[root@template ~]# ss -ntulp | grep redis

七、连接redis服务

方法一:登录redis以后,输入连接密码

-h 指定要连接的主机,-p(小写) 指定连接端口号

[root@template ~]# redis-cli -h 192.168.4.50 -p 6350 
192.168.4.50:6350> auth 123456		#auth 后跟上连接密码,否则无法正常使用
192.168.4.50:6350> ping
192.168.4.50:6350> exit

方法二:连接redis时,输入连接密码
-a 指定连接密码

[root@template ~]# redis-cli -h 192.168.4.50  -p 6350 -a 123456
192.168.4.50:6350> ping
192.168.4.50:6350> exit

八、停止redis服务

当修改了redis服务的IP地址,密码和端口号以后,则无法通过脚本来停止redis服务
脚本停止服务针对的是redis服务默认的IP地址,密码和端口号

连接上redis, 使用shutdown来停止服务

[root@template ~]# redis-cli -h 192.168.4.50  -p 6350 -a 123456 shutdown
[root@template ~]# ss -ntulp | grep redis
[root@template ~]# /etc/init.d/redis_6379 start		#启动服务

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java io流 概念 详解

IO流 当需要把内存中的数据存储到持久化设备上这个动作称为输出&#xff08;写&#xff09;Output操作。 当把持久设备上的数据读取到内存中的这个动作称为输入&#xff08;读&#xff09;Input操作。 因此我们把这种输入和输出动作称为IO操作。 学习目标: 一、文件类&#x…

张程伟:从开源项目到企业级数据库,云和恩墨 MogDB Uqbar 的技术探索与实践...

导语4月8日下午&#xff0c;为期两天的第十二届数据技术嘉年华&#xff08;DTC 2023&#xff09;在北京新云南皇冠假日酒店圆满落下帷幕。大会以“开源融合数字化——引领数据技术发展&#xff0c;释放数据要素价值”为主题&#xff0c;汇聚产学研各界精英到场交流。作为大会的…

电蚊拍欧盟CE认证EMC+LVD测试

电蚊拍&#xff08;Mosquito&#xff09;&#xff0c;主要由高频振荡电路、三倍压整流电路和高压电击网DW三部分组成。工作中&#xff0c;经升压电路在双层电网间产生1850V直流左右的高压电&#xff0c;两电网间的静电场有较强的吸附力&#xff0c;当蚊蝇等害虫接近电网时&…

系统集成路由器OSPF动态、综合路由配置

实验任务&#xff1a;动态路由协议RIP、OSPF协议的内容和特点动态路由RIP、OSPF实验&#xff0c;建立拓扑pc1>>R1>>R2>>R3>>pc2&#xff0c;使pc1与pc2能相互通信&#xff0c;并配置PC端静默接口。熟悉配置vlan间路由技术&#xff1a;多层交换机虚拟接…

落地“旅游+”数字赋能:实现智慧旅游协同创新发展

经济的蓬勃发展&#xff0c;与之带来的是消费水平的不断提升&#xff0c;旅行已经成为我们日常生活中不可缺少的一项。在过去三年间&#xff0c;我们由于或这或那的原因&#xff0c;并无法真正实现一场说走就走的旅程。大家在过去的三年算是憋狠了&#xff0c;所以在今年&#…

计算专题(小计算题)

考点&#xff1a; 1.沟通渠道的总量为 n*(n-1)/2&#xff0c;其中 n 代表干系人的数量。 2.决策树计算/自制和外购决策-----EMV。 3.盈亏平衡计算。&#xff08;刚好不亏也不赚&#xff09; 【案例】假设某IT服务企业&#xff0c;其固定成本为30万元&#xff0c;每项服务的变…

用于测试FDIA在现实约束下可行性的FDIA建模框架(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 信息通信技术的发展和智能设备的引入使电力系统逐渐演变为电力信息物理系统&#xff0c;而信息层与物理层之间的深度耦合也加剧…

HashMap死循环详解

目录 一、数据插入原理 二、导致死循环的原因 三、解决方案 一、数据插入原理 由于JDK1.7中&#xff0c;HashMap的底层存储结构采用的是数组链表的方法 插入数据时候采用的是头插法 二、导致死循环的原因 此时线程T1&#xff0c;T2节点同时指向A节点&#xff0c;同时线程T1…

Spring Boot 整合 Swagger 教程详解

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

小白必看,吐血整理Facebook新手指南(二)

上篇文章咱们讲了关于FB广告的类型&#xff0c;今天咱们再来详细讲下如何设置FB广告、注意事项以及如何借助强大的工具&#xff08;SaleSmartly、ss客服&#xff09;监控广告效果、承接广告流量。话不多说&#xff0c;直接上干货选择你的目标 首先&#xff0c;前往您的广告管理…

虚拟化服务器和普通服务器的区别

随着云计算技术的快速普及&#xff0c;虚拟化技术作为其中的一项核心技术&#xff0c;也越来越受到了企业和个人用户的关注。虚拟化服务器相较于传统的物理服务器&#xff0c;具备更高的灵活性和可扩展性&#xff0c;但同时也存在一些不足之处。那么虚拟化服务器的优缺点有哪些…

[STM32F103C8T6]基于stm32的循迹,跟随,避障智能小车

目录 1.小车驱动主要是通过L9110S模块来驱动电机 motor.c 2.我们可以加入串口控制电机驱动(重写串口接收回调函数&#xff0c;和重定向printf) Uart.c main.c 3.点动功能 uart.c main.c 为什么使用的是HAL_Delay()要设置滴答定时器的中断优先级呢&#xff1f; 4.小车…

如何在 Mac上运行 Windows程序?

在Mac 上运行 Windows的工具 在 Mac 上运行 Windows-无需重启即可在您的 Intel 或 Apple M 系列 Mac 上运行 Windows的工具来了,非常强悍和使用,有需要的朋友可以参考一下。 主要功能 运行快速、操作简单、功能强大的应用程序,无需重启即可在您的 Intel 或 Apple M 系列 M…

基于 VITA57.1 的 2 路 125MSPS AD 采集、2 路 250MSPS DA 回放 FMC 子卡模块

板卡概述 FMC150_V30 是一款基于 VITA57.1 规范的 2 路 125MSPS 采样率 16 位分辨率 AD 采集、2 路 250MSPS 采样率 16 位分辨率 DA 回放 FMC 子卡模块。该模块遵循 VITA57.1 规范&#xff0c;可直接与符合 VITA57.1 规范的 FPGA 载卡配合使用&#xff0c;板卡 ADC 器件采用 AD…

接口自动化两大神器:正则提取器和jsonpath提取器

一、前言 在开展接口测试的过程中&#xff0c;我们会发现很多接口需要依赖前面的接口&#xff0c;需要我们动态从前面的接口返回中提取数据&#xff0c;也就是我们通常说的关联。 关联通俗来讲就是把上一次请求的返回内容中的部分截取出来保存为参数&#xff0c;用来传递给下…

迅为龙芯2K0500全国产开发板

目录 龙芯2K0500处理器 动态电源管理 低功耗技术 产品开发更快捷 全国产设计方案 2K0500核心板 邮票孔连接 丰富接口 高扩展性 系统全开源 品质保障 行业应用 龙芯2K0500处理器 迅为iTOP-LS2K0500开发采用龙芯LS2K0500处理器&#xff0c;基于龙芯自主指令系统&#x…

托福听力专项 // Unit1 Listening for Main Ideas //共5篇conversations

目录 I a history class II a student & a librarian III a student & a professor IV a student & a bookstore clerk I a history class its definition II a student & a librarian (1) The librarian was happy to help and explained to the studen…

软件工程part02-软件需求与需求规约

文章目录课程简介考试大纲软件需求与需求规约2.0 可行性分析2.1 需求概述需求分类2.2 需求工程步骤2.3 需求获取2.4 需求规约2.4.1 逻辑模型和物理模型2.4.2 需求分析过程示意2.4.3 结构化分析模型2.4.4 E-R图是数据建模的基础2.4.5 数据流图2.4.5.3 数据流命名规则2.4.5.6 DFD…

【学习cmake-cookbook/chapter-03/recipe-09/c-example-3.5】

代码&#xff1a;cmake-cookbook/chapter-03/recipe-09/c-example-3.5 at master qijitao/cmake-cookbook GitHub 一、 找不到libzmq。 解决办法&#xff1a; 1、首先尝试安装libzmq-dev&#xff0c;但是安装失败&#xff1a; 2、网上查了一下&#xff0c;Ubuntu 17及更高版本…

《Unity Shader 入门精要》第9章 更复杂的光照

第9章 更复杂的光照 9.1 Unity 的渲染路径 在 Unity 中&#xff0c;渲染路径&#xff08;Rendering Path&#xff09;决定了光照是如何应用到 Unity Shader 中的。 Unity 支持以下几种渲染路径&#xff1a; 前向渲染路径&#xff08;Forward Rendering Path&#xff09;延迟…