Redis用户登录场景
来源:互联网 发布:苹果免费打电话软件 编辑:程序博客网 时间:2024/05/16 19:22
Redis用户登录场景
转载自浅谈Redis数据库的键值设计
关系型数据库表设计
首先我们设计用户登录信息的关系型数据库表,将表简化为下面的几个字段
- user_id PK
- name
- login_times
- last_login
每次登陆后,login_times增加一次, last_login更新为当前时间。
Redis设计
首先我们用两组String来存放用登录次数和最后登录时间
登录次数
#pythonimport redisrConn = redis.Redis(host='localhost', port=6379)pipe = rConn.pipeline()for x in xrange(5): times = random.randint(0, 10) pipe.set('user:%d:login_times'%x, times)pipe.execute()
这段生成5个String, key为user:id:login_times
,其中id的值为0-4,value为0到10之间的随机数。
最后登录时间
#pythonimport redisimport randomimport timeif __name__ == '__main__': rConn = redis.Redis(host='192.168.111.131', port=6379) pipe = rConn.pipeline() for x in xrange(5): pipe.set('user:%d:last_login_times'%x, time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime())) pipe.execute()
同上一段代码一样,生成5个keyuser:id:last_login_times
, value为%Y-%m-%d %H:%M:%S
格式的时间字符串。
ID查找用户名
import redisimport randomif __name__ == '__main__': rConn = redis.Redis(host='192.168.111.131', port=6379) pipe = rConn.pipeline() for x in xrange(5): pipe.set('user:%d:name'%x, 'name_%d'%x) pipe.execute()
生成5个keyuser:id:name
, value为name_id
的名字。
用户名查找ID
用户登录,我们需要用户输入用户名,根据用户查找相应id,然后根据id查找相应的登录信息。所以,我们还需要一个name:id的映射。
import redis
import random
if __name__ == '__main__': rConn = redis.Redis(host='192.168.111.131', port=6379) pipe = rConn.pipeline() keys = [] for x in xrange(5): name = 'name_%s'%x pipe.set('user:%s:id'%name, x) keys.append('user:%s:id'%name) pipe.execute()
这样用户登录信息准备工作完成。下面模拟用户登录操作。
#pythonimport redisimport randomimport time if __name__ == '__main__': rConn = redis.Redis(host='192.168.111.131', port=6379) id = rConn.get('user:%s:id'%(username)) loginTimesKey = 'user:%d:login_times'%(id) #登录次数+1 rConn.incr(loginTimesKey) #修改最后登录时间 rConn.set(lastLogTimeKey, time.strftime('%Y-%m-%d %H:%M:%s'), time.gmtime())
假设系统中查看最新登录的N个用户的需求,我们可以使用Redis的List来实现这个功能。
#python#添加当前用户rConn.lpush('user:lastlogin', uid)#保持当前列表只要N个rConn.ltrime('user:lastlogin', 0, N-1)#获取最新登录的N个用户last_login_lst = rConn.lrange('user:lastlogin', 0, N -1)
另外Redis中的ZSET非常适用于类似统计登录次数最多用户的需求。
#pythonrConn.zadd('user:logintimes', 5, uid1)rConn.zadd('user:logintimes', 10, uid2)rConn.zadd('user:logintimes', 3, uid3)
当用户登录时,我们需要对这个sorted set中相应的menber自增1。
#pythonrConn.zincr('user:logintimes', 1, uid1)
获取登录次数最多的N个用户
#pythonrConn.zrevrange('user:logintimes', 0, N-1)
获取登录次数最多的N个用户,及登录次数
#pythonrConn.zrevrange('user:logintimes', 0, N-1, withscores=True)
0 0
- Redis用户登录场景
- 用redis实现用户登录计数
- redis实现网站最新登录用户功能
- 用redis实现用户登录计数
- 使用redis管理用户登录会话
- Swing代码分析(实践场景-用户登录)
- 登录场景
- Redis缓存Mysql模拟用户登录Java实现实例
- Redis缓存Mysql模拟用户登录Java实现实例
- 数据库实例:mysql与redis结合用户登录
- C语言 编写代码实现,模拟用户登录场景 ( for循环,if语句的使用)
- 利用Redis实现亿级别用户登录统计(活跃度以及登录次数统计)
- 利用Redis实现亿级别用户登录统计(活跃度以及登录次数统计)
- redis脚本:查看近一小时内有哪些用户登录过redis
- Redis:九、redis使用场景
- Redis:九、redis使用场景
- redis--3--Redis应用场景
- Redis应用场景 redis精髓
- 测测
- 嵌入式Linux学习-----u-boot移植
- CartoCSS Filters过滤器基本语法
- 在Apache+mod_wsgi+python的基础上搭建https安全访问
- iOS_字符串显示不同颜色
- Redis用户登录场景
- Python编程(二):Python进程、线程的那点事儿
- Http协议概述
- 行为型:设计模式之访问者模式(二十三)
- 用流域和最佳的阈值进行慢性淋巴细胞性白血病细胞分割
- 工厂设计模式
- 嵌入式Linux学习-------Linux内核移植
- linux通过远程桌面访问windows
- Apache配置http访问转https