1. 程式人生 > 實用技巧 >【Redis】03 Redis 資料型別、相關補充、常用命令

【Redis】03 Redis 資料型別、相關補充、常用命令

redis的資料型別

1,概述

使用Redis進行應用設計和開發的一個核心概念是資料型別。

與關係資料庫不同,在Redis中不存在需要我們擔心的表,

在使用Redis進行應用設計和開發時,我們首先應該考慮的是Redis原生支援的哪種資料型別陽適合我們的應該場景,

此外,我們無法像在關係資料庫中那樣,使用sql來操作Redis中的資料,

相反,我們需要直接使用API傳送資料反對應的命令,來操作想要操作的資料

2,字串型別

字串型別是程式語言和應用程式中最常見和最有用的資料型別,也是Redis的基本資料型別之一,

事實上,Redis中所有鍵都必須是字串。

3,list資料型別

列表是應用我只是應該程式開發中非常有用的資料型別之一,列表能存在一組物件,

因此它也可以被用於棧或者佇列,

在Redis中,與鍵相關的聯的值可以是字串組成的列表,Redis中的列表更像是資料結構中的雙向連結串列。

4,hash資料型別

雜湊表示欄位和值之間的對映關係,與JAVA中的Map類似,

Redis資料集本身就可以看做一個雜湊,其中字串型別的鍵關聯到如字串和列表之類的資料物件,

而Redis的資料物件也可以再次使用雜湊,其欄位和值必須 是字串。

5,set資料型別

集合型別是由唯一,無序物件組成的集合(collection).它經常用於測試某個成員是集合中,

重複項刪除和集合運算(求並,交,差集),

Redis的值物件可以是字串集合。

6,zset(sortset)資料型別

有序集合是一個類似於set但是更復雜的資料型別,

單詞sorted意為著這種集合中的每個元素都有一個可用於排序的權重,

並且我們可以按順序從集合中得到元素在某些需要一個保持資料有序的場景中,使用這種原生的序的特性是很方便的。

相關知識串講

1,單程序單執行緒

採用多路 I/O 複用技術可以讓單個執行緒高效的處理多個連線請求(儘量減少網路IO的時間消耗)

why?

多執行緒處理可能涉及到鎖

多執行緒處理會涉及到執行緒切換而消耗CPU

單程序不存線上程安全問題

缺點:

無法發揮多核CPU效能,不過可以通過在單機開多個Redis例項來完善

2,預設16個兄弟一起站臺

預設16個數據庫,類似陣列下表從零開始,初始預設使用零號庫

3,切換資料庫命令

select命令切換資料庫

4,常用基本命令

dbsize檢視當前資料庫的key的數量

flushdb:清空當前庫

Flushall;通殺全部庫

5,其它說明

統一密碼管理,16個庫都是同樣密碼,要麼都OK要麼一個也連線不上

Redis索引都是從零開始

相關命令詳解

官網命令列表:

http://www.redis.net.cn/order/

官方文件:

http://redisdoc.com/

常用命令:

keys * 
獲取所有的key

select 0 
選擇第一個庫

move myString 1 
將當前的資料庫key移動到某個資料庫,目標庫有,則不能移動

flushdb 
清除指定庫

randomkey  
從當前資料庫中隨機返回

type key 型別

del key1 
刪除key

exists key 
判斷是否存在key

expire key 10 
10過期

pexpire key 
1000毫秒

persist key 
刪除過期時間

ttl key 
檢視還有多少秒過期,-1表示永不過期,-2表示已過期

string型別相關命令

    set name cxx

    get name

    getrange name 0 -1 字串分段   0 -1是全部   0 -2  ==n-1

    getset name new_cxx 設定值,返回舊值

    mset key1 key2 批量設定

    mget key1 key2 批量獲取

    setnx key value 不存在就插入(not exists)

    setrange key index value 從index開始替換value

    incr age 遞增

    incrby age 10 遞增

    decr age 遞減

    decrby age 10 遞減

    incrbyfloat 增減浮點數

    append 追加

    strlen 長度

    object encoding key  
    得到key 的型別  

   string裡面有三種編碼
int 用於能夠副作用64位有符號整數表示的字串 embstr 用於長度小於或等於44位元組 Redis3.x中是39位元組,這種型別的編碼在記憶體使用時效能更好 raw 用於長度大於44位元組的

list

  lpush mylist a b c 左插入

    rpush mylist x y z 右插入

    lrange mylist 0 -1 取出資料集合  0 -1是取出所有   0   1取第第一個和第二個

    lpop mylist 彈出集合最後一個元素  彈出之後就沒有了哦

    rpop mylist 彈出第一個元素  彈出之後就沒有了哦

    llen mylist 長度  

    lrem mylist count value 刪除

        |-COUNT 的值可以是以下幾種:

            |--count > 0 : 從表頭開始向表尾搜尋,移除與 VALUE 相等的元素,數量為 COUNT 。

            |--count < 0 : 從表尾開始向表頭搜尋,移除與 VALUE 相等的元素,數量為 COUNT 的絕對值。

            |--count = 0 : 移除表中所有與 VALUE 相等的值。

    lindex mylist 2 指定索引的值

    lset mylist 2 n 索引設值

    ltrim mylist 0 4   

            |--對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除。

                下標 0 表示列表的第一個元素,以 1 表示列表的第二個元素,以此類推。

                你也可以使用負數下標,以 -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推。

    linsert mylist before a 插入

    linsert mylist after a 插入

            |--命令用於在列表的元素前或者後插入元素。 當指定元素不存在於列表中時,不執行任何操作。

                當列表不存在時,被視為空列表,不執行任何操作。 如果 key 不是列表型別,返回一個錯誤。

    rpoplpush list list2 轉移列表的資料

            |--命令用於移除列表的最後一個元素,並將該元素新增到另一個列表並返回。

Hash

    hset myhash name cxx

         |--命令用於為雜湊表中的欄位賦值 。

            |--如果雜湊表不存在,一個新的雜湊表被建立並進行 HSET 操作。

            |--如果欄位已經存在於雜湊表中,舊值將被覆蓋。

    hget myhash name

    hmset myhash name cxx age 25 note "i am notes"

    hmget myhash name age note   

    hgetall myhash 獲取所有的

    hexists myhash name 是否存在

    hsetnx myhash score 100 設定不存在的  如果存在,不做處理

    hincrby myhash id 1 遞增

    hdel myhash name 刪除

    hkeys myhash 只取key

    hvals myhash 只取value

    hlen myhash 長度

Set

    sadd myset redis 

    smembers myset 資料集合

    srem myset set1 刪除

    sismember myset set1 判斷元素是否在集合中

    scard key_name 個數

    sdiff | sinter | sunion 操作:集合間運算:差集 | 交集 | 並集

    srandmember 隨機獲取集合中的元素

    spop 從集合中彈出一個元素

Zset

    zadd zset 1 one

    zadd zset 2 two

    zadd zset 3 three

    zincrby zset 1 one 增長分數

    zscore zset two 獲取分數

    zrange zset 0 -1 withscores 範圍值

    zrangebyscore zset 10 25 withscores 指定範圍的值

    zrangebyscore zset 10 25 withscores limit 1 2 分頁

    Zrevrangebyscore zset 10 25 withscores 指定範圍的值

    zcard zset 元素數量

    Zcount zset 獲得指定分數範圍內的元素個數

    Zrem zset one two 刪除一個或多個元素

    Zremrangebyrank zset 0 1 按照排名範圍刪除元素

    Zremrangebyscore zset 0 1 按照分數範圍刪除元素

    Zrank zset 0 -1 分數最小的元素排名為0

    Zrevrank zset 0 -1 分數最大的元素排名為0

    Zinterstore

    zunionstore rank:last_week 7 rank:20150323 rank:20150324 rank:20150325 weights 1 1 1 1 1 1 1