控制朋友圈好友状态可见性(Python+redis实现)

来源:互联网 发布:高胜算交易策略 知乎 编辑:程序博客网 时间:2024/05/16 14:34

将数据存入redis中

import redistry:    rconn=redis.StrictRedis(host='127.0.0.1',\        port=6379,db =0)    # message added (hash)    rconn.hset('message:1000', 'uid', '100')    rconn.hset('message:1000', 'message', 'hello, I am a good man!')    rconn.hmset('message:1001', {'uid': '104', 'message': 'welcome to handong province!'})    # user added (string)    rconn.set('user:100', 'GaoYuliang')    rconn.set('user:101', 'GaoXiaoqin')    rconn.set('user:102', 'QiTongwei')    rconn.set('user:103', 'LiDakang')    rconn.set('uesr:104', 'HouLiangping')    # friends added (set)    rconn.sadd('friends:100', "101")    rconn.sadd('friends:100', "102")    rconn.sadd('friends:100', "103")    rconn.sadd('friends:100', "100")    rconn.sadd('friends:101', '100')    rconn.sadd('friends:101', '102')    rconn.sadd('friends:101', '101')    rconn.sadd('friends:102', '100')    rconn.sadd('friends:102', '101')    rconn.sadd('friends:102', '104')    rconn.sadd('friends:102', '102')    rconn.sadd('friends:103', '100')    rconn.sadd('friends:103', '104')    rconn.sadd('friends:103', '103')    rconn.sadd('friends:104', '102')    rconn.sadd('friends:104', '103')    rconn.sadd('friends:104', '104')    # like added (set)    rconn.sadd('like:1000', "101")    rconn.sadd('like:1000', "102")    rconn.sadd('like:1000', "103")    rconn.sadd('like:1001', "103")except Exception, e:    print e

业务逻辑实现

import redistry:    rconn=redis.StrictRedis(host='127.0.0.1',\        port=6379,db =0)    openlist = []    loginuser = 103    for personid in range(100, 105):  # get all the people open to me        keyname = "friends:" + str(personid)        #print rconn.sismember(keyname, loginuser)        if rconn.sismember(keyname, loginuser):            openlist.append(personid)    # get all the message which belongs to the people in the openlist    for messid in range(1000, 1002):        keyname = "message:" + str(messid)        uid = rconn.hget(keyname, "uid")        if int(uid) in openlist:            msbody = rconn.hget(keyname, "message")            like_keyname = "like:" + str(messid) # like people set            print rconn.get("user:" + uid) + ": " + msbody            for person in rconn.smembers(like_keyname):                if int(person) in openlist:                                        print rconn.get("user:" + person) + " like this"except Exception, e:    print e

一点体会

redis将数据以键值对的方式存储。与mysql相比,将不同表之间的关系同样离散为特定的键值对。
redis可以通过将id等信息整合进键名中进行唯一标识。
使用mysql时,我们用到了多表连接查询,在redis中是如何实现的呢?
答案是redis的键名中包含着id信息,利用循环可以实现对一定范围内的键名遍历。而在关系型数据库中,各种id正是进行表连接的桥梁。
同时有效利用redis的set、hash等数据结构,能简化这一过程。

0 0
原创粉丝点击