一、python要操做redis 首先须要安装redis模块,而后导入才能使用python
安装:pip install redismysql
导入:import redisredis
二、链接redissql
r = redis.Redis(host='192.168.21.129',password='123456',db=1,port=6379)数据库
password在配置文件redis.conf中查看,port通常是6379,db可根据须要操做的数据库进行选择json
三、redis的增删改查session
redis中key所存储的值类型有多种,主要说明string类型和hash类型。用命令 redis 127.0.0.1:6379> TYPE KEY_NAME可查看值的存储类型。 测试
如下是针对string类型的操做 r.set('user3','e10adc3949ba59abbe56e057f20f883e')#数据库里面新增一个值,修改也是set r.setex('user1','e10adc3949ba59abbe56e057f20f883e',300)#数据库里新增一个值,而且设置key的失效时间,最后这个参数是秒 r.set('session:user1',{"seessionid":"a5dfcb047721e02a6f8bff779c856165","login_time":"201805081820"})#新增值,值都在一个session文件夹里面存储 print(r.get('user1'))#获取对应key的值,返回的类型是byte类型,须要解码 print(r.get('user1').decode())#获取到的value值解码 print(r.get('session:user1').decode()) print(r.keys())#获取全部的key,存在一个list里面,元素是byte类型,如:[b'user3', b'user1', b'session:user1'] #获取全部的key,而且解码输出 list = [k.decode() for k in r.keys()] print(list) #输出如:['user3', 'user1', 'session:user1'] r.delete('user3')#删除指定的key #删除全部的key须要循环 for k in r.keys(): r.delete(k)
如下是哈希类型 hash操做,嵌套字典 r.hset('info','张三','北京,本科,测试工程师')#hash类型存储方式会有两个key,大key(info)和小key(张三),但没法设置小key的失效时间 r.hset('info','李四','湖北,博士,Boss') r.hset('info','王五','江西,博士,CEO') r.hset('login_mll','test1','{"seessionid":a5dfcb047721e02a6f8bff779c815165,"login_time":201805051820}') print(r.hget('info','张三').decode()) #指定大key和小key获取对应的数据 print(r.hgetall('info')) #获取里面全部的k和-v,全部的K,V存储在字典里,可是是byte类型 # 获取里面全部的k和-v,全部的K,V存储在字典里,而且解码输出 info = r.hgetall('info') new_info = {} for k,v in info.items(): new_info[k.decode()] = v.decode() print(new_info) r.hdel('info','张三') #删除指定key r.delete('info') #删除整个key r.expire('info',100) #第一个key设置失效时间,没法设置小key的失效时间 print(r.ttl('info'))#获取key的失效时间 print(r.type('info')) #查看key是什么类型的
小练习:将数据库中某个表的数据导入到redis中fetch
分析:一、连数据库,查到数据库里面全部的数据,游标类型要用pymysql.curosrs.DictCourspa
二、查到全部数据 [ {"id":1,"passwd":"49487dd4f94008a6110275e48ad09448","username":"test","is_admin":1}]
三、循环这个list,取到usernamer,把username当作key
四、再把这个小字典转成json,存进去就ok。
import pymysql,json,redis r = redis.Redis(host='192.168.21.129',password='HK139bc&*',db=1,port=6379) conn = pymysql.connect(host='192.168.21.129',user='jxz',passwd='123456',db='jxz',charset='utf8') cur = conn.cursor(cursor=pymysql.cursors.DictCursor) cur.execute('select * from my_user;') all_data = cur.fetchall() #数据库某表里面全部数据,输出为list形式,list中每一个元素为表中的每行数据,每行数据为字典形式 #如:[{'username': 'niuniu', 'is_admin': 0, 'id': 0, 'passwd': 'niuniu'}, {'username': 'xiaohei1234', 'is_admin': 0, 'id': 0, 'passwd': 'aA123456'}, {'username': 'gyx', 'is_admin': 0, 'id': 0, 'passwd': '123456'}
for data in all_data: #data为表中每行数据,是字典 k = data.get('username') #将username的值获取,做为小key r.hset('stu_info_mkk',k,json.dumps(data)) #将data字典转为json字符串,新增到redis中 cur.close() conn.close()