爲何要學習並運用Redis?Redis有什麼好處?咱們步入Redis的海洋,初識Redis。html
Redis 是一個開源(BSD許可)的,內存中的數據結構存儲系統,它能夠用做數據庫、緩存和消息中間件。(來自官方的官方的解釋!)redis
1.高頻訪問docker
2.熱點數據shell
3.固定不變的數據數據庫
4.讀寫比列讀操做較高的數據緩存
注:等等,還有更多的運用場景,這是Redis特性所決定的!bash
1.數據庫數據結構
2.緩存app
3.消息中間件分佈式
4.註冊中心
5.分佈式鎖 (另外一種實現方式:zookeeper)
Redis支持多種類型的數據結構,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與範圍查詢, bitmaps, hyperloglogs 和地理空間(geospatial) 索引半徑查詢。
字符串
一般用SET command 和 GET command來設置和獲取字符串值
例:
> set mykey somevalue OK > get mykey "somevalue"
參數:
**ex ** :
過時時間(秒)
nx :
當key存在時SET會失敗,或相反的,當key不存在時它只會成功。
1.判斷是否存在
exists
exists mykey
返回1或0標識給定key的值是否存在
2.刪除
del
del mykey
返回1或0標識值是被刪除(值存在)或者沒被刪除(key對應的值不存在)
3.查看存儲類型
type
type myket
返回key對應的值的存儲類型
expire
expire key 5
設置超時時間,也可再次強調改變超時時間
使用 PERSIST 命令去除超時時間
參數
ex
set key 100 ex 10
在建立值的時候設置超時時間
ttl
ttl key
查看key對應的值剩餘存活時間
incr
incr mykey
將key 轉換爲 整型
散列
數據結構相似於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"
列表
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"
集合
更適合不重複的數據類型
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"
MULTI 、 EXEC 、 DISCARD 和 WATCH 是 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 命令只會由於錯誤的語法而失敗(而且這些問題不能在入隊時發現),或是命令用在了錯誤類型的鍵上面
拉去 Redis 5.0.4鏡像
docker pull redis:5.0.4
啓動 Redis
docker run --name redis -p 6379:6379 redis:5.0.4 redis-server --appendonly yes
進入Redis 容器內部
docker exec -it redis /bin/bash
鏈接服務端
redis-cli
參數
-h hostname
-p port
-n db(0~15)Database number