Introduction to Redis

为什么要使用redis来做缓存呢?

src: https://blog.csdn.net/WYpersist/article/details/80672951

  1. 缓存分为本地缓存和分布式缓存。以java为例,使用自带的map或者guava实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着jvm的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。
  2. Redis 可以用几十 G 内存来做缓存,Map 不行,一般 JVM 也就分几个 G 数据就够大了
  3. Redis 的缓存可以持久化,Map 是内存对象,程序一重启数据就没了
  4. Redis 可以实现分布式的缓存,Map 只能存在创建它的程序里
  5. Redis 可以处理每秒百万级的并发,是专业的缓存服务,Map 只是一个普通的对象
  6. Redis 缓存有过期机制,Map 本身无此功能
  7. 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
#encoding=utf-8
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
Donate article here