1. 程式人生 > >緩存數據庫-redis數據類型和操作

緩存數據庫-redis數據類型和操作

memcached tco view 技術 hid 指定 創建 div one

Redis支持五種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)

一:String(字符串)

string是redis最基本的類型,你可以理解成與Memcached一模一樣的類型,一個key對應一個value。

string類型是二進制安全的。意思是redis的string可以包含任何數據。比如jpg圖片或者序列化的對象 。

string類型是Redis最基本的數據類型,一個鍵最大能存儲512MB。

redis中的String在在內存中按照一個name對應一個value來存儲。如圖

技術分享

  -------------------------------------------------------------------------------------

  1)set(name,value,ex=None,px=None,nx=False,xx=False)

    在Redis中設置值,默認不存在則創建,存在則修改

    ex:過期時間(秒)

    px:過期時間(毫秒)

    nx:如果設置為True,則只有name不存在時,當前set操作才執行

    xx:如果設置為True,則只有name存在時,崗前set操作才執行

  2)setnx(name,value)

    設置值,只有name不存在時,執行設置操作(添加)

    = set(name value,nx=True)

  3)setex(name,value,time)

    # time,過期時間(數字秒 或 timedelta對象

    =set(name,value,ex=time)

  4)psetex(name, time_ms, value)

    # time_ms,過期時間(數字毫秒 或 timedelta對象

    =set(name,value,px=time)

  5)mset(*args, **kwargs)

    批量設置值

    如:mset(k1="v1",k2="v2")

  -----------------------------------------------------------------------------------

  6)get(name) 獲取值

  7)mget(keys,*args) 批量獲取

    mget(k1,k2)

  8)getset(name,value) 設置新值並獲取原來的值

  9)getrange(key,start,end) 獲取子序列(根據字節獲取,非字符)

    # name,Redis 的 name

    # start,起始位置(字節)

    #end,結束位置(字節)

    比如:“中國” 0-3表示“中”

  10)setranage(name,offset,value) 修改字符串內容,從指定字符串索引開始向後替換(新值太長時,則向後添加)

  11) setbit(name,offset,value) 對name對應值的二進制表示的位進行操作

    

# 對name對應值的二進制表示的位進行操作
 
# 參數:
    # name,redis的name
    # offset,位的索引(將值變換成二進制後再進行索引)
    # value,值只能是 1 或 0
 
# 註:如果在Redis中有一個對應: n1 = "foo",
        那麽字符串foo的二進制表示為:01100110 01101111 01101111
    所以,如果執行 setbit(n1, 7, 1),則就會將第7位設置為1,
        那麽最終二進制則變成 01100111 01101111 01101111,即:"goo"
 
# 擴展,轉換二進制表示:
 
    # source = "武沛齊"
    source = "foo"
 
    for i in source:
        num = ord(i)
        print bin(num).replace(b,‘‘)
 
    特別的,如果source是漢字 "武沛齊"怎麽辦?
    答:對於utf-8,每一個漢字占 3 個字節,那麽 "武沛齊" 則有 9個字節
       對於漢字,for循環時候會按照 字節 叠代,那麽在叠代時,將每一個字節轉換 十進制數,然後再將十進制數轉換成二進制
        11100110 10101101 10100110 11100110 10110010 10011011 11101001 10111101 10010000
        -------------------------- ----------------------------- -----------------------------
                    武                         沛                           齊
*用途舉例,用最省空間的方式,存儲在線用戶數及分別是哪些用戶在線 每個用戶都用個ID,用戶ID號是多少,就設置第多少位為1,通過bitcount()統計1的個數,就代表有了多少個在線用戶
優點統計速度快,點用空間少:1億用戶只需要占用100M空間 1M=1024*1024

  12)getbit(name,offset) 獲取name對應的值的二進制表示中的某位的值 (0或1)

  13) bitcount(key, start=None, end=None) 獲取name對應的值的二進制表示中 1 的個數

  14)strlen(name) 返回name對應值的字節長度(一個漢字3個字節)

  15)incr(self, name, amount=1)自增 name對應的值,當name不存在時,則創建name=amount,否則,則自增。

  16)incrbyfloat(self, name, amount=1.0) 增 name對應的值,當name不存在時,則創建name=amount,否則,則自增。

  17)decr(self, name, amount=1)自減 name對應的值,當name不存在時,則創建name=amount,否則,則自減。

  18)append(key, value) 在redis name對應的值後面追加內容

  練習查看

 

技術分享
# -*- coding:utf-8 -*-
__author__ = shisanjun
[BEGIN] 2017/7/29 15:51:31
[[email protected] ~]# redis-cli
127.0.0.1:6379> set name1 shi  #設置個key-value
OK
127.0.0.1:6379> set name2 san
OK
127.0.0.1:6379> set name3 jun ex 3 #設置name3過期時間為3秒
OK
127.0.0.1:6379> get name3
(nil)
127.0.0.1:6379> KEYS *  #查看所有key
1) "name1"
2) "name2"
3) "foo"
127.0.0.1:6379> set name2  jun nx #不存在則創建,存在則不創建
(nil)
127.0.0.1:6379> set name3  jun nx #不存在則創建,存在則不創建
OK
127.0.0.1:6379> set name1  111 xx #存在則創建,不存在不創建
OK
127.0.0.1:6379> set name4  111 xx #存在則創建,不存在不創建
(nil)
127.0.0.1:6379> SETNX name5 222 #不存在則創建,存在則不創建
(integer) 1
127.0.0.1:6379> SETNX name5 222
(integer) 0
"10"
127.0.0.1:6379> SETEX name6 3 333 #設置過期時間為3秒 setex key time value
OK
127.0.0.1:6379> get name6
(nil)
127.0.0.1:6379> PSETEX name7 1 777 #設置過期時間為1毫秒 setex key time value
OK
127.0.0.1:6379> MSET k1 "v1" k2 "v2" #批量設置
OK
127.0.0.1:6379> keys *
1) "name1"
2) "k1"
3) "name5"
4) "k2"
5) "name2"
6) "name3"
7) "foo"
127.0.0.1:6379> mget k1 k2 #批量查看
1) "v1"
2) "v2"
127.0.0.1:6379> GETSET k1 "v3" #設置新值還回舊值
"v1"
127.0.0.1:6379> get k1
"v3"
127.0.0.1:6379> set k3 "中國"
OK
127.0.0.1:6379> GETRANGE k3 0 3 #從那個字節獲取,一個中文3個字節
"\xe4\xb8\xad\xe5"
127.0.0.1:6379> SETRANGE k3 6 1111 #從那個字節設置
(integer) 10
127.0.0.1:6379> get k3
"\xe4\xb8\xad\xe5\x9b\xbd1111"
127.0.0.1:6379> set n1 "foo"
OK
127.0.0.1:6379> setbit n1 7 1  #從左到右第7位設置1
(integer) 0
127.0.0.1:6379> get n1
"goo"
127.0.0.1:6379> getbit n1 7 #獲取第7位是1還是0
(integer) 1
127.0.0.1:6379> BITCOUNT n1 0 3 #獲取從0-3個字節中轉二進制1的個數
(integer) 17
127.0.0.1:6379> STRLEN k3 #統計字節個數
(integer) 10
127.0.0.1:6379> set n2 1
OK
127.0.0.1:6379> INCR n2 #自增
(integer) 2
127.0.0.1:6379> INCR n2
(integer) 3
127.0.0.1:6379> INCR n2
(integer) 4
127.0.0.1:6379> DECR n2 #自減
(integer) 3
127.0.0.1:6379> DECR n2
(integer) 2
127.0.0.1:6379> INCRBYFLOAT n2 1.0  #按浮點數自增
"3"
127.0.0.1:6379> INCRBYFLOAT n2 1.0
"4"
127.0.0.1:6379> set n3 4.0
127.0.0.1:6379> INCRBYFLOAT n3 2.1
"6.1"
127.0.0.1:6379> APPEND n3 2222  #追加
(integer) 7
127.0.0.1:6379> get n3
"6.12222"

[END] 2017/7/29 16:05:41
View Code

緩存數據庫-redis數據類型和操作