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)