之前也用過redis.不過只是走馬觀花的了解了一下,能滿足當時的情況需求,但是知識不成體系,看了用了也就忘了, 最近又把redis實戰(zhàn)一書翻了一遍, 知識點又重新撿了起來,這次準備做一次完整的總結。由于時間的關系,我會慢慢的進行不定期的更新。
redis的好處我就不多敘述了,如果沒用過redis ,快速入門的教程在這:http://m.itdecent.cn/p/fc994da72d09
下面上圖,圖中記錄了常用的redis 命令:

完整的命令請自行查閱官網:https://redis.io/commands
python 驅動Redis
小案例
濃縮了redis數據結構中方法的使用。
<pre>
author = 'YuLuo'
import redis
import time
import json
'''定義常量'''
ONE_WEEK_IN_SECONDS = 7 * 86400
VOTE_SCORE = 432
class Redisx(object):
def init(self ,host= '192.168.1.15' ,port = 6379 , db = 0):
self.conn = redis.Redis(host , port , db)
def publish_article(self , user = u'起個名忒難' , title = 'hello redis', link = 'http://www.baidu.com'):
'''
發(fā)布文章
:param user:
:param title:
:param link:
:return:
'''
article_id = str(self.conn.incr('article:id')) #文章id編號
voted = 'voted:'+article_id
self.conn.sadd(voted , user ) #放入已投票集合
self.conn.expire(voted , ONE_WEEK_IN_SECONDS) #設置鍵的過期時間
publie_date = time.time() #文章發(fā)布時間
article = 'article:' + article_id # 文章id
self.conn.hmset(article , { #創(chuàng)建文章信息
'title': title,
'link': link,
'user': user,
'time': publie_date,
'votes': 1
})
self.conn.zadd('score:' , article , ONE_WEEK_IN_SECONDS+VOTE_SCORE) #放入有序表score:
self.conn.zadd('time:' , article , publie_date) #放入以發(fā)布時間作為分數的有序表time:
print('publish article success ')
return article_id
def article_voted(self , user , article_id):
'''
文章投票
:param user:
:param article_id:
:return:
'''
cutoff = time.time() - ONE_WEEK_IN_SECONDS
article = 'article:'+article_id
if self.conn.zscore('time:' ,article) < cutoff : #判斷投票時間是否截至
return
if self.conn.sadd('voted:'+id , user): #判斷用戶是否已經投過票
self.conn.zincrby('score:' , article , VOTE_SCORE) # 增加分值
self.conn.hincrby(article , 'votes' ,1) #文章得票數+1
print('voted success')
def get_artcile(self , article_id):
'''
獲取文章信息
:param article_id:
:return:
'''
article = 'article:'+article_id
article_info = self.conn.hgetall(article)
return article_info #返回文章信息
def article_group(self , id , toadd = [] , toremove = []):
'''
添加文章到分組
:param id:
:param toadd: 分組編號
:param toremove:
:return:
'''
article = 'article:'+id
for group in toadd:
self.conn.sadd('group:'+str(group) , article)
for group in toremove:
self.conn.srem('group:'+str(group) , article)
def get_article_by_group(self ,group):
'''
根據分組獲取文章分組
:param group:
:return:
'''
article_list = self.conn.smembers(group)
articles = []
for article in article_list:
articles.append(self.get_artcile(str(article).split(':')[1]))
return articles #返回文章列表
if name == 'main':
client = Redisx()
id = client.publish_article()
client.article_voted('zhangsan' , id)
artcile = client.get_artcile(id)
print artcile
client.article_group(id , [1 ,3,5])
articles = client.get_article_by_group('group:1')
list_json = json.dumps(articles, ensure_ascii=False)
print list_json
</pre>
其他操作:
flushdb 刪除當前數據庫
flushall 刪除所有數據庫
type key 查看當前鍵的類型
redis-cli , 中文是‘\xx5\xx’類型的編碼,使用redis-cli --raw .換成中文顯示
少年聽雨歌樓上,紅燭昏羅帳。
壯年聽雨客舟中,江闊云低,斷雁叫西風。
感謝支持!
---起個名忒難