为什么要使用redis来做缓存呢?
src: https://blog.csdn.net/WYpersist/article/details/80672951
- 缓存分为本地缓存和分布式缓存。以java为例,使用自带的map或者guava实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着jvm的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。
- Redis 可以用几十 G 内存来做缓存,Map 不行,一般 JVM 也就分几个 G 数据就够大了
- Redis 的缓存可以持久化,Map 是内存对象,程序一重启数据就没了
- Redis 可以实现分布式的缓存,Map 只能存在创建它的程序里
- Redis 可以处理每秒百万级的并发,是专业的缓存服务,Map 只是一个普通的对象
- Redis 缓存有过期机制,Map 本身无此功能
- Redis 有丰富的 API,Map 就简单太多了
redis python交互和实际例子
https://www.cnblogs.com/alamZ/p/7207784.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import redis try: r=redis.StrictRedis(host='localhost',port=6379) except Exception,e: print e.message<br> //方式一:根据数据类型的不同,调用相应的方法,完成读写 r.set('name','hello') r.get('name') //方式二:pipline //缓冲多条命令,然后一次性执行,减少服务器-客户端之间TCP数据库包,从而提高效率 pipe = r.pipeline() pipe.set('name', 'world') pipe.get('name') pipe.execute()
|
用户登录
业务过程如下:
- 输入用户名、密码
- 密码加密
- 判断redis中是否记录了用户名,如果有则成功
- 如果redis中没有用户名,则到mysql中查询
- 从mysql中查询成功后,将用户名记录到redis中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| from t2 import RedisHelper from t3 import MysqlHelper import hashlib name=raw_input("请输入用户名:") pwd=raw_input("请输入密码:") sha1=hashlib.sha1() sha1.update(pwd) pwd1=sha1.hexdigest() try: redis=RedisHelper() if redis.get('uname')==name: print 'ok' else: mysql=MysqlHelper('localhost',3306,'test1','root','mysql') upwd=mysql.get_one('select upwd from userinfos where uname=%s',[name]) if upwd==None: print '用户名错误' elif upwd[0]==pwd1: redis.set('uname', name) print '登录成功' else: print "密码错误" except Exception,e: print e.message
|