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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Redis数据操作和与Python交互

發布時間:2024/4/11 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis数据操作和与Python交互 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Redis數據操作和與Python交互

文章目錄

  • Redis數據操作和與Python交互
    • 一、數據結構
      • 1.String 字符串類型
      • 2.Hash (哈希)
      • 3.列表
      • 4.Set 集合
      • 5.zset 有序集合
      • 6.鍵命令
    • 二、Redis與Python交互
      • 1.虛擬環境中安裝redis
      • 2.調?模塊
      • 3.StrictRedis對象?法
      • 4.django存儲session

一、數據結構

  • redis是key-value的數據結構,每條數據都是?個鍵值對
  • 鍵的類型是字符串

注意:鍵不能重復

  • 值的類型分為五種:
  • 字符串string
  • 哈希hash
  • 列表list
  • 集合set
  • 有序集合zset
  • 數據操作行為
  • 保存
  • 修改
  • 獲取
  • 刪除

1.String 字符串類型

  • 是redis中最基本的數據類型,一個key對應一個value。
  • String類型是二進制安全的,意思是 redis 的 string可以包含任何數據。如數字,字符串,jpg圖片或者序列化的對象。

string類型:主要存儲字符串

操作命令
設置鍵值set key value
設置鍵值與過期時間setex key seconds(單位為秒) value
設置多個鍵met key1 value1 key2 value2 …
追加值append key value
獲取值get key
獲取多個 鍵的值mget key1 key2 …
使用:get 、 setdel 、 incr、 decr 等 127.0.0.1:6379> set hello world OK 127.0.0.1:6379> get hello "world" 127.0.0.1:6379> del hello (integer) 1 127.0.0.1:6379> get hello (nil) 127.0.0.1:6379> get counter "2" 127.0.0.1:6379> incr counter (integer) 3 127.0.0.1:6379> get counter "3" 127.0.0.1:6379> incrby counter 100 (integer) 103 127.0.0.1:6379> get counter "103" 127.0.0.1:6379> decr counter (integer) 102 127.0.0.1:6379> get counter "102"
  • 實戰場景:
  • 1.緩存: 經典使用場景,把常用信息,字符串,圖片或者視頻等信息放到redis中,redis作為緩存層,mysql做持久化層,降低mysql的讀寫壓力。
  • 2**.計數器:redis是單線程模型,一個命令執行完才會執行下一個,同時數據可以一步落地到其他的數據源。**
  • 3.session:常見方案spring session + redis實現session共享,

2.Hash (哈希)

  • 是一個Mapmap,指值本身又是一種鍵值對結構

hash類型:主要用于存儲對象,對象的結構為屬性和值

操作命令
設置單個屬性hset key field value (例:hset user name xiaoming)
設置多個屬性hmset key fiel1 value1 field2 value2…
獲取指定鍵所有屬性hkeys key
獲取一個屬性的值hget key field
獲取多個屬性的值hmget key field1 field2…
獲取所有屬性的值hvals key
刪除屬性hdel key field1 field2…
如 value={{field1,value1},......fieldN,valueN}}

使用:所有hash的命令都是 h 開頭的 hget 、hset 、 hdel 等

127.0.0.1:6379> hset user name1 hao (integer) 1 127.0.0.1:6379> hset user email1 hao@163.com (integer) 1 127.0.0.1:6379> hgetall user 1) "name1" 2) "hao" 3) "email1" 4) "hao@163.com" 127.0.0.1:6379> hget user user (nil) 127.0.0.1:6379> hget user name1 "hao" 127.0.0.1:6379> hset user name2 xiaohao (integer) 1 127.0.0.1:6379> hset user email2 xiaohao@163.com (integer) 1 127.0.0.1:6379> hgetall user 1) "name1" 2) "hao" 3) "email1" 4) "hao@163.com" 5) "name2" 6) "xiaohao" 7) "email2" 8) "xiaohao@163.com"
  • 實戰場景:
  • 1.緩存: 能直觀,相比string更節省空間,的維護緩存信息,如用戶信息,視頻信息等。

3.列表

  • List 說白了就是鏈表(redis 使用雙端鏈表實現的List),是有序的,value可以重復,可以通過下標取出對應的value值,左右兩邊都能進行插入和刪除數據。

使用列表的技巧

lpush+lpop=Stack(棧)
lpush+rpop=Queue(隊列)
lpush+ltrim=Capped Collection(有限集合)
lpush+brpop=Message Queue(消息隊列)

list類型:存儲列表

操作命令
在左側插入數據lpush key value1 value2…
在右側插入數據rpush key value1 value2…
在指定元素前插入linsert key before 元素 插入元素
在指定元素后插入linsert key after 元素 插入元素
獲取指定范圍值lrange key start stop(支持負索引)
設置指定索引位置的值(修改)lset key index value
刪除指定元素lrem key count value (count>0表示從頭到尾刪除的次數,count=0刪除所有,count<0表示從尾到頭刪除的次數)
  • 使用:
127.0.0.1:6379> lpush mylist 1 2 ll ls mem (integer) 5 127.0.0.1:6379> lrange mylist 0 -1 1) "mem" 2) "ls" 3) "ll" 4) "2" 5) "1" 127.0.0.1:6379>
  • 實戰場景:
  • 1.timeline:例如微博的時間軸,有人發布微博,用lpush加入時間軸,展示新的列表信息。

4.Set 集合

  • 集合類型也是用來保存多個字符串的元素
  • 但和列表不同的是:
  • 集合中 1. 不允許有重復的元素,2.集合中的元素是無序的,不能通過索引下標獲取元素,3.支持集合間的操作,可以取多個集合取交集、并集、差集。

    使用:命令都是以s開頭的 sset 、srem、scard、smembers、sismember
    set類型:存儲無序集合
操作命令
添加元素sadd key member1 member2…
獲取所有元素smembers key
刪除指定元素srem key
127.0.0.1:6379> sadd myset hao hao1 xiaohao hao (integer) 3 127.0.0.1:6379> SMEMBERS myset 1) "xiaohao" 2) "hao1" 3) "hao" 127.0.0.1:6379> SISMEMBER myset hao (integer) 1
  • 實戰場景;
  • 1.標簽(tag),給用戶添加標簽,或者用戶給消息添加標簽,這樣有同一標簽或者類似標簽的可以給推薦關注的事或者關注的人。
  • 2.點贊,或點踩,收藏等,可以放到set中實現

5.zset 有序集合

  • 有序集合和集合有著必然的聯系,保留了集合不能有重復成員的特性
  • 區別是,有序集合中的元素是可以排序的,它給每個元素設置一個分數,作為排序的依據。(有序集合中的元素不可以重復,但是score 分數 可以重復,就和一個班里的同學學號不能重復,但考試成績可以相同)。


使用: 有序集合的命令都是 以 z 開頭 zadd 、 zrange、 zscore
zset類型:有序集合,每個元素關聯一個double類型的score,表示權重,按權重排序

操作命令
添加元素zadd key score1 member1 score2 memeber2…
返回指定范圍元素zrange key start stop
返回指定范圍權重的元素zrangebyscore key min max
返回指定成員的權重zscore key member
刪除指定元素zrem key member1 member2…
刪除指定權重范圍元素zrembyscore key min max
127.0.0.1:6379> zadd myscoreset 100 hao 90 xiaohao (integer) 2 127.0.0.1:6379> ZRANGE myscoreset 0 -1 1) "xiaohao" 2) "hao" 127.0.0.1:6379> ZSCORE myscoreset hao "100"
  • 實戰場景:
  • 排行榜:有序集合經典使用場景。例如小說視頻等網站需要對用戶上傳的小說視頻做排行榜,榜單可以按照用戶關注數,更新時間,字數等打分,做排行。

6.鍵命令

操作命令
查找鍵(參數支持正則)keys pattern(keys 查看所有鍵,keys a查找a開頭的鍵)
判斷鍵是否存在exists key(存在返回1,不存在返回0)
查看鍵的類型type key
刪除鍵及對應的值del key1 key2…
設置鍵的過期時間expire key seconds
查看鍵的有效時間ttl key

官方操作詳解

二、Redis與Python交互

1.虛擬環境中安裝redis

  • 安裝包

安裝Redis的有3種方式https://github.com/andymccurdy/redis-py

  • 第一種:進?虛擬環境py_django,聯?安裝包redis
pip install redis
  • 第二種:進?虛擬環境py_django,聯?安裝包redis
easy_install redis
  • 第三種:到中?官?-客戶端下載redis包的源碼,使?源碼安裝
一步步執行 wget https://github.com/andymccurdy/redis-py/archive/master.zipunzip master.zipcd redis-py-mastersudo python setup.py install

2.調?模塊

引?模塊 from redis import *

這個模塊中提供了StrictRedis對象(Strict嚴格),?于連接redis服務器,并按照不同類型提供 了不同?法,進?交互操作

3.StrictRedis對象?法

  • 通過init創建對象,指定參數host、port與指定的服務器和端?連接,host默認為localhost,port默認為6379,db默認為0
sr = StrictRedis(host='localhost', port=6379, db=0)

簡寫

sr=StrictRedis()
  • 根據不同的類型,擁有不同的實例?法可以調?,與前?學的redis命令對應,?法需要的參數與命令的參數?致
  • 例:

準備:
在桌面上創建redis目錄
使用pycharm打開 redis目錄
創建redis_string.py文件

from redis import * if __name__=="__main__":try:#創建StrictRedis對象,與redis服務器建?連接sr=StrictRedis()except Exception as e:print(e)
  • string-增加

?法set,添加鍵、值,如果添加成功則返回True,如果添加失敗則返回False
編寫代碼如下

from redis import * if __name__=="__main__":try:#創建StrictRedis對象,與redis服務器建?連接sr=StrictRedis()#添加鍵name,值為itheimaresult=sr.set('name','itheima')#輸出響應結果,如果添加成功則返回True,否則返回Falseprint(result)except Exception as e:print(e)
  • string-獲取

?法get,添加鍵對應的值,如果鍵存在則返回對應的值,如果鍵不存在則返回None
編寫代碼如下

from redis import * if __name__=="__main__":try:#創建StrictRedis對象,與redis服務器建?連接sr=StrictRedis()#獲取鍵name的值result = sr.get('name')#輸出鍵的值,如果鍵不存在則返回Noneprint(result)except Exception as e:print(e)
  • string-修改

?法set,如果鍵已經存在則進?修改,如果鍵不存在則進?添加
編寫代碼如下

from redis import * if __name__=="__main__":try:#創建StrictRedis對象,與redis服務器建?連接sr=StrictRedis()#設置鍵name的值,如果鍵已經存在則進?修改,如果鍵不存在則進?添加result = sr.set('name','itcast')#輸出響應結果,如果操作成功則返回True,否則返回Falseprint(result)except Exception as e:print(e)
  • string-刪除

?法delete,刪除鍵及對應的值,如果刪除成功則返回受影響的鍵數,否則則返 回0

編寫代碼如下 from redis import * if __name__=="__main__":try:#創建StrictRedis對象,與redis服務器建?連接sr=StrictRedis()#設置鍵name的值,如果鍵已經存在則進?修改,如果鍵不存在則進?添加result = sr.delete('name')#輸出響應結果,如果刪除成功則返回受影響的鍵數,否則則返回0print(result)except Exception as e:print(e)
  • 獲取鍵

?法keys,根據正則表達式獲取鍵
編寫代碼如下

from redis import * if __name__=="__main__":try:#創建StrictRedis對象,與redis服務器建?連接sr=StrictRedis()#獲取所有的鍵result=sr.keys()#輸出響應結果,所有的鍵構成?個列表,如果沒有鍵則返回空列表print(result)except Exception as e:print(e)

操作方法基本與redis數據庫操作一樣

4.django存儲session

  • session的redis存儲配置
安裝包pip install django-redis-sessions==0.5.6

  • 修改settings文件,增加如下項
SESSION_ENGINE = 'redis_sessions.session' SESSION_REDIS_HOST = 'localhost' SESSION_REDIS_PORT = 6379 SESSION_REDIS_DB = 2 SESSION_REDIS_PASSWORD = '' SESSION_REDIS_PREFIX = 'session'
  • 測試
    打開booktest/views.py文件,創建session_set和session_get視圖如下
def session_set(request):request.session['name']='itheima'return HttpResponse('ok')def session_get(request):name=request.session['name']return HttpResponse(name)
  • 打開booktest/urls.py文件,配置url如下
url(r'^session_set/$',views.session_set),url(r'^session_get/$', views.session_get),
  • 通過redis-cli客戶端查看

    Base64在線解碼http://base64.xpcha.com/

總結

以上是生活随笔為你收集整理的Redis数据操作和与Python交互的全部內容,希望文章能夠幫你解決所遇到的問題。

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