redis基础知识——菜鸟教程
第一章——redis教程
Redis作为由xxx开发的关键值存储架构;该方案广泛应用于各种操作系统环境,并且是非关系型数据存储解决方案。
Redis 是开源的,键值对(Key-Value)存储数据库,提供多种语言的 API;
Redis 常见称为 数据结构服务器, 其中键值对(key-value)是其核心特征. 具体而言, 键值对可以是字符串类型的键值对, 哈希表类型的键值对, 列表类型的键值对, 集合类型的键值对以及有序集合类型的键值对.
Redis基本的五种数据类型:
String: 字符串
Hash: 散列
List: 列表
Set: 无序集合
Sorted Set: 有序集合
1.1——Redis简介
Redis 是完全开源的,高性能的 key-value 数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis具备对数据进行持久化的功能,在线存储的数据会以文件形式保存于磁盘中,在系统重启时能够重新加载存储的数据供后续操作使用
第二:Redis除了支持基本的key-value数据类型外,并且还包含列表、集合、有序集合以及哈希表等多种数据结构的存储功能。
第三:Redis支持数据的备份,即master-slave模式的数据备份。
Redis的优势:
1.性能极高
2.丰富的数据类型
3.原子 – Redis的所有操作都是原子性的,
意思是说要么成功完成任务,要么在失败时完全不进行任何操作。每个单独的操作都是一个完整的单位,在这种情况下不会被部分执行或中断。对于多个操作而言,则遵循事务机制以保持一致性——即基于原子性原则通过mutil和exec两个指令集来实现。
意思是说要么成功完成任务, 要么在失败时完全不进行任何操作. 每个单独的操作都是一个完整的单位, 在这种情况下不会被部分执行或中断. 对于多个操作而言, 则遵循事务机制以保持一致性—即基于原子性原则通过mutil和exec两个指令集来实现.
4.丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis与其他key-value存储有什么不同?
Redis的数据结构更加复杂,并且支持对它们的原子性操作。这一特点使得Redis采用了一种独特的方向发展路径。Redis的数据类型建立在基本数据结构之上,并且无需程序员进行额外的抽象处理。
Redis基于内存运行但可通过外部存储扩展至硬盘存储。当处理不同规模的数据集并实现快速读写时需平衡内存使用限制(即数据容量不得超过硬件内存容量)。相对于在外存上的相同复杂度的数据结构,在内存量足够的情况下Redis的操作更加简便(因此它可以执行一些内部复杂的运算)。此外,在外存存储格式方面它们作为紧凑型的追加式生成的格式(无需支持随机访问),这种设计使得其存储效率更高。
笔记:
1.什么是 BSD 协议?
BSD开源协议是一个给于使用者很大自由的协议。
2.什么是原子性,什么是原子性操作?
举个例子:
A打算将1000元从自己的账户转账至B的账户中。这一项由A发起转账操作并完成至B账户的资金转移流程,在整个流程结束后可视为完成了事务处理。
- 1. 扣除A账户中的金额一千块后, 若账户原本持有三千元资金, 则现余额降至两千元。
- 2. 若将B账户里的金额增加到一千块, 则现时总金额升至三千元。
如果当A账户已扣除1000元时突然发生了一次意外事件(如停电等),导致转账操作被迫终止;而与此同时B账户中尚未追加这1000元。那么我们就称这次操作未能完成;为此需进行事务重放操作即恢复到事务开始前的状态;也就是恢复至A账户未扣除这1000元的状态以及B账户原有的状态。此时A账户仍保有3 5 块人民币而B账户则仍有2 5 块人民币。
此类型同步操作分为两种情况:一种是同步成功(A账户减少100单位值而B账户增加1单位值),另一种是同步失败(A账户及B账户均恢复到初始状态)。我们将其命名为原子性操作。
如果将任何一个事务视为一个程序,在其运行过程中它必须是完整的或者完全没有执行,则该程序具备不可分割的特性。这种不可分割的特性被称为原子性。
3.什么是 key value 存储?
JAVA 中的 map 就是 key=>value 存储的。
**键 = > 值(key=>value)**对,键唯一,对应一个值,值的形式多样。
比如:
这里定义了一个 Map 对象,并放置了两组数据键 ming ,对应值 1 ,键 zi ,对应值2 。
这样会得到 1 这个值。
在继续执行代码时,在调用 map.put("ming",3); 这一操作后会发现由于键 ming 已经被定义,并遵循键值唯一性原则导致原有数值 1 被覆盖。
1.2——Redis安装
Mac 下安装
1. 官网Redis 下载最新的稳定版本redis-6.2.6
解压拖动到桌面
打开终端
make test 测试编译
make install
启动 redis,可以使用后台服务启动 src/redis-server
启动redis客户端——redis-cli



1.3——Redis配置
Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf
你可以通过 config 命令查看或设置配置项。
语法
redis config命令格式如下:
实例:
使用 ***** 号获取所有配置项:
编辑配置
你可以通过修改 redis.conf 文件或使用 config set 命令来修改配置。
语法
config set 命令基本语法:
实例
1.4——Redis数据类型
Redis提供五种数据类型:包括string数据类型、哈希表、列表、集合以及有序集合
String(字符串)
string 是 redis 最基本的类型,一个 key 对应一个 value。
实例
在上述案例中我们采用了 Redis 的 set 和 get 命令 其中键是 runoob 对应的值为 菜鸟教程
Hash(哈希)
Redis hash 是一个键值(key=>value)对集合。
Redis hash 由 string 类型字段和值构成的映射表组成,并且特别适用于存储对象。
实例
del runoob 用于删除之前已测试过的键;如果不这样做,则会报错:(error) WRONGTYPE Operation against a key holding the wrong kind of value

在实例中,我们采用了Redis这一工具,并通过其核心命令hmset, hget完成了数据操作。具体而言,在调用Redis的hmset命令时,在内存哈希表中创建并设置了两对键值对(field, value)。随后通过调用Redis的hget命令,在内存哈希表中获取指定键(field)所对应的值(value)。
List(列表)
Redis 的列表由简单的字符串构成并按顺序排列。你可以将一个元素添加至列表顶端(左侧)或末尾(右侧)。
实例
Set(集合)
Redis 的 Set 是 string 类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 0(1)。
sadd 命令
向 key 关联的 set 集合中添加一个 string 类型的成员,并返回值为 1。如果该元素已经存在于该 set 集合中,则返回值为 0。
实例
请注意: 例如,在 rabbitmq 示例中存在两次插入操作,但根据集合内元素的唯一性原则,后续的重复项会被集合自动排除。
zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会被赋予一个浮点型的分数值。正是基于这些分数值的大小关系Redis能够对集合中的成员按照从小到大的顺序进行排序
zset的成员是唯一的,但分数(score)却可以重复。
zadd 命令
添加元素到集合,元素在集合中存在则更新对应score
实例
redis遇到的问题总结:


