Redis入门-基础键值对、list、set、hashlist基础操作
關于Redis
Redis是非關系型數據庫(NoSQL)的一種,區別于關系型數據庫。其內部數據間相互獨立,性能表現優秀。即使是在大量數據下性能也很好,這都得益于其數據結構簡單,數據間相互獨立的特性。而這些特性都是關系型數據庫所望塵莫及的。
主流的NoSQL產品
NoSQL數據庫的四大分類
- 鍵值對(Key-Value)存儲:Redis
優:快速查詢
劣:存儲的數據缺少結構化 - 列存儲:HBase
優:快速查詢、擴展性強
劣:功能相對局限 - 文檔數據庫:MongoDB
優:數據結構要求不是很嚴格
劣:查詢性能不高、缺少統一的查詢語法 - 圖形數據庫:InfoGrid
優:利用圖結構相關算法
劣:需要對整個圖做計算才能得出結果、不容易做分布式集群方案
NoSQL的特點
易擴展
靈活的數據模型
大數據量、高性能
高可用
Redis的概述
Redis是高性能鍵值對數據庫,支持的鍵值數據類型有:
字符串類型
列表類型
有序集合類型
散列類型
集合類型
Redis的應用場景
緩存
任務隊列
網站訪問統計
數據過期處理
應用排行榜
分布式集群架構中的session分離
Redis使用方法
1. 字符串類型
""" set --設置值,返回True 或者False get --獲取值 mset --設置多個鍵值對,返回True 或者False mget --獲取多個鍵值對 append --添加字符串 del --刪除,返回刪除成功的數據數量 incr/decr -- 增加/減少 1 """ #!/usr/bin/env python #-*- coding:utf-8 -*- import redis #python 操作str class TestString(object):def __init__(self):self.r = redis.StrictRedis(host='localhost', port=6379, db=0)def test_set(self):rest = self.r.set('user2', 'Amy')print ( rest) # 輸出 Truereturn restdef test_get(self):rest = self.r.get('user2')print (rest) # 輸出 Amyreturn restdef test_mset(self):"""mset --設置多個鍵值對:return:"""d = {'user1': 'XH','user3': 'Bob','user4': 'Bobx'}rest = self.r.mset(d)print (rest) # 輸出 Truereturn restdef test_mget(self):"""mget --獲取多個鍵值對:return:"""l = ['user1','user2','user3','user4','user6']rest = self.r.mget(l)print (rset) # 輸出[ b'XH', b'Amy', b'Bob', b'Bobx', None]return restdef test_del(self):"""del 刪除:return:"""rest = self.r.delete('user1')print (rest) #輸出1 return restdef main():str_obj = TestString()str_obj.test_set()str_obj.test_get()str_obj.test_mset()str_obj.test_mget()str_obj.test_del()if __name__ == '__main__':main()2. 列表
class TestList(object):"""lpush/rpush --從左/右插入數據,返回插入成功的數據下標,列表的每個數據格式可以不一樣,每push一次下標加1["1",""2,3,4",("safa"),{"name":"yangxiaoru"}]lrange(開始下標,結束下標) -- 獲取指定長度的數據,獲取完了之后列表中還有數據ltrim -- 截取一定長度的數據lpop/rpop -- 移除最左/右的元素并返回lpushx/rpushx -- key存在的時候才插入數據,不存在不做任何處理"""def __init__(self):self.r = redis.StrictRedis(host='localhost', port=6379, db=0)def test_push(self):"""lpush/rpush --從左/右插入數據lrange -- 獲取指定長度的數據:return:"""t = ('Amy', 'Jhon')reset = self.r.lpush('l_eat2', *t)print (reset) #輸出2(2是起始下標)reset = self.r.lrange('l_eat2', 0, -1) #獲取第一位到倒數第一位直接的數據(左右閉區間)print (reset) #輸出 [b'Jhon', b'Amy'],左邊插入,左邊取出,所以倒序了def test_pop(self):"""lpop/rpop -- 移除最左/右的元素并返回:return:"""rest = self.r.lpop('l_eat2') #從左邊彈出一個數據print (rest) #輸出 b'Jhon'reset = self.r.lrange('l_eat2', 0, -1)print (reset) # 輸出 [b'Amy']def main():# listlist_obj = TestList()list_obj.test_push()list_obj.test_pop()if __name__ == '__main__':main()注意事項
舉個栗子:當前有名字叫my_list的Redis列表如下:[0,1,2,3,4,5]
1、lrange(start,end),下標可以正向取,也可以負向取。但是參數中必須是start<=end。
lrange(2,2) #返回2
lrange(-4,-4) #返回2
lrange(1,2) #返回1,2
lrange(2,-2) #返回2,3,4
lrange(-3,-2) #返回3,4
以下方式都是取不到數據的:
lrange(2,1) #返回空
lrange(-2,-3) #返回空
2、Redis的列表下標溢出之后不會報錯,她只取盡量多的數據即可
redis.lrange(6,7) #需要取下標為6和7的數據 ,結果返回空。
redis.lrange(5,7) #需要取下標為5,6,7的數據 ,結果返回[5]
3. 集合
class TestSet(Base):"""sadd/srem --添加/刪除元素sismember --判斷是否為set的一個元素smembers --返回該集合的所有成員sdiff --返回一個集合與其他集合的差異sinter --返回幾個集合的交集sunion --返回幾個集合的并集"""def __init__(self):self.r = redis.StrictRedis(host='172.17.20.144', port=6379, db=0)def test_sadd(self):"""sadd/srem --添加/刪除元素:return:"""l = ['Cats', 'Dogs']rest = self.r.sadd('zoo3', *l) print (rest) #輸出2rest = self.r.smembers('zoo3') print (rest) #輸出 {b'Dogs', b'Cats'}def test_srem(self):"""sadd/srem --添加/刪除元素:return:"""rest = self.r.srem('zoo2','Dogs') #沒有名字為“zoo2”的集合print (rest) #輸出0rest = self.r.smembers('zoo2')print (rest) #輸出 set(),即空集合def test_sinter(self):"""sinter --返回幾個集合對象的交集sunion --返回幾個集合對象的并集:return:"""rest = self.r.sunion('zoo2', 'zoo3')print (rest) #輸出 {b'Dogs', b'Cats'}rest = self.r.sinter('zoo2','zoo3')print (rest) #輸出set(),即空集合def main():test_obj = TestSet()test_obj.test_sadd()test_obj.test_srem()test_obj.test_sinter()if __name__ == '__main__':main()4. 散列
class TestHash(Base):"""hset/hget --設置/獲取散列值hmset/hmget --設置/獲取多對散列值hsetnx --如果散列已經存在,則不設置hkeys/hvals --返回所有Keys/Valueshlen -- 返回散列包含域"""def test_set(self):"""hset/hget --設置/獲取散列值:return:"""reset = self.r.hset('stu:xxx01','name','Amy')print (reset) #輸出1,再次執行的話輸出0reset = self.r.hexists('stu:xxx01','name')print (reset) #輸出Truereset = self.r.hget('stu:xxx01','name')print (reset)#輸出 b'Amy'def test_mset(self):"""hmset/hmget --設置/獲取多對散列值:return:"""m = {'name':'Bob','age':21,'grade':98}rest = self.r.hmset('stu:xxx03',m)print (rest) #輸出truerest = self.r.hkeys('stu:xxx03')print (rest) #輸出 [b'name', b'age', b'grade']def main():hash_obj = TestHash()hash_obj.test_set()hash_obj.test_mset()if __name__ == '__main__':main()總結
以上是生活随笔為你收集整理的Redis入门-基础键值对、list、set、hashlist基础操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教学管理系统用况
- 下一篇: CAD日照分析教程:CAD软件中地理位置