1、Redis概念
Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
2、Redis应用案例
1)微博大V的微博数据被存放于高速缓存中,普通人的微博存放于普通NoSQL数据库里
2)门户网站、电商网站、视频网站首页的内容都需要缓存(属于热数据)
3)双十一购物狂欢节,电商平台要利用高速的缓存来弥补数据库吞吐能力不足。订单先被缓存,然后负载低谷期,再写入数据库
4)电商平台秒杀/抢购业务需要用高速缓存来实现顺序操作-(解决支付的时候才提醒库存不足的问题)(单线程-栈队)
5)可以存放短时间内的数据(如验证码)
3、Redis的目录结构

为了防止意外宕机丢失数据,Redis提供了两种持久化的方式
4、Redis常用的数据结构
1)字符串类型
2)Redis哈希类型
-
-
哈希指令:
-
hset:设置哈希表字段 -》eg:hset 1001 username Tom
-
hmset:设置哈希表多个字段 -》eg:hmset 1001 username Tom job salse
-
hget:获取哈希表字段值 -》eg:hget 1001 username
-
hmget:获取多个哈希表字段的值 -》eg:hmget 1001 username job
-
hgetall:获取所有哈希表字段值 -》eg:hgetall 1001
-
hkeys:获取所有哈希表字段名 -》eg:hkeys 1001
-
hlen:获取哈希表中的字段数量 -》eg:hlen 1001
-
hexists:判断哈希表是否存在某个字段 -》eg:hexists 1001 job
-
hvals:获取哈希表的所有字段值 -》eg:hvals 1001
-
hdel:删除哈希表的字段 -》eg:hdel 1001 username job
-
hincrby:让哈希表某个字段值加上指定的整数值 -》eg:hincrby 1001 age 10【-10】
-
hincrbyfloat:让哈希表某个字段值加上指定的浮点数 -》eg:hincrbyfloat 1001 price 3.5
3)Redis列表类型
4)Redis集合类型
5)Redis有序集合
5、Redis常用命令
-
key命令
-
del:删除记录 -》eg:del keyword
-
exists:判断是否存在某个key -》eg:exists employee
-
exipire:设置记录过期时间 -》eg:expire employee 5(秒)
-
expireat:设置记录的过期时间(unix时间戳)-》eg:expireat employee 1544803200
-
rename:修改key名称 -》eg:rename employee emp
-
persist:移除过期时间 -》eg:persist employee
-
type:判断value的数据类型 -》eg:type employee
相关Redis命令可查看官方文档:http://doc.redisfans.com/index.html
6、Redis与Python交互
1)安装
在命令行安装即可:pip install redis
2)连接
- import redis
- r = redis.Redis(
- host="localhost",
- port=6379,
- password="",
- db=0
- )
3)操作指令
上面提到的5种数据结构,在redis中很相似的,在python中也一样,这里仅介绍几种
a、设置和获取
- r.set("country","英国")
- r.set("city","伦敦")
- city = r.get("city").decode("utf-8")
- print(city)
b、设置多个变量和删除
- r.delete("country","city")
- r.mset({"country":"德国","city":"柏林"})
- result = r.mget("country","city")
- for one in result:
- print(one.decode("utf-8"))
c、列表增加和删除
- r.rpush("dname","董事会","秘书处","财务部","技术部")
- r.lpop("dname")
- result = r.lrange("dname",0,-1)
- for one in result:
- print(one.decode("utf-8"))
d、集合增加和删除
- r.sadd("employee",8000,8001,8002)
- r.srem("employee",8001)
- result = r.smembers("employee")
- r.zadd("keyword",{"马云":0,"邓磊":0,"张朝阳":0})
- r.zincrby("keyword","10","马云")
- result = r.zrevrange("keyword",0,-1)
e、哈希增加和删除
- try:
- r.hmset("9527",{"name":"charisse","age":"18","sec":"male"})
- r.hset("9527","city","北京")
- r.hdel("9527","age")
- r.hexists("9527","name")
- result = r.hgetall("9527")# 字典
- for one in result:
- print(one.decode("utf-8"),result[one].decode("utf-8"))
- except Exception as e:
- print(e)
- finally:
- del r