Redis数据库入门

1. 简介

        简单来说:Redis是一种使用C语言编写的非关系型数据库(NOSQL)他的存储方式为键值对存储,提供了很多语言的API

        Redis也被称为单线程数据库,因为是单线程。

        官网解释: 

        The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker.

        开源的内存数据存储,被数百万开发人员用作数据库、缓存、流引擎和消息代理。

 1.1 软件下载

        如果不想去官网这里提供云盘下载Redis安装包与RedisPlus安装包

链接:https://pan.baidu.com/s/1rlyrgi5wQU9stC5UfN9ZXg
提取码:wmxb

2. 关系型数据库与非关系型数据库的区别

关系型数据库RDBMS

  • 高度组织化结构化数据:
  • 结构化查询语言(SQL) 支持sql语句 select * from t_user;
  • 数据和关系都存储在单独的表中。---记录和关系
  • 数据操纵语言DML [增删改],数据定义语言 DDL [表结构的修改]
  • 严格的一致性
  • 基础事务 【mysql支持事务--ACID】

非关系型数据库NoSQL

  • 代表着不仅仅是SQL
  • 没有声明性查询语言 [不支持select 语句]
  • 键 - 值对存储,【类似于map】
  • 不支持事务的一致性
  • 非结构化和不可预知的数据,可以是很多类型。

3. NOSQL的产品种类

        不是关系型数据库(RDBMS)就是非关系型数据库(NOSQL)有三个

Redis             一般Java开发使用  

Mongodb        一般前端开发使用

Hbase            一般大数据开发使用

4. 安装Redis

 4.1 C语言环境

        由于Redis是C语言编写需要配置C语言的环境

在Linux虚拟机输入: yum install gcc-c++

 4.2 下载Redis软件

官方网址:         Download | Redis

 4.3 Redis包解压

        博主使用的是FinalShell虚拟机可以把安装包拖进虚拟机里去,解压目录没有要求

在你安装包的目录下使用:tar -zxvf  安装包名.tar.gz        

即可解压到当前目录下

然后进入解压后的目录输入:make install       

即可编译与安装帮你配置环境变量

5. Redis使用

 5.1 Redis启动

        在解压的安装包下可以看到一个redis.conf是redis的配置文件也是启动文件

使用:redis-server  redis.conf 进行启动

启动的不是后台运行所以我们无法输入其他,如果嗯ctrl+c会直接关闭redis服务

我们可以开启第二个当前的虚拟机,先这样凑合后面讲Redis配置修改就不用这样了

        后台启用使用方法相同

使用:redis-server  redis.conf 进行启动

使用ps -ef | grep redis  查看进程(进程号root后面就是第一个数字)

关闭使用kill -9  进程号

 5.2 Redis连接

        连接格式:

redis-cli -h[连接redis服务的ip] -p[连接redis的端口号]

如果不输入 -h 与 -p 默认 使用的ip是虚拟机本机 , 端口号是6379

断开链接使用 ctrl+c

 5.3 Redis配置

        博主的版本为7.2   在解压的安装包下Redis,conf文件进行设置

在309行   daemonize                                      设置是否后台运行值:【yes | no】默认为no

在138行   port                                                  设置端口号默认为 6379

在87行     bind                                                  设置是否允许远程连接,默认只允许本机

在111行   protected-mode                              设置是否开启(密码)安全模式默认为no

在380行   databases                                        设置数据库的个数默认为16 Redis不能新建库

 5.4 Redis图形化软件

        安装完客户端后链接请看如下图:

6. Redis常用操作命令

 6.1 关于数据库命令

select  index              选择哪个数据库默认有16个 下标从0到15

flushdb                       清空当前数据库的内容

flushall                        清空所有数据库的内容

 6.2 关于键(key)的命令

keys    (key)名称                                                           查看当前库特定的键

keys   [可以选择以什么开头]*[以什么结尾或都带]        查看当前库所有的键

del       (key)名称                                                           删除当前库的指定键

del       (key)名称  (key)名称   (key)名称                       删除当前库的多个指定键以空格隔开

exists  (key)名称                                                           查看当前库是否有当前键

expire  (key)名称     时间                                              设置指定键的过期时间 单位秒

ttl         (key)名称                                                           查看当前的键过期时间-1为永不过期

 6.3 redis数据类型

常见的五种:

String(字符串),Hash(哈希),List(列表),Set(集合),Zset(有序集合)。

更新的四种:

BitMap                 (2.2 版新增:位图)  

HyperLogLog      (2.8 版新增:基数统计) 

GEO                     (3.2 版新增:地理位置)   

Stream                 (5.0 版新增:流)

命令手册地址:redis命令手册

本文只演示常见的数据类型部分常用命令。

 6.4 String操作命令

set      键名称(key)    值参数(value)               添加相应的键值对

get      键名称(key)                                         获取与键对应的值

mset   键名称   值参数   键名称   值参数        添加多个键值对 以空格隔开

mget   键名称   键名称   键名称                      用多个键获取各个对应值以空格隔开

setnx  键名称   值参数                                    添加相应的键值对如果有了则不添加

incr     键名称                                                  为指定的键值(参数必须为数字)递增1

decr    键名称                                                  为指定的键值(参数必须为数字)递减1

incrby   键名称       数值                                  为指定的键值增加你输入的数值

decrby  键名称       数值                                  为指定的键值减去你输入的数值

 6.5 hash操作命令

hset  键  值(field value ...)             设置多个键值对,hash的值也是相当于键值可以多个对

hget  键   值中的键(field)               使用键中的值里的field(键)获取对应的值

hmget  键 值中键   值中键              使用键值中的多个field(键)获取多个值

hgetall 键名                                    获取键中所有的内容

hkeys   键名                                   获取键中所有的field(键名)

hvals    键名                                   获取键中所有的value值

 6.6 List操作命令

lpush      键名  参数...               创键或插入从左边插入的队列,第一个插入参数会在最右边

rpush      键名  参数...               创建或插入从右边插入的队列,第一个插入参数会在最左边

lpop        键名        数值                         从左边取出参数,输入多少数值就取多少,并返回

rpop        键名        数值                         从右边取出参数,输入多少数值就取多少,并返回

lrange     键名   数值(从哪)  数值(到哪)  查看从哪到哪的值,如 0  到 -1  查看并返回

 6.7 Set操作命令

sadd   键名     值  值   值  ...                       创建或添加键与多个值 

smembers   键名                                       获取当前键的所有值

srandmember  键名  数值(可有可无)        随机获取键中一个或多(根据你的数值)个值

sinter 键名   键名    ...                                求多个集合的交集(俩集合都有的值)

spop  键名   数值(可有可无)                       随机移除一个或多(根据你的数值)个值

 6.8 SortedSet(ZSet)操作命令

zadd 键名  值  分数  值  分数  ...                 创建或添加键与多个值跟分数(用于排序)

zrem  键名   值                                            删除指定键中的值与分数

zrange 键名 从哪开始    在哪结束               从分数小到大的顺序返回集合中的数据

zrevrange 键名  从哪开始   在哪结束          从分数大到小的顺序返回集合中的数据

7. Redis的应用场景

热点数据的缓存:减少对数据库的访问频率,提高应用程序的效率。

限时业务的操作:比如短信验证码。

计时器相关的操作:比如点赞、收藏、购买量、阅读量等。

排行榜相关的操作:比如销售量、点赞量等等。

分布式锁:比如  synchronized自动锁与 lock 手动锁

8. Redis的持久化

        什么是持久化,就是把内存中的数据保存到磁盘里的过程就被称为“持久化”是为了防止数据的丢失。

        Redis有两种持久化方式:

RDB快照方式(默认):   

为何称为快照模式,他就像照片一样把redis的数据拍下来进行存储

又分手动与自动

优点:恢复速度较快

缺点:丢失数据较多

AOF日志方式:

把每个会牵扯数据的操作命令通过write函数写入日志文件中当redis启动时会读取日志文件中的命令,并把这些命令由上到下执行一遍。

优点:保存数据较为完整

缺点:恢复速度较慢

 8.1 RDB快照方式

        第一种方式手动:      俩命令选一种即可推荐使用bgsave

save     直接进行快照

bgsave 异步进行快照

两个都会在redis的包下生成dump.rdb文件

区别:

save    使用时不能进行其他操作,因为在占用着线程

bgsave使用时可以进行其他操作,因为使用异步进行的快照。

        第二种方式自动:    自动的底层也是bgsave

在redis的包下设置配置文件redis.conf

在439行 save 3600 1 300 100 60 10000    

含义是:3600秒有1条数据就进行保存  或  300秒有100条  或 60秒有10000条 

秒数必须执行完才会保存日志。

我们可以自己设置 多少秒内执行不小于多少条就保存日志。

save    秒    条

即可自动执行。

 8.2 AOF日志方式

        默认没有进行开启我们需要去Redis配置文件里开启

在1387行   appendonly no                                       修改为yes

在1414行   appendfilename "appendonly.aof"       可以设置日志文件名

在1420行   appenddirname "appendonlydir"         默认aof文件存放目录名

在1445行   appendfsync always                              意思日志一直触发执行一条就插入一条

在1446行   appendfsync everysec                           意思是每秒都会触发一次

在1447行   appendfsync no                                      意思不执行

注意:appendfsync 只能选择一个状态且如果开启了aof就不要选择no

        使用后会在appendonlydir目录下有一个appendonly.aof.1.incr.aof文件我们可以在里面看到执行过的命令。

$2相当于空格 $3相当于回车

9. Redis集群模式

        为什么要有Redis集群,单个Redis缓存压力过大要有多个Redis一起分担压力。

数据分配过后对于单个的压力就会骤减。

        集群模式有三个分别是主从模式、哨兵模式、分片集群模式。

最早出现的便是主从是1.0版本就出现的

哨兵模式可以说是主从模式的补充是在3.0版本出现的

分片集群模式为了补充哨兵的不足而出现。

 9.1 主从模式

        主从模式的原则是:配从不配主。

主节点进行增加修改等,辅节点是用于查询的用于给主节点分担查询压力。

        需求:准备一台主机器、至少一台辅机器。

启动完后即可使用:info replication 查看状态

使用: slaveof ip port  设置主仆

ip:主节点的ip

port: 主节点的port

注意:

设置完后主节点可以进行所有操作,辅节点只能进行查看(主节点写入的操作会自动同步)

        疑问:

(1) 从节点能否进行写操作? ----不能执行写操作

(2) 如果主节点宕机了从节点能否上位。---不能

(3) 如果新增一个从节点--那么该从节点是否可以把主节点之前的数据同步过来。--可以

主节点可以负责读写操作,但是从节点只负责读操作。

缺点:主节点挂了就缺少了写入的操作,只能让维修半夜起来赶修。

       

 9.2 哨兵模式

        哨兵模式作为主从的补充,从何而补主从的问题:

当主节点出现故障那整个集群便没有了写的操作,

哨兵用于监控如果主节点出故障就会把一个辅节点变为主节点。

        在Redis包下有sentinel.conf        设置哨兵配置

            配置哨兵     监控    集群名随便起    监控主节点ip  主节点port   获得哨兵的票数

在92行  sentinel    monitor   mymaster        127.0.0.1        6379              2

可以进行自定义配置

ip   换自己的       端口号也一样     票数是哪个辅节点得到设置的票数即可变成主节点

 配置完之后即可直接启动:redis-sentinel sentinel.conf

思考: 如果6380复活了,那么6381会不会让位?---不会。

如果你启动多台虚拟机---注意:关闭防火墙。

无需修改配置文件

缺点:单个的主节点写的频率多了还是会挂,虽然能被辅节点替换但也不是长久之计。

 9.3 分片集群模式

        分片集群为了弥补哨兵模式单个主节点的不足让多个主节点共同进行承担,分片模式里的主节点依旧是有哨兵的。

他们会有多个主节点了,但疑问来了:客户要存储到哪个主节点里?

解决办法: 使用了分槽技术。默认集群槽的数量为16384个。

而每个槽可以存放若干个数据,如果搭建redis集群模式的话,为主节点平均分片这些槽。


分槽原理:

        用户输入数值,根据数值进行 crc16 哈希算法得到一个值然后与总槽数取余剩下的这个值是小于我们总槽数的然后根据剩下的这个数选择对应的槽。

总槽假如为300

例子  输入 a —> crc16算成 —>  97 —>  97%300= 97

结果为97那就去范围是0到99的主机器1

( 0 ~ 99 )    主机器1     辅节点     辅节点

(100 ~ 199 )主机器2     辅节点     辅节点

(200 ~ 299 )主机器3     辅节点     辅节点


配置准备:

1. 必须开启aof模式

在1387行   appendonly no                                       修改为yes

2. 开启redis集群模式在Redis包下的配置文件中

在1584行        cluster-enabled yes       

3. 设置允许任意ip访问:  bind * -::*

在87行     bind                                                  设置是否允许远程连接,默认只允许本机


为Redis设置主从关系并分配槽

开始Redis集群模式  创建集群副本  每个主节点辅节点数

redis-cli --cluster create --cluster-replicas 1  所有的ip地址与端口号以空格分开

示例:        有六个虚拟机,设置每个主节点有一个辅节点

redis-cli --cluster create --cluster-replicas 1 192.168.223.158:7001 192.168.223.158:7002 192.168.223.158:7003  192.168.223.158:7004  192.168.223.158:7005  192.168.223.158:7006

设置输入后:

可以看到M就是主节点,S是辅节点
输入yes即可确定

启动的话启动六个随便一个即可

命令:redis-cli -c -h ip地址 -p 端口号

10. 与SpringBoot整合

 10.1 创建项目

如果是创建项目时

       

或依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

 10.2 修改配置文件

        单机连接

                application.properties

# 连接单机redis
spring.redis.host=ip地址
spring.redis.port=端口号

        集群连接

# 集群redis
spring.redis.cluster.nodes=地址ip:端口号,(多个以逗号隔开)

 10.3 使用

        springboot在整合redis时会自动封装了两个类:RedisTemplate和StringRedisTemplate. StringRedisTemplate它是RedisTemplate的子类,StringRedisTemplate它里面存储的key和value都是字符串类型。

        有两种使用方式    RedisTemplate类型  与  StringRedisTemplate类型

方法的名称基本都改变了。

类型有对应的类型

RedisTemplate类型

@Autowired
private RedisTemplate redisTemplate;

StringRedisTemplate类型

@Autowired
private StringRedisTemplate redisTemplate;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值