文章目录
1. NoSQL 简介
1.1 NoSQL 的概念
NoSQL(Not Only SQL),意即"不仅仅是 SQL",是一项全新的数据库理念,泛指非关系型的数据库。
1.2 NoSQL 的作用
NoSQL 用于超大规模数据的存储。
1.3 关系型和非关系型数据库比较
- 关系型数据库的数据之间有关联关系,非关系型数据库的数据之间没有关联关系
- 关系型数据库的数据存储在硬盘的文件上,非关系型数据库的数据存储在内存中(所以非关系型数据库的查询速度更快)
- 关系型数据库存储的数据格式只支持基本数据类型,非关系型数据库的存储的数据格式可以是 key-value 形式、文档形式、图片形式等等
1.4 主流的 NoSQL 产品
- 键值(Key-Value)存储数据库
相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
数据模型: 一系列键值对
优势: 快速查询
劣势: 存储的数据缺少结构化 - 列存储数据库
相关产品:Cassandra, HBase, Riak
典型应用:分布式的文件系统
数据模型:以列簇式存储,将同一列数据存在一起
优势:查找速度快,可扩展性强,更容易进行分布式扩展
劣势:功能相对局限 - 文档型数据库
相关产品:CouchDB、MongoDB
典型应用:Web应用(与Key-Value类似,Value是结构化的)
数据模型: 一系列键值对
优势:数据结构要求不严格
劣势: 查询性能不高,而且缺乏统一的查询语法 - 图形(Graph)数据库
相关数据库:Neo4J、InfoGrid、Infinite Graph
典型应用:社交网络
数据模型:图结构
优势:利用图结构相关算法。
劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。
2. Redis 的概念
Redis 是一款高性能的键值(Key-Value)存储的非关系型数据库。
3. Redis 的安装
-
进入网站
https://github.com/MSOpenTech/redis/releases
-
下载文件
Redis-x64-xxx.zip
-
直接解压到电脑就可以使用
-
目录结构
- redis.windows.conf:配置文件
- redis-cli.exe:redis 的客户端
- redis-server.exe:redis 服务器端
-
简单使用
-
打开 redis 服务器端,不要关闭
-
打开 redis 的客户端,输入
127.0.0.1:6379> set username zhangsan OK 127.0.0.1:6379> get username "zhangsan"
-
4. Redis 的命令
4.1 Redis 的数据结构
redis 存储的是 key-value 格式的数据,其中 key 都是字符串类型,value 有 5 种不同的数据结构:
- 字符串类型 String
- 哈希类型 Hash:key-value 的集合
- 列表类型 List:支持重复元素
- 集合类型 Set :不允许重复元素
- 有序集合类型 SortedSet:不允许重复元素,且元素有顺序排序
4.2 字符串类型 String
-
存储一个元素
语法:
set key value
实例:
127.0.0.1:6379> set username zhangsan OK
-
获取一个元素
语法:
get key
实例:
127.0.0.1:6379> get username "zhangsan"
-
删除一个元素
语法:
del key
实例:
127.0.0.1:6379> del username (integer) 1
4.3 哈希类型 Hash
-
存储一个元素
语法:
hset key field value
实例:
127.0.0.1:6379> hset myhash username zhangsan (integer) 1
-
获取一个元素
语法:
hget key field
实例:
127.0.0.1:6379> hget myhash username "zhangsan"
-
获取所有元素
语法:
hgetall key
实例:
127.0.0.1:6379> hgetall myhash 1) "age" 2) "18"
-
删除一个元素
语法:
hdel key field
实例:
127.0.0.1:6379> hdel myhash username (integer) 1
4.4 列表类型 List
-
将元素添加列表左边
语法:
lpush key value
实例:
127.0.0.1:6379> lpush mylist a (integer) 1 127.0.0.1:6379> lpush mylist b (integer) 2
-
将元素添加列表右边
语法:
rpush key value
实例:
127.0.0.1:6379> rpush mylist c (integer) 1
-
获取指定区间元素
说明:
lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
语法:
lrange key start end
实例:
127.0.0.1:6379> lrange mylist 0 -1 1) "b" 2) "a" 3) "c"
-
删除列表最左边的元素,并将元素返回
语法:
lpop key
实例:
127.0.0.1:6379> lpop mylist "b"
-
删除列表最右边的元素,并将元素返回
语法:
rpop key
实例:
127.0.0.1:6379> rpop mylist "c"
4.5 集合类型 Set
-
存储一个元素
语法:
sadd key value
实例:
127.0.0.1:6379> sadd myset a (integer) 1 127.0.0.1:6379> sadd myset a (integer) 0
注意:Set 不能添加重复元素
-
获取全部元素
语法:
smembers key
实例:
127.0.0.1:6379> smembers myset 1) "b" 2) "a"
-
删除某个元素
语法:
srem key value
实例:
127.0.0.1:6379> srem myset c (integer) 1
4.6 有序集合类型 SortedSet
-
存储一个元素
语法:
zadd key score value
实例:
127.0.0.1:6379> zadd mysortedset 60 a (integer) 1 127.0.0.1:6379> zadd mysortedset 50 b (integer) 1 127.0.0.1:6379> zadd mysortedset 80 c (integer) 1
-
获取指定区间元素
语法:
zrange key start end [withscores]
实例:
127.0.0.1:6379> zrange mysortedset 0 -1 1) "b" 2) "a" 3) "c" 127.0.0.1:6379> zrange mysortedset 0 -1 withscores 1) "b" 2) "50" 3) "a" 4) "60" 5) "c" 6) "80"
-
删除一个元素
语法:
zrem key value
实例:
127.0.0.1:6379> zrem mysortedset a (integer) 1
4.7 通用命令
-
查询所有的键
keys *
-
获取键对应的value的类型
type key
-
删除指定的 key-value
del key
5. Redis 的持久化
5.1 持久化的作用
Redis 是一个内存数据库,当 Redis 服务器重启后,数据会丢失。如果需要这些数据,可以将 Redis 内存中的数据持久化保存到硬盘的文件中。
5.2 Redis 持久化机制
- RDB:默认方式,不需要进行配置,默认就使用这种机制。
- AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据。
5.3 RDB 的使用
-
打开 redis.windwos.conf 文件,找到以下内容
save 900 1 save 300 10 save 60 10000
-
将其修改为以下内容
save 900 1 save 300 10 # 如果 10 秒内至少有 5 个键被改变,就持久化 save 10 5
-
打开命令提示符,启动 Redis 服务器,并指定配置文件名称
D:\Redis>redis-server.exe redis.windows.conf
-
启动 Redis 客户端,十秒内改变五个键
127.0.0.1:6379> set name a OK 127.0.0.1:6379> set name b OK 127.0.0.1:6379> set name c OK 127.0.0.1:6379> set name d OK 127.0.0.1:6379> set name e OK
-
redis 文件夹中多了一个 dump.rdb 文件
-
关闭 Redis 的客户端,服务端
-
重新开启 Redis 的客户端,服务端,获取数据成功
127.0.0.1:6379> get name "e"
5.4 AOF 的使用
-
打开 redis.windwos.conf 文件,找到以下内容
appendonly no
-
将其修改为以下内容(开启 AOF)
appendonly yes
-
redis.windwos.conf 文件还有关于 AOF 持久化的方式的配置
# appendfsync always : 每一次操作都进行持久化 appendfsync everysec : 每隔一秒进行一次持久化 # appendfsync no : 不进行持久化
-
打开命令提示符,启动 Redis 服务端,并指定配置文件名称
D:\Redis>redis-server.exe redis.windows.conf
-
启动 Redis 客户端,存储一个数据
127.0.0.1:6379> set name a OK
-
redis 文件夹中多了一 appendonly.aof 文件
-
关闭 Redis 的客户端,服务端
-
打开命令提示符,启动 Redis 服务端,并指定配置文件名称
D:\Redis>redis-server.exe redis.windows.conf
-
启动 Redis 客户端,获取数据成功
127.0.0.1:6379> get name "a"