key-value 存储系统,是跨平台的非关系型数据库;
Redis 是开源的,键值对(Key-Value)存储数据库
## 一、Redis基本的五种数据类型:
String: 字符串
Hash: 散列
List: 列表
Set: 无序集合
Sorted Set: 有序集合
## 二、Redis 与其他 key - value 缓存产品有以下三个特点:
第一:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
第二:Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
第三:Redis支持数据的备份,即master-slave模式的数据备份。
## 三、Redis的优势:
1.性能极高
2.丰富的数据类型
3.原子 – Redis的所有操作都是原子性的,
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。
## 四、常用命令
### 1、字符串
~~~
127.0.0.1:6379> SET name redis
OK
127.0.0.1:6379> GET name
"redis"
127.0.0.1:6379> del name
(integer) 1
~~~
### 2、hash
~~~
127.0.0.1:6379> HMSET runoobkey name "redis tutorial"
OK
127.0.0.1:6379> HGETALL runoobkey
1) "name"
2) "redis tutorial"
127.0.0.1:6379> HDEL runoobkey name
(integer) 1
127.0.0.1:6379> HMSET runoobkey name "redis tutorial"
OK
~~~
## 3、Redis 列表(List)
~~~
redis 127.0.0.1:6379> LPUSH runoobkey redis
(integer) 1
redis 127.0.0.1:6379> LPUSH runoobkey mongodb
(integer) 2
redis 127.0.0.1:6379> LPUSH runoobkey mysql
(integer) 3
redis 127.0.0.1:6379> LRANGE runoobkey 0 10
1) "mysql"
2) "mongodb"
3) "redis"
~~~
## 4、Redis 集合(Set)
~~~
redis 127.0.0.1:6379> SADD runoobkey redis
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mongodb
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mysql
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mysql
(integer) 0
redis 127.0.0.1:6379> SMEMBERS runoobkey
1) "mysql"
2) "mongodb"
3) "redis"
~~~
## 5、Redis 有序集合(sorted set)
~~~
redis 127.0.0.1:6379> ZADD runoobkey 1 redis
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 2 mongodb
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
(integer) 0
redis 127.0.0.1:6379> ZADD runoobkey 4 mysql
(integer) 0
redis 127.0.0.1:6379> ZRANGE runoobkey 0 10 WITHSCORES
1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"
~~~
## 五、Redis 事务
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
* 批量操作在发送 EXEC 命令前被放入队列缓存。
* 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
* 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
* 开始事务。
* 命令入队。
* 执行事务。
### 实例
以下是一个事务的例子, 它先以 **MULTI** 开始一个事务, 然后将多个命令入队到事务中, 最后由 **EXEC** 命令触发事务, 一并执行事务中的所有命令:
~~~
redis 127.0.0.1:6379> MULTI
OK
redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED
redis 127.0.0.1:6379> GET book-name
QUEUED
redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED
redis 127.0.0.1:6379> SMEMBERS tag
QUEUED
redis 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"
~~~
六、推荐文章
[https://blog.csdn.net/weixin_44432032/article/details/122883278?spm=1001.2014.3001.5501](https://blog.csdn.net/weixin_44432032/article/details/122883278?spm=1001.2014.3001.5501)