日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redis之五大数据类型

發布時間:2024/4/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis之五大数据类型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

redis之五大數據類型

redis的兩種鏈接方式

簡單鏈接

1
2
3
4
import redis
conn = redis.Redis(host='10.0.0.200',port=6379)
conn.set('k1','value')
print(conn.get('k1'))

連接池

如果要鏈接redis的時候推薦用連接池的方式;如果每次操作都用同一個鏈接,可以使用連接池

redis使用connection_poll來管理對一個redis服務的所有鏈接,避免每次建立,釋放鏈接的開銷
默認每個redis實例都會維護一個自己的鏈接池。可以直接建立一個連接池,然后作為參數redis,這樣
就可以實現多個redis實例共享一個連接池

1
2
3
4
5
6
7
#連接池
import redis
pool = redis.ConnectionPool(host='10.0.0.200',port=6379)
conn = redis.Redis(connection_pool=pool)

conn.set('a','python')
print(conn.get('a'))

例子

pool.py

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

view.py

1
2
3
4
5
6
7
8
9
10
11
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

配置文件

1
2
3
4
5
6
7
8
9
10
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://10.0.0.200:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
#"PASSWORD": "123456",
}
}
}

使用

1
2
3
4
5
6
7
8
#利用django-redis組件進行連接
from django.core.cache import caches
import os
import django_redis
os.environ['DJANGO_SETTINGS_MODULE'] = 'redis_use.settings'

conn = django_redis.get_redis_connection()
conn.set('b','666')

redis的字符串操作(string)

Sting操作,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不存在時,執行設置操作(添加) #相當于只是添加,不能進行修改操作

3、setex(name, value, time)

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

4、psetex(name, time_ms, value)

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

5、mset(*args, **kwargs)

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

6、get(name) 獲取值

7、mget(keys, *args)

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

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

9、getrange(key, start, end)

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

待續。。

redis的列表操作(list)

redis的散列表操作(類似于字典里面嵌套字典)

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

1、hset(name, key, value)

# name對應的hash中設置一個鍵值對(不存在,則創建;否則,修改)# 參數:# name,redis的name# key,name對應的hash中的key# value,name對應的hash中的value# 注:# hsetnx(name, key, value),當name對應的hash中不存在當前key時則創建(相當于添加)

2、hmset(name, mapping)

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

3、hget(name,key)

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

4、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')

5、hgetall(name) 獲取name對應的hash中的所有鍵值

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

7、hkeys(name) 獲取name對應的hash中所有的key的值

8、hvals(name) 獲取name對應的hash中所有的value的值

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

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

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

hincrby ('xxx','slex',amount=-1) #吧原來的值自減1# 自增name對應的hash中的指定key的值,不存在則創建key=amount # 參數:# name,redis中的name# key, hash對應的key# amount,自增數(整數)

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

13、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時,表示數據已經通過分片獲取完畢

14、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

redis的集合操作(set)

redis的有序集合操作(zset)

轉載于:https://www.cnblogs.com/xiao-xue-di/p/9602839.html

總結

以上是生活随笔為你收集整理的redis之五大数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。