【学习记录】macOS的Redis安装及基本使用
- 一. Redis的安装与启动
- 二. 简单使用
- ① 尝试插入第一个key-value
- ② Redis的数据类型与基本使用
- 字符串
- 列表
- 字典(哈希表)
- 集合
- 有序集合
- 三. 杂乱无章的笔记
一. Redis的安装与启动
打开终端,输入以下命令即可安装
brew install redis
安装成功后, 输入以下命令通过brew来启动Redis
brew services start redis
接下来启动服务端
redis-cli
二. 简单使用
更多命令可到菜鸟教程里查询。这个模块只是对这些结构的简单描述。
① 尝试插入第一个key-value
插入键值对 114514 - tiansuo
set 114514 tiansuo
而后通过键值114514即可获得对应值tiansuo
get 114514
② Redis的数据类型与基本使用
Redis中有五种数据类型:
- 字符串 String
- 列表 List
- 字典 Hash
- 集合 Set
- 有序集合 Sorted Set
字符串
感觉和C++,JAVA等语言里的String大同小异。
下列举两个命令例子
- append 命令:拓展字符串 (append key value)
append 114514 haoer
输入这行命令后,键值对更新成 114514 - tiansuohaoer
- type命令:获取键的数据类型的值
type 114514 // 返回 String
列表
感觉像是数组和栈、队列的缝合怪。
下标从0开始,有如下功能:
- 添加列表:lpush / rpush listName value, l / r分别代表从左/右开始添加元素
- 弹出元素:lpop / rpop
- 由下标获取值:lindex key index
- 获取范围下标内的所有值:lrange key start stop 如 lrange listOne 0 3
字典(哈希表)
可以由以下这个初始化流程来了解字典的结构
hset person name jack // 新建一个名为person的字典,其中一个键值name对应值jack
hset person age 20 // 在字典person中,新增一个键值age对应值20
hgetall person // 获取当前字典person的所有键值与值
hkeys person // 获取当前字典person的所有键值
hvals person // 获取当前字典person的所有值
集合
很熟悉的一个结构了, 无非就是集合的交并差。
有序集合
增加一个Score属性,用来对集合成员进行一个排序。
集合成员唯一,但是分数不唯一,即不同成员可以分数相同。
三. 杂乱无章的笔记
笔记
- Redis有着更为复杂的数据结构并且提供对他们的原子性操作,数据结构对程序员透明,无需进行额外的抽象
- Redis运行在内存中但是可以持久化到磁盘,进行高速读写时需要权衡内存
- string 是 redis 最基本的类型,是二进制安全的,可以包含任何数据。比如jpg图片或者序列化的对象。
- DEL keyname 用于删除
-
客户端启动:本地:redis-cil 远程:redis-cli -h host -p port -a password
eg: redis-cli -h 127.0.0.1 -p 6379 -a “mypass”
订阅:SUBSCRIBE name
发送:PUBLISH name “message”
事务:
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
- 批量操作在发送 EXEC 命令前被放入队列缓存。
- 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
- 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
- 开始事务。
- 命令入队。
- 执行事务。
redis 127.0.0.1:6379> MULTI // 以 MULTI 开启一个事务 OKredis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days" QUEUEDredis 127.0.0.1:6379> GET book-name QUEUEDredis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series" QUEUEDredis 127.0.0.1:6379> SMEMBERS tag QUEUEDredis 127.0.0.1:6379> EXEC // 一并执行事务中的所有命令,此处事务不具有原子性,命令有 1) OK 2) "Mastering C++ in 21 days" 3) (integer) 3 4) 1) "Mastering Series"2) "C++"3) "Programming"
-
Redis 发布订阅:消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。
而 Redis Stream 提供了消息的持久化和主备复制功能
-
NoSql:解决高并发、高可用、高可扩展,大数据存储等一系列问题而产生的数据库解决方案.
叫非关系型数据库,它的全名Not only sql。它不能替代关系型数据库,只能作为关系型数据库的一个良好补充。
分类:
-
键值(Key-Value)存储数据库 :典型应用: 内容缓存,主要用于处理大量数据的高访问负载。 数据模型: 一系列键值对
优势: 快速查询 劣势: 存储的数据缺少结构化
-
列存储数据库 典型应用:分布式的文件系统
-
文档型数据库,比如 MongoDB ,典型应用:Web应用(与Key-Value类似,Value是结构化的)
-
图形(Graph)数据库 ,图结构
-
-
Redis 应用场景:缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用) 分布式集群架构中的session分离。 聊天室的在线好友列表。 任务队列。(秒杀、抢购、12306等等) 应用排行榜。 网站访问统计。 数据过期处理(可以精确到毫秒)
-
Redis 持久化方案:
-
Rdb 方式: Redis 默认的方式,redis 通过快照方式将数据持久化到磁盘中。
一旦redis非法关闭,那么会丢失最后一次持久化之后的数据。
-
Aof 方式:操作一次 redis 数据库,则将操作的记录存储到 aof 持久化文件中。
-
-
Redis 主从复制:持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中。
但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障,如下图:
主redis中的数据有两个副本(replication)即从redis1和从redis2,即使一台redis服务器宕机其它两台redis服务也可以继续提供服务。
主redis中的数据和从redis上的数据保持实时同步,当主redis写入数据时通过主从复制机制会复制到两个从redis服务上。
只有一个主redis,可以有多个从redis。
主从复制不会阻塞master,在同步数据时,master 可以继续处理client 请求
主机一旦发生增删改操作,那么从机会将数据同步到从机中. 从机不能执行写操作
一个redis可以即是主又是从,如下图: