黑马点评DAY1|Redis入门、Redis安装

什么是Redis?

redis是一种键值型数据库,内部所存的数据都是键值对的形式,例如,我们可以把一个用户数据存储为如下格式:

id $1600
name 张三
age 21

但是这样的存储方式,数据会显得非常松散,因为这本质上是一个用户的信息,所以我们一般使用JSON字符串去存储用户的各个字段:

1001 { "id" :1001 "name":"张三" "age":21 }

当然这里的值也可以是list、hash表等。

像这样没有表的数据库被称为Nosql数据库。

NoSQL数据库

SQL(关系型数据库)和NoSQL(非关系型数据库)的差异:

  • 结构化 :在sql中所有的数据格式都是严格按照表结构的限制条件的。并且表的结构一般不修改,因为当数据巨量的时候修改表会带来问题。

    相对地,NoSQL数据库的约束 较少,就比如JSON格式的数据库。

  • 关系型 :SQL中表和表之间通过外键建立关系。

    NoSQL中的关系通过JSON来维护,比如要表示一个用户下单的数据可以直接可以用一个JSON文档嵌套的形式来表示,在JSON中,{}表示一个对象,[]表示一个数组。:

  • SQL查询
    比如,SQL想要查询id为1的用户,可以这样写:
java 复制代码
select * from tb_user where id=1;

格式固定,语法固定,所以只要是关系型数据库,都可以用相同的语句去查询。

NoSQL的查询是非SQL,语法不固定,Redis中对应的语法是:

java 复制代码
get user:1
  • ACID : 关系型数据库支持事务的ACID (原子性、持久性、隔离性、一致性)的特性,NoSQL则无法满足。如果对于事务要求较高,建议使用NoSQL数据库开发。
  • SQL数据大都存储在磁盘上,NoSQL数据大都存储在内存中,所以查询性能较高

两种数据库分别适合的场景

SQL:

  • 业务结构相对固定
  • 业务对数据安全性、一致性要求较高

NoSQL:

  • 数据结构不固定
  • 对一致性安全性要求不高
  • 对性能要求较高

认识Redis

全程问Remote Dictionary Server(远程词典 服务器),因为该数据库是根据key去寻找value,类似于词典。

是一个基于内存的NoSQL数据库。

特征:

  • 键值型,支持不同数据结构
  • 单线程,每个命令具备原子性
  • 低延迟,速度快 (原因:基于内存、IO多路复用、良好的编码)
  • 支持数据持久化:定时保存数据到磁盘,确保断电的时候数据不丢失
  • 支持主从集群、分片集群
    主从集群 :多台服务器中有一个主节点只负责写数据,其余服务器读数据,这样读写分离可以提高性能。并且如果主节点损坏可以选出一个新的主节点,并且从节点也可以备份主节点数据,以防止数据丢失。
    分片集群:一份数据分段存储到多台服务器上,可以处理的数据的上限提高了,并且每一个节点的数据可以扩展,提高性能。
  • 支持多语言客户端

安装Redis

  • 打开虚拟机CentOS并用FinalShell链接虚拟机
  • 执行 yum install -y gcc tcl 命令安装依赖,该界面说明安装完毕
sh 复制代码
 yum install -y gcc tcl 
  • 执行cd /usr/local/src/进入到目录,并将资料中的redis-6.2.6拖拽到这个虚拟机该目录下。
sh 复制代码
cd /usr/local/src/
  • 执行tar -zxvf redis-6.2.6.tar.gz解压该文件
sh 复制代码
tar -zxvf redis-6.2.6.tar.gz
  • cd redis-6.2.6进入redis-6.2.6目录,执行make && make install安装redis,如果没有报错就说明安装成功了。
  • 我们可以执行cd /usr/local/bin/进入到redis的bin文件查看,发现一些重要的文件
sh 复制代码
cd /usr/local/bin/

- 我们可以在任何目录下运行redis,为了验证这个想法,先 cd - 后退到之前的redis安装目录,执行redis-server启动redis,出现以下redis的日志界面,redis启动了!

sh 复制代码
redis-server
  • 注意:这样的启动方式叫作前台启动,如果想建立连接必须重新打开一个窗口,重新连接。crtl+C就停止redis。所以这种启动方式不友好。
  • 想要后台启动redis就需要修改redis的配置文件并制定配置文件启动。在这之前我们先备份一份原始配置文件,以免修改错了,执行:
sh 复制代码
cp redis.conf redis.conf.bck
  • 展示配置文件内容
sh 复制代码
vi redis.config
  • 修改的时候有下面几点 需要注意
    注意在修改之前先按i进入到insert模式
    esc可以推出修改模式,/ + 需要查询的关键词可以查询文件内容,n可以寻找关键词下一个位置
    在非insert模式下输入":wq"就可以保存并退出
java 复制代码
# 默认的监听地址为:127.0.0.1,只能在本地访问,监听的地址在开发阶段改为0.0.0.0,这样就可以在任意IP访问redis
bind 0.0.0.0

# 守护线程改为yes,即可在后台运行
daemonize yes

# 设置密码,拒绝恶意访问!
requirepass 123321

其他可选配置

java 复制代码
# 监听的端口
port 6379

# 工作目录,默认是当前目录,也就是运行redis-server时的命令,日志、持久化等文件会保存在这个目录
dir .

# 数据库数量,设置为1,代表只使用1个库,默认有16个库,编号0~15
databases 1

# 设置redis能够使用的最大内存
maxmemory 512mb

# 日志文件,默认为空,不记录日志,可以指定日志文件名
logfile "redis.log"
  • 完成配置,启动redis,这次启动之后没有任何的日志输出,说明redis已经变成了后台运行
sh 复制代码
redis-server redis.conf
  • 验证redis是否在后台运行了
sh 复制代码
ps -ef | grep redis

这里发现 113989 进程在运行

当然也可以杀死进程

sh 复制代码
kill -9 113989

再执行ps -ef | grep redis发现进程消失了

  • 设置开机自启

    • 首先,新建一个系统服务文件:
    sh 复制代码
    vi /etc/systemd/system/redis.service
    • 内容如下(这里将如下内容粘贴之后需要esc再:wq保存一下):
    sh 复制代码
    [Unit]
    Description=redis-server
    After=network.target
    
    [Service]
    Type=forking
    ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    • 重新加载服务
    sh 复制代码
    systemctl daemon-reload
    • 现在,我们可以用下面这组命令来操作redis了:
    sh 复制代码
    # 启动
    systemctl start redis
    # 停止
    systemctl stop redis
    # 重启
    systemctl restart redis
    # 查看状态
    systemctl status redis
    • 执行下面的命令,可以让redis开机自启:
    sh 复制代码
    systemctl enable redis
相关推荐
BestandW1shEs2 小时前
谈谈Mysql的常见基础问题
数据库·mysql
重生之Java开发工程师2 小时前
MySQL中的CAST类型转换函数
数据库·sql·mysql
教练、我想打篮球2 小时前
66 mysql 的 表自增长锁
数据库·mysql
Ljw...2 小时前
表的操作(MySQL)
数据库·mysql·表的操作
哥谭居民00012 小时前
MySQL的权限管理机制--授权表
数据库
wqq_9922502772 小时前
ssm旅游推荐系统的设计与开发
数据库·旅游
难以触及的高度3 小时前
mysql中between and怎么用
数据库·mysql
Jacky(易小天)3 小时前
MongoDB比较查询操作符中英对照表及实例详解
数据库·mongodb·typescript·比较操作符
Karoku0663 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch