第一章——redis教程
简介:Redis是一个由xxx写的 key-value 存储系统,是跨平台的非关系型数据库;
Redis 是开源的,键值对(Key-Value)存储数据库,提供多种语言的 API;
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
Redis基本的五种数据类型:
String: 字符串
Hash: 散列
List: 列表
Set: 无序集合
Sorted Set: 有序集合
1.1——Redis简介
Redis 是完全开源的,高性能的 key-value 数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
第一:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
第二:Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
第三:Redis支持数据的备份,即master-slave模式的数据备份。
Redis的优势:
1.性能极高
2.丰富的数据类型
3.原子 – Redis的所有操作都是原子性的,
意思就是要么成功执行,要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过mutil和exec指令包起来。
4.丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis与其他key-value存储有什么不同?
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
笔记:
1.什么是 BSD 协议?
BSD开源协议是一个给于使用者很大自由的协议。
2.什么是原子性,什么是原子性操作?
举个例子:
A想要从自己的帐户中转1000块钱到B的帐户里。那个从A开始转帐,到转帐结束的这一个过程,称之为一个事务。在这个事务里,要做如下操作:
- 1. 从A的帐户中减去1000块钱。如果A的帐户原来有3000块钱,现在就变成2000块钱了。
- 2. 在B的帐户里加1000块钱。如果B的帐户如果原来有2000块钱,现在则变成3000块钱了。
如果在A的帐户已经减去了1000块钱的时候,忽然发生了意外,比如停电什么的,导致转帐事务意外终止了,而此时B的帐户里还没有增加1000块钱。那么,我们称这个操作失败了,要进行回滚。回滚就是回到事务开始之前的状态,也就是回到A的帐户还没减1000块的状态,B的帐户的原来的状态。此时A的帐户仍然有3000块,B的帐户仍然有2000块。
我们把这种要么一起成功(A帐户成功减少1000,同时B帐户成功增加1000),要么一起失败(A帐户回到原来状态,B帐户也回到原来状态)的操作叫原子性操作。
如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行。这种特性就叫原子性。
3.什么是 key value 存储?
JAVA 中的 map 就是 key=>value 存储的。
键 => 值(key=>value)对,键唯一,对应一个值,值的形式多样。
比如:
Map<String, int> map = new HashMap<String, int>(); map.put("ming",1); map.put("zi",2);
这里定义了一个 Map 对象,并放置了两组数据键 ming,对应值 1,键 zi,对应值2。
map.get("ming");
这样会得到 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命令格式如下:
127.0.0.1:6379> config get config_setting_name
实例:
127.0.0.1:6379> config get loglevel
1) "loglevel" 2) "notice"
使用 * 号获取所有配置项:
127.0.0.1:6379> config get *
编辑配置
你可以通过修改 redis.conf 文件或使用 config set 命令来修改配置。
语法
config set 命令基本语法:
127.0.0.1:6379> config set config_setting_name new_config_value
实例
127.0.0.1:6379> config set loglevel "notice" OK 127.0.0.1:6379> CONFIG GET loglevel 1) "loglevel" 2) "notice"
1.4——Redis数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
String(字符串)
string 是 redis 最基本的类型,一个 key 对应一个 value。
实例
127.0.0.1:6379> SET runoob "菜鸟教程" OK 127.0.0.1:6379> GET runoob "菜鸟教程"
在以上实例中我们使用了 Redis 的 set 和 get 命令。键为 runoob,对应的值为 菜鸟教程。
Hash(哈希)
Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
实例
del runoob 用于删除前面测试用过的 key,不然会报错:(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> del runoob 127.0.0.1:6379> hmset runoob field1 "Hello" field2 "World" "OK" 127.0.0.1:6379> hset runoob field1 "Hello" 127.0.0.1:6379> hset runoob field2 "World"
实例中我们使用了 Redis hmset, hget 命令,hmset 设置了两个 field=>value 对, hget 获取对应 field 对应的 value.
List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
实例
127.0.0.1:6379> del runoob 127.0.0.1:6379> lpush runoob redis (integer) 1 127.0.0.1:6379> lpush runoob mongodb (integer) 2 127.0.0.1:6379> lpush runoob rabbitmq (integer) 3 127.0.0.1:6379> lrange runoob 0 10 1) "rabbitmq" 2) "mongodb" 3) "redis" 127.0.0.1:6379>
Set(集合)
Redis 的 Set 是 string 类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 0(1)。
sadd 命令
添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。
sadd key member
实例
127.0.0.1:6379> del runoob 127.0.0.1:6379> sadd runoob redis (integer) 1 127.0.0.1:6379> sadd runoob mongodb (integer) 1 127.0.0.1:6379> sadd runoob rabbitmq (integer) 1 127.0.0.1:6379> sadd runoob rabbitmq (integer) 0 127.0.0.1:6379> smembers runoob 1) "redis" 2) "rabbitmq" 3) "mongodb"
注意:以上实例中 rabbitmq 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。
zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
zadd 命令
添加元素到集合,元素在集合中存在则更新对应score
zadd key score member
实例
127.0.0.1:6379> del runoob 127.0.0.1:6379> zadd runoob 0 redis (integer) 1 127.0.0.1:6379> zadd runoob 0 mongodb (integer) 1 127.0.0.1:6379> zadd runoob 0 rabbitmq (integer) 1 127.0.0.1:6379> zadd runoob 0 rabbitmq (integer) 0 127.0.0.1:6379> zrangebyscore runoob 0 1000 1) "mongodb" 2) "rabbitmq" 3) "redis"
redis遇到的问题总结:
更多推荐
redis基础知识——菜鸟教程
发布评论