Redis簡介及操作命令

一、簡介

REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo寫的key-value存儲系統。

Redis是一個開源的使用ANSI C語言編寫、遵守BSD協議、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。

它通常被稱爲數據結構服務器,因爲值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型。

 

二、String

命令

keys *  查詢key列表
set 名稱 值 添加或修改值
get 名稱 獲取值
del 名稱 刪除值
mset 名稱 值 名稱 值 批量添加或修改
mget 名稱 名稱 批量獲取值
strlen 名稱 獲取值得長度
append 名稱 值 在原有值得基礎上追加新的內容,返回最終值的長度
incr 名稱 每執行一次對數值加一,,自增效果
decr 名稱 每執行一次對數值減一,,自減效果
incrby 名稱 數字值 對數值增加指定的整數值   命令數值可以爲負
decrby 名稱 數字值 對數值減少指定的整數值   命令數值可以爲負
incrbyfloat 名稱 數字值 對數值增加指定的浮點值
setex 名稱 有效時間 值 添加值並對此值設置有效時間    時間單位爲秒
psetex 名稱 有效時間 值 添加值並對此值設置有效時間    時間單位爲毫秒

String的應用場景

1.用於數據庫表的主鍵控制;

2.主頁高頻訪問信息控制,如新浪微博大V關注數

String類型數據操作注意事項

1.數據操作不成功的反饋與數據正常操作之間的差異
  ①  表示運行結果是否成功
      (integer) 0 — false 失敗
      (integer) 1 — true  成功
  ②  表示運行結果
      (integer) 3 — 3    3 個
      (integer) 1 — 1    1 個

2.數據未獲取到
    (nil)等同於null

3.數據最大存儲值
    512MB
4.數值計算最大識別範圍(java中的long的最大值)

   9223372036854775807

5.key的設置約定

   表名:主鍵名:主鍵值:字段名

三、Hash

命令

hset key field value 添加修改數據
hget key field 獲取數據
hdel key field1 [field2] 刪除數據
hmset key field1 value  field2 value 批量添加修改數據
hget key field1 field2 批量獲取數據
hlen key 獲取值的field的個數
hexists key field 查詢是否存在此字段
hkeys key 獲取哈希表中所有的字段
hvals key 獲取哈希表中所有的字段的值
hincrby  key field increment

指定字段的數值增加指定的整數數值

hincrbyfloat  key field increment 指定字段的數值增加指定的浮點數或者整數數值
hgetall key 獲取當前key下所有信息
hsetnx key field value 當此key中存在插入的field時,會新增數據失敗,不存在時新增成功

應用場景

電商網站購物車的設計和實現

注意事項

hash類型下的value只能存儲字符串,不允許存其他數據類型,不存在嵌套現象.如果數據未獲取到,對應的值爲(nil)

每個hash可以存儲 2^23-1個鍵值對

hash類型十分貼近對象的數據存儲形式,並且可以靈活添加刪除對象屬性。但hash設計初衷不是爲了存
儲大量對象而設計的,切記不可濫用,更不可以將hash作爲對象列表使用

hgetall操作可以獲取全部屬性,如果內部field過多,遍歷整體數據效率就會很低,有可能成爲數據訪問瓶頸

 

四、list

數據存儲要求:存儲多個數據,並對數據存儲的順序進行區分

list類型:保存多個數據,底層使用雙向鏈表存儲結構實現

lpush key value1 [value2] 左添加/修改
rpush key value1 [value2] 右添加/修改
lrange key startindex stopindex 獲取list的下標起始到結束的數據,下標根據需求填寫
lindex key index 獲取所選下標的list的值
llen key 獲取當前list的元素個數
lpop key 獲取並刪除最左邊的數據
rpop key 獲取並刪除最右邊的數據
blpop key1 [key2] timeout 規定時間內獲取並刪除所有list其中一個list的最左邊的數據
brpop key1 [key2] timeout 規定時間內獲取並刪除所有list其中一個list的最右邊的數據
lrem key count value 刪除指定數據   count表示刪除value的個數
   

應用場景

微信朋友圈點贊

微博關注列表的順序顯示

依靠隊列解決多路信息彙總問題,如多服務器日誌彙總

list操作注意事項

保存的數據都是String類型的,最多存儲2^32-1個

具有索引概念,但操作數據是通常以隊列形式進行入隊出隊操作,或以棧的形式入棧出棧操作

獲取全部數據操作結束索引設置爲-1

list可以對數據進行分頁操作,通常第一頁的信息來自list

五、set

新的存儲需求,存儲大量的數據,在查詢方面提供更高的效率

需要的存儲結構:能夠保存大量的數據,高效的內部存儲機制,便於查詢

set類型:與hash存儲結構完全相同,僅存儲鍵,不存儲值,存儲的鍵不允許重複

命令

sadd key member1 [member2] 添加修改數據
smembers key 獲取數據
srem key member1 [member2] 刪除數據
scard key 獲取集合數據的個數
sismember key  member 校驗member是否存在,存在返回1,不存在返回0
srandmember key [count] 隨機獲取集合中指定數量的數據
spop key 隨機獲取集合中某個數據並刪除
sinter key1 [key2] 獲取兩個集合的交集
sunion key1 [key2] 獲取兩個集合的並集
sdiff key1 [key2] 獲取兩個集合的差集
sinterstore destination key1 [key2] 獲取兩個集合的交集且存儲到指定的集合,指定的集合如果原來有數據,則會被清空
sunionstore destination key1 [key2] 獲取兩個集合的並集且存儲到指定的集合,指定的集合如果原來有數據,則會被清空
sdiffstore destination key1 [key2] 獲取兩個集合的差集且存儲到指定的集合,指定的集合如果原來有數據,則會被清空
smove source destination member 將指定數據從原始集合移動到目標集合

業務場景

用於隨機推介類的檢索,如QQ音樂每日推介

用於同類信息的關聯檢索,如支付寶中與好友擁有的共同好友顯示

統計網站的PV日訪問量,UV(cookie),IP

注意事項

set不允許重複添加

set的存儲結構與hash相同,單無法啓用hash的存儲空間

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章