Redis五大數據類型以及操做---散列表

 

目錄:html

1、redis的兩種連接方式redis

2、redis的字符串操做(string)django

3、redis的列表操做(list)app

4、redis的散列表操做(相似於字典裏面嵌套字典)post

5、redis的集合操做(set)spa

6、redis的有序集合操做(zset)code

1、redis的兩種連接方式htm

一、簡單鏈接對象

import redis conn = redis.Redis(host='10.0.0.200',port=6379) conn.set('k1','年後') print(conn.get('k1'))

二、鏈接池blog

若是要鏈接redis的時候推薦用鏈接池的方式;若是每次操做都用同一個連接,能夠用鏈接池連接

redis使用connection pool來管理對一個redis服務的全部鏈接,避免每次創建,釋放鏈接的開銷。默認 ,每一個redis實例都會維護一個本身的連接池。能夠直接創建一個鏈接池,

而後做爲參數redis,這樣就能夠實現多個redis實例共享一個鏈接池。

複製代碼
#鏈接池
import redis pool = redis.ConnectionPool(host='10.0.0.200',port=6379) conn = redis.Redis(connection_pool=pool) conn.set('a','lalla') print(conn.get('a'))
複製代碼

舉例

pool.py

import redis POOL = redis.ConnectionPool(host='10.0.0.200',port=6379)

view.py

複製代碼
from django.shortcuts import render,HttpResponse import redis from app01.pool import POOL # Create your views here.
def index(request): pool = redis.Redis(connection_pool=POOL)  #鏈接redis
    return HttpResponse('ok') def home(request): pool = redis.Redis(connection_pool=POOL) return HttpResponse('ok')
複製代碼

三、Django-redis組件

安裝:pip install django-redis

配置文件

複製代碼
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://10.0.0.200:6379", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", #"PASSWORD": "asdfasdf",
 } } }
複製代碼

使用:

複製代碼
#利用django-redis組件進行鏈接
from django.core.cache import caches import os import django_redis os.environ['DJANGO_SETTINGS_MODULE'] = 'redis之集合練習.settings' conn = django_redis.get_redis_connection() conn.set('b','666')
複製代碼

2、redis的字符串操做(string)

String操做,redis中的String在在內存中按照一個name對應一個value來存儲。

一、set(name, value, ex=None, px=None, nx=False, xx=False)  #設置值

在Redis中設置值,默認,不存在則建立,存在則修改 參數: ex,過時時間(秒) px,過時時間(毫秒) nx,若是設置爲True,則只有name不存在時,當前set操做才執行 xx,若是設置爲True,則只有name存在時,崗前set操做才執行

二、setnx(name, value)

設置值,只有name不存在時,執行設置操做(添加)  #至關於只是添加,不能進行修改操做

三、setex(name, value, time)

# 設置值 # 參數:
    # time,過時時間(數字秒 或 timedelta對象)

四、psetex(name, time_ms, value)

# 設置值 # 參數:
    # time_ms,過時時間(數字毫秒 或 timedelta對象)

五、mset(*args, **kwargs)

批量設置值 如: mset(k1='v1', k2='v2') 或 mset({'k1': 'v1', 'k2': 'v2'})

六、get(name)  獲取值

七、mget(keys, *args)

批量獲取 如: mget('ylr', 'zzz') 或 r.mget(['ylr', 'zzz'])

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

九、getrange(key, start, end)

# 獲取子序列(根據字節獲取,非字符) # 參數:
    # name,Redis 的 name
    # start,起始位置(字節)
    # end,結束位置(字節) # 如: "拉銷量" ,0-3表示 "拉"

待續。。

3、redis的列表操做(list)

4、redis的散列表操做

Hash操做,也叫作散列表操做。redis中Hash在內存中的存儲格式以下圖:

一、hset(name, key, value)

複製代碼
# name對應的hash中設置一個鍵值對(不存在,則建立;不然,修改)
 
# 參數:
    # name,redis的name
    # key,name對應的hash中的key
    # value,name對應的hash中的value
 
# 注:
    # hsetnx(name, key, value),當name對應的hash中不存在當前key時則建立(至關於添加)
複製代碼

二、hmset(name, mapping)

複製代碼
# 在name對應的hash中批量設置鍵值對
 
# 參數:
    # name,redis的name
    # mapping,字典,如:{'k1':'v1', 'k2': 'v2'}
 
# 如:
    # r.hmset('xx', {'k1':'v1', 'k2': 'v2'})
複製代碼

三、hget(name,key)

# 在name對應的hash中獲取根據key獲取value

四、hmget(name, keys, *args)

複製代碼
# 在name對應的hash中獲取多個key的值
 
# 參數:
    # name,reids對應的name
    # keys,要獲取key集合,如:['k1', 'k2', 'k3']
    # *args,要獲取的key,如:k1,k2,k3
 
# 如:
    # r.mget('xx', ['k1', 'k2'])
    #
    # print r.hmget('xx', 'k1', 'k2')
複製代碼

五、hgetall(name)  獲取name對應的hash中的全部鍵值

六、hlen(name)  獲取name對應的hash中鍵值對的個數

七、hkeys(name) 獲取name對應的hash中全部的key的值

八、hvals(name) 獲取name對應的hash中全部的value的值

九、hexists(name, key) 檢查name對應的hash是否存在當前傳入的key

十、hdel(name,*keys)  將name對應的hash中指定key的鍵值對刪除

十一、hincrby(name, key, amount=1)   吧原來的值自加1

       hincrby ('xxx','slex',amount=-1) #吧原來的值自減1

# 自增name對應的hash中的指定key的值,不存在則建立key=amount # 參數:
    # name,redis中的name
    # key, hash對應的key
    # amount,自增數(整數)

十二、hincrbyfloat(name, key, amount=1.0) 支持浮點型的

1三、hscan(name, cursor=0, match=None, count=None)

複製代碼
# 增量式迭代獲取,對於數據大的數據很是有用,hscan能夠實現分片的獲取數據,並不是一次性將數據所有獲取完,從而放置內存被撐爆
 
# 參數:
    # name,redis的name
    # cursor,遊標(基於遊標分批取獲取數據)
    # match,匹配指定key,默認None 表示全部的key
    # count,每次分片最少獲取個數,默認None表示採用Redis的默認分片個數
 
# 如:
    # 第一次:cursor1, data1 = r.hscan('xx', cursor=0, match=None, count=None)
    # 第二次:cursor2, data1 = r.hscan('xx', cursor=cursor1, match=None, count=None)
    # ...
    # 直到返回值cursor的值爲0時,表示數據已經經過分片獲取完畢
複製代碼

1四、hscan_iter(name, match=None, count=None)

複製代碼
# 利用yield封裝hscan建立生成器,實現分批去redis中獲取數據
 
# 參數:
    # match,匹配指定key,默認None 表示全部的key
    # count,每次分片最少獲取個數,默認None表示採用Redis的默認分片個數
 
# 如:
    # for item in r.hscan_iter('xx'):
    # print item
  # for item in r.hscan_iter('xx',match='*lx'):  #匹配以lx結尾的
    #     print item
 
複製代碼

5、redis的集合操做

6、redis的有序集合操做

 參考博客

相關文章
相關標籤/搜索