Redis温馨提示:本文根据b站黑马python课整理链接指南=>黑马程序员python企业级开发项目-手把手从0到1开发《美多商城》1.Redis特性Redis和其他key-value缓存产品不同的是以下三个特点:Redis支持数据持久化,可以将内存中的数据保存到磁盘,重启时可以再次加载使用。Redis不仅支持简单的key-value类型数据,还提供list、set、zset、hash等数据结构的存储。Redis支持数据备份,即主从模式的数据备份。2、Redis的优势在于极高的性能——Redis的读取速度可达11万次/秒,写入速度可达8.1万次/秒。丰富的数据类型——Redis在二进制情况下支持字符串、列表、哈希、集合和有序集合数据类型。原子的——Redis中的所有操作都是原子的。丰富的特性——Redis还支持发布/订阅、通知、密钥过期等特性。3、Redis服务器端和客户端命令3.1服务器端服务器端命令为redis-server可以使用help查看帮助文档redis-server--help个人习惯psaux|grepredis查看redisserver进程sudokill-9pidkilldeadredisserversudoredis-server/etc/redis/redis.conf指定加载的配置文件3.2Client客户端的命令是redis-cli,可以使用help来查看帮助文档redis-cli--help连接redisredis-cli运行测试命令ping切换数据库。数据库没有名称。默认有16个,用0-15标识。连接redis时,默认选择第一个数据库select10。4.数据结构Redis是key-value数据结构,每条数据都是一个key-valuepair的key类型是string。注意:密钥不能重复。值有五种类型:stringstringhashhashlistlistsetsetorderedsetzset4.1,string类型string类型是Redis中最基本的一种数据存储类型,在Redis中是二进制安全的,也就是说这种类型可以接受任何格式的数据,例如JPEG图像数据或Json对象描述信息。在Redis中,string类型的值最大可以容纳512M的数据长度。4.1.1保存如果setkey不存在,则添加,如果setkey已经存在,则修改setkeyvaluesetkeyvalue示例:将key设置为name值为itcastsetnameitcastset的数据key值和过期时间,as以秒为单位setexkeysecondsvalue例子:设置key为aa,aa的值3秒后过期datasetexaa3aasetmultiplekeyvaluesmsetkey1value1key2value2...示例:设置key为a1,value为python,Key为a2,value为java,key为a3,value为cmseta1pythona2javaa3c4.1.2getget:根据获取值到key,如果key不存在,返回nilgetkey例子:获取key的值namegetname根据多个Key获取多个值mgetkey1key2...例子:获取key的值a1,a2,a3mgeta1a2a34.2key命令查找keys,参数支持正则表达式keyspattern例子:查看所有keyskeys*例子:查询keyskeysa*名称中包含a,判断key是否存在。存在返回1,不存在返回0existskey1例子:判断keya1是否存在existsa1查看key类型key对应的value的类型例子:查看keya1的value类型,其中一个redis支持的五种类型typea1deletekey和对应的valuedelkey1key2...例子:deletekeya2,a3dela2a3设置过期时间如果没有指定过期时间会一直存在直到你用DEL删除expirekeyseconds示例:设置keya1的过期时间为3秒expirea13查看有效时间,单位秒ttlkey示例:查看key的有效时间bbttlbb4.3哈希类型hash用于存储对象,对象的结构为attribute,value的类型为string4.3.1添加、修改、设置单个属性hsetkeyfieldvalue示例:设置keyuser的属性名为itheimasetusernameitheimasetmultipleattributeshmsetkeyfield1value1field2value2...示例e:设置keyu2的属性名称为itcast,属性age为11hmsetu2nameitcastage114.3.2获取指定key的所有属性hkeyskey例子:获取keyu2的所有属性hkeysu2获取一个属性的值hgetkeyfield例子:获取keyu2的值属性名hgetu2name获取多个属性的值hmgetkeyfield1field2...例子:getkeyu2的属性name和age的值hmgetu2nameage得到所有属性的值hvalskey例子:得到keyu2的所有属性的值hvalsu24.3.3delete删除整个hashkey和value,使用del命令删除属性,该属性对应的值会一起删除hdelkeyfield1field2...例子:删除keyu2的属性agehdelu2age4.4listtype列表的元素类型为string排序依据4.4.1向插入顺序添加数据lpushkeyvalue1ontheleftvalue2...例:从list左侧用keya1添加数据a,b,clpusha1abc,在右侧插入数据rpushkeyvalue1value2...示例:使用键a1从列表右侧添加数据0,1rpusha1014.4.2获取返回列表中指定范围内的元素。start和stop是元素的下标索引。索引从左边开始,第一个元素为0。索引可以是负数,表示从末尾开始计数,如-1表示最后一个元素lrangekeystartstop示例:获取列表的所有元素whosekeyisa1lrangea10-14.4.3delete删除指定元素删除列表中之前出现过count的值为value的元素count>0:removefromheadtotailcount<0:removefromtailtoheadcount=0:removealllremkeycountvalue例子:addelementsa,b,a,b,a,blpusha2abababtolista2:Delete2blrema2-2bfromtherightsideofa2list例子:查看所有元素thelista2lrangea20-14.5集合类型无序集合元素为字符串类型元素,唯一且不重复修改操作4.5.1添加元素saddkeymember1member2...例:添加元素zhangsan,lisi,wangwu到集合中keya3adda3zhangsansiliwangwu4.5.2get返回所有元素smemberskey示例:获取keya3a34.5.3的集合中的所有元素smembersDelete删除指定元素sremkey示例:删除元素wangwusrema3wangwu4.6zset类型sortedset中keya3的集合,有序set元素是string类型的元素是唯一的,不重复。每个元素都会关联一个double类型的分数,表示权重。元素按重量从小到大排序。说明:无修改操作4.6.1添加zaddkeyscore1member1score2member2...例:在keya4的集合中添加元素lisi、wangwu、zhaoliu、zhangsan,权重分别为4、5、6、3zadda44lisi5wangwu6zhaoliu3zhangsan4.6.2get返回指定范围内的元素start,stop为元素的下标索引。索引从左边开始,第一个元素为0。索引可以为负数,表示从末尾开始计数,如-1表示最后一个元素zrangekeystartstop示例:获取key的集合a4中的所有元素zrangea40-14.6.3deletedeletedeletespecifiedelementzremkeymember1member2...例子:删除seta4中的元素zhangsanzrema4zhangsan5.与python交互5.1Redis对象方法通过init创建一个对象,指定参数host,port为连接到指定的服务器和端口,host默认为localhost,port默认为6379,db默认为0sr=Redis(host='localhost',port=6379,db=0)根据不同类型简写sr=Redis(),有不同的实例方法可以调用,对应前面学习的redis命令,方法需要的参数和命令的参数一致zremrangebyscore5.2字符串操作5.2.1准备在桌面创建redis目录用pycharm打开redis目录,创建redis_string.py文件fromredisimport*if__name__=="__main__":try:#CreateaRedisobject并与redis服务器建立连接sr=Redis()exceptExceptionase:print(e)5.2.2string-Add方法设置,添加key和value,添加成功返回True,添加失败返回False编写代码如下fromredisimport*if__name__=="__main__":try:#创建一个Redis对象并与redis服务器建立连接sr=Redis()#添加键名,值为itheimaresult=sr.set('name','itheima')#输出response结果,添加成功则返回True,否则返回Falseprint(result)exceptExceptionase:print(e)5.2.3string-get方法get,添加key对应的value,如果key存在则返回对应的值,如果key不存在则返回None代码如下lowsfromredisimport*if__name__=="__main__":try:#创建一个Redis对象并与redis服务器建立连接sr=Redis()#获取键名的值result=sr.get('name')#输出key的值,如果key不存在则返回Noneprint(result)exceptExceptionase:print(e)5.2.4字符串修改方法集,如果key已经存在,修改一下,如果key不存在,则添加,写代码如下fromredisimport*if__name__=="__main__":try:#创建一个Redis对象并与redis服务器建立连接sr=Redis()#设置key名称的值,如果key已经存在,修改它,如果key不存在,则继续添加result=sr.set('name','itcast')#输出响应结果,操作成功则返回True,否则返回Falseprint(result)exceptExceptionase:print(e)5.2.5string-delete方法delete方法删除键和对应的值。如果删除成功,则返回受影响key的个数,否则返回0。编写代码如下fromredisimport*if__name__=="__main__":try:#创建一个Redis对象,并与redis服务器建立通信aconnectionsr=Redis()#设置key名称的值,如果key已经存在则修改,如果key不存在则添加result=sr.delete('name')#输出响应结果,如果删除成功返回受影响key的个数,否则返回0print(result)exceptExceptionase:print(e)5.2.6获取key方法keys,根据正则表达式获取key,代码写为followsfromredisimport*if__name__=="__main__":try:#创建一个Redis对象并与redis服务器建立连接sr=Redis()#获取所有keysresult=sr.keys()#输出响应结果,所有key组成一个list,如果没有key返回空listprint(result)exceptExceptionase:print(e)综上所述,上面是红色是的,以后还会继续更新。欢迎大家点赞关注~~
