分佈式數據存儲 之 Redis(一) —— 初識Redis

分佈式數據存儲 之 Redis(一) —— 初識Redis

爲何要學習並運用Redis?Redis有什麼好處?咱們步入Redis的海洋,初識Redis。html

1、Redis是什麼

Redis 是一個開源(BSD許可)的,內存中的數據結構存儲系統,它能夠用做數據庫、緩存和消息中間件。(來自官方的官方的解釋!)redis

2、Redis的運用場景

​ 1.高頻訪問docker

​ 2.熱點數據shell

​ 3.固定不變的數據數據庫

​ 4.讀寫比列讀操做較高的數據緩存

等等,還有更多的運用場景,這是Redis特性所決定的!bash

3、Redis能夠作什麼

​ 1.數據庫數據結構

​ 2.緩存app

​ 3.消息中間件分佈式

​ 4.註冊中心

​ 5.分佈式鎖 (另外一種實現方式:zookeeper)

4、Redis常見的數據結構

Redis支持多種類型的數據結構,如 字符串(strings)散列(hashes)列表(lists)集合(sets)有序集合(sorted sets) 與範圍查詢, bitmapshyperloglogs地理空間(geospatial) 索引半徑查詢。

1.strings

字符串

經常使用命令

1.設置或獲取值

​ 一般用SET commandGET command來設置和獲取字符串值

例:

> set mykey somevalue
OK
> get mykey
"somevalue"

參數:

​ **ex ** :
​ 過時時間(秒)
nx
​ 當key存在時SET會失敗,或相反的,當key不存在時它只會成功。

​ 2.修改或查詢鍵空間

​ 1.判斷是否存在

exists

exists mykey

返回1或0標識給定key的值是否存在

​ 2.刪除

del

del mykey

返回1或0標識值是被刪除(值存在)或者沒被刪除(key對應的值不存在)

​ 3.查看存儲類型

type

type myket

返回key對應的值的存儲類型

3.Redis超時:數據在限定時間內存活

expire

expire key 5

設置超時時間,也可再次強調改變超時時間

使用 PERSIST 命令去除超時時間

參數

ex
set key 100 ex 10

在建立值的時候設置超時時間

ttl

ttl key

查看key對應的值剩餘存活時間

4.轉換爲 整型

incr

incr mykey

​ 將key 轉換爲 整型

2.hashes

散列

數據結構相似於Map<Object,Map<Object,Object>>

看起來就像一個 「hash」 的樣子,由鍵值對組成

經常使用命令

hmset

hmset person name admin age 10

設置 hash 中的多個域

hget

hget person age

取回單個域

例:

> hmset person name admin age 10
OK
> hget person age
"10"

3.lists

列表

經常使用命令

lpush

rpush mylist A

向list的左邊(頭部)添加一個新元素

rpush

lpush mylist first

向list的右邊(尾部)添加一個新元素

lrange

lrange mylist 0 -1

從list中取出必定範圍的元素

帶有兩個索引,必定範圍的第一個和最後一個元素
從尾部開始計數,所以-1表示最後一個元素,-2表示list中的倒數第二個元素,以此類推。

rpop

rpop mylist

從list中刪除元素並同時返回刪除的值。能夠在左邊或右邊操做

例:

> lpush list 1
(integer) 1
> rpush list 3
(integer) 2
> lrange list  0 10
6) "1"
7) "3"
> rpop list
"3"

4.sets

集合

更適合不重複的數據類型

經常使用命令

sadd

sadd myset 1 2 3

把新的元素添加到 set 中

smembers

smembers myset

查看

例:

127.0.0.1:6379> sadd myset 1 2 3
(integer) 3
127.0.0.1:6379> smembers myset
1) "1"
2) "2"
3) "3"

5、事務

MULTIEXECDISCARDWATCH 是 Redis 事務相關的命令。事務能夠一次執行多個命令, 而且帶有如下兩個重要的保證:

  • 事務是一個單獨的隔離操做:事務中的全部命令都會序列化、按順序地執行。事務在執行的過程當中,不會被其餘客戶端發送來的命令請求所打斷。
  • 事務是一個原子操做:事務中的命令要麼所有被執行,要麼所有都不執行。

命令

MULTI

​ 用於開啓一個事務,它老是返回 OK

EXEC

​ 負責觸發並執行事務中的全部命令

例:

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set name 10
QUEUED
127.0.0.1:6379> set name a
QUEUED
127.0.0.1:6379> incr name
QUEUED
127.0.0.1:6379> exec 
1) OK
2) OK
3) (error) ERR value is not an integer or out of range

DISCARD

​ 事務放棄, 事務隊列會被清空, 而且客戶端會從事務狀態中退出

例:

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name 100
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> get name
"a"

WATCH

​ 使得 EXEC 命令須要有條件地執行
​ 能夠爲 Redis 事務提供 check-and-set (CAS)行爲
​ 監控某些值,防止該值在十五提交過程當中被其餘客戶端改變

WATCH mykey
val = GET mykey
val = val + 1
MULTI
SET mykey $val
EXEC

# 若值爲nil 說明修改失敗

事務中的錯誤

入隊前

​ 大部分客戶端都會中止並取消這個事務

入隊後

​ 命令可能在 EXEC 調用以後失敗。
​ 事務正常執行,不會影響已經入隊的結果

爲何 Redis 不支持回滾(roll back)

​ Redis 命令只會由於錯誤的語法而失敗(而且這些問題不能在入隊時發現),或是命令用在了錯誤類型的鍵上面

6、Redis 在 Docker 中的運用

操做步驟

  1. 拉去 Redis 5.0.4鏡像

    docker pull redis:5.0.4

  2. 啓動 Redis

    docker run --name redis -p 6379:6379 redis:5.0.4 redis-server --appendonly yes

  3. 進入Redis 容器內部

    docker exec -it redis /bin/bash

  4. 鏈接服務端
    redis-cli

    參數
    ​ -h hostname
    ​ -p port
    ​ -n db(0~15)Database number

相關文章
相關標籤/搜索