Redis的使用--基本數據類型的操做命令和應用場景

echo編輯整理,歡迎轉載,轉載請聲明文章來源。歡迎添加echo微信(微信號:t2421499075)交流學習。 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這纔是真正的堪稱強大!!!php


Redis的基本數據類型

最基本的數據類型strings

最基本也是最經常使用的數據類型就是String,對應的操做命令也比較簡單的,有get/set/del等;它的對應的值能夠是任何種類的字符串,最大保存長度512MB。基本命令的使用以下:java

set name echo
get name
del name

set key 1
incr key
decr key
incrby key 20
decrby key 20
incrbyfloat key 2.1

set name ab
append name c
getrange name 1 5
strlen name
mget name1 name2 name3
mset name4 echo4 name5 echo5 name6 echo6

在這裏插入圖片描述

字符串中一個特殊操做setnx

setnx name echo
若是name存在就返回0存入不成功,若是name不存在就返回1存入成功。

基於該特性咱們能夠用它來實現分佈式鎖。可是注意:使用改特性也有一個缺點就是,可能會形成死鎖。若是咱們在使用過程中,使用del key釋放鎖,有可能會釋放鎖失敗,致使其餘操做永遠獲取不到鎖。當讓咱們也能夠對ke設置過時時間,可是也會有相同的問題。解決方案:python

數據類型list

對於該數據類型,我以爲用list一點也不貼切,應該叫作:有序的隊列,才合適。畢竟list是無序的,並且也沒有前後一說。基本操做命令以下:redis

lpush queue a
lpush queue b c
rpush queue d e
lpop queue
rpop queue
lindex queue 0
lrange queue 0 -1
ltrim queue 0 3
del queue
llen queue
brpop queue 50

在這裏插入圖片描述

list數據結構中brpop是一個高級操做

brpop queue 60 
若是queue隊列中存在元素,直接彈出最右邊的按個元素,若是不存在,輪詢等待60s。超時,直接返回null。

該數據結構有一個明顯的特色,那就是有序,不論是從左邊存入仍是右邊存入,都可以有效的實現隊列的進出。咱們能夠看到最後一個條命令,它實際上是redis提供的一個高級操做,利用list隊列的特性,實現了阻塞式訪問,咱們可使用該功能作一個簡單的發佈訂閱功能。若是存入數據做爲發佈消息,使用brpop阻塞式訪問來訂閱。ruby

數據類型set

Redis中Set 是 String 類型的無序集合。該集合有set集合的屬性,元素惟一, 因此對應的redis set數據成員是惟一的,這就意味着集合中不能出現重複的數據。微信

sadd myset a b c d e f g
smembers myset
scard myset
srandmember key
spop myset
srem myset d e f
sismember myset a
sdiff set1 set2
sinter set1 set2
sunion set1 set2

在這裏插入圖片描述

在set中,元素都不是重複的,因此咱們能夠用它來記錄一些惟一的值。這幾個基本的命令裏面咱們能夠看到有一個spop myset 隨機彈出一個元素,利用set的惟一性,和隨機彈出元素的特性,咱們可使用set集合實現一個抽獎活動。將全部人的id存入set集合中,而後使用spop隨機彈出元素,彈出的元素id就是中獎人。數據結構

Redis的zset -- 有序集合

zset和Set類型極爲類似,它們都是字符串的集合,都不容許重複的成員出如今一個Set中。它和set集合的區別只去在於zset是有序的,set是無序的。並且set的存儲和zset的存儲不同app

zadd myzset 10 java 20 php 30 ruby 40 cpp 50 python
zrange myzset 0 -1 withscores
zrevrange myzset 0 -1 withscores
zrangebyscore myzset 20 30
zrem myzset php cpp
zcard myzset
zincrby myzset 5 python
zcount myzset 20 60
zrank myzset java
zscore myzset java

在這裏插入圖片描述

zset是一個有序的集合,它的排序是根據score來進行的,因此咱們可使用該特性來實現一個最熱文章的功能,當文章的熱度上漲以後,咱們對文章對應score來進行遞增便可。分佈式

Redis的數據類型Hash

Redis的哈希數據類型存儲的是一個string類型的field和value的映射表,hash適合存放對象學習

hset h1 f 6
hmset h1 a 1 b 2 c 3 d 4
hget h1 a
hmget h1 a b c d
hkeys h1
hvals h1
hgetall h1
hexists h1 f
hdel h1 f
hlen h1

在這裏插入圖片描述

hash的操做和咱們java開發中操做map很相似,好比添加一個key爲h一、field爲f、value爲6的hash值,在java中就至關於建立一個名字爲h1的map,存入key爲f,value爲6的鍵值對。該數據結構的特色很適合咱們在業務中存放對象,好比使用他來實現購物車。將hash設計成爲後面這種模式便可:key:用戶 id;field:商品 id;value:商品數量。商品在購物車中的數據量使用以下命令來實現便可

對咱們的hash值來進行加1
hincrby h1 d 1

對咱們的hash值來進行減1
hincrby h1 d -1

作一個有底線的博客主

相關文章
相關標籤/搜索