在介绍redis之前先问几个问题:1.redis是什么,为什么用redis这么快?2、redis支持的数据类型有哪些?3、如何与python通信Redis与redis交互。为什么写作语言这么快?Redis是用C语言编写的。优点是底层代码执行效率高,依赖性低,运行时依赖不多。而且系统兼容性好,稳定性高。存储redis是一个基于内存的数据库,可以避免磁盘IO,所以也被称为缓存工具。Redis的数据结构采用key-value的方式进行存储,即采用hash结构进行操作。数据操作的时间复杂度是O(1)。.Redis的设计模型采用单进程单线程模型,可以避免上下文切换和线程带来的资源竞争。而且Redis还采用了IO多路复用技术,其中多路复用是指多个socket网络连接,多路复用是指在一个线程中处理多个IO请求,可以减少网络IO消耗,大大提高效率。Redis数据类型redis支持的value的数据类型有很多,包括string、hash、list、set、orderedset等,其中String类型是redis提供的最基本的数据类型,对应的结构是key-value.比如要设置一个key,可以使用setkeyvalue,值为getkey127.0.0.1:6379>setnamezhangsanOK127.0.0.1:6379>getname"zhangsan"127.0.0.1:6379>hashhash提供字段和字段值的映射,对应的结构是key-field-value,设置一个key的hash值,可以使用hsetkeyfieldvaluehsetuserusernamezhangfeihsetuserage45如果要设置多个字段-valuesto对于某个key,可以使用hmsetkeyfieldvalue[fieldvalue...]hmsetuserusernameliubeiage99;获取一个值时使用hgetkey字段,获取一个key的多个字段值时使用hmgetkeyfiled[field..]127.0.0.1:6379>hmgetuserusernameage1)"liubei"2)"99;“字符串列表(list)字符串列表的底层数据类型是双链表数据结构,可以在两个末尾添加数据,时间复杂度为O(1),也支持区间查询。向列表左侧添加元素,使用:LPUSHkeyvalue[...]127.0.0.1:6379>lpushcitiesbeijingshanghaiguanghzou向列表右侧添加元素,RPUSHkeyvalue[...]127.0.0.1:6379>rpushcitiesshenzhentianjin获取列表中某个段的内容,使用lrangekeystartstop127.0.0.1:6379>lrangecities041)"guanghzou"2)"shanghai"3)"beijing”4)“shenzhen”5)“tianjin”字符串集合set字符串集合是字符串类型的无序集合。与list列表不同的是集合中的元素是无序的,而元素不能重复。向集合中添加元素,可以使用saddkeymember[...]127.0.0.1:6379>saddherosliubeiguanyuzhangfeizhaoyun(integer)4如果要删除集合中的元素,使用SREMkeymember[...]127.0.0.1:6379>sremheroesliubie(integer)0使用smemberskey获取集合中的所有元素127.0.0.1:6379>smembersheroes1)"zhaoyun"2)"zhangfei"3)"guanyu"4)"liubei"判断集合中是否存在元素,SISMEMBERkeymember127.0.0.1:6379>sismemberherozhaoyun(integer)1字符串排序集合(SortedSet,简称ZSET)ZSET是set的升级版,增加了scores到set属性中,添加修改元素时可以指定该属性。每次指定后,ZSET会自动按照分数排序,也就是说我们在collectionkey中添加成员的时候,可以指定分数。list列表是通过双向链表实现的,操作左右两边的数据会非常困难。快速,但对于中间数据操作而言相对较慢。sortedset是利用哈希表的结构实现的,中间部分排序的数据会被快速读取。同时,有序集合可以通过score来调整元素位置,但是如果我们要调整list的元素位置,就比较麻烦了。在zset有序集合汇总中添加元素和分数,使用ZADDkeyscoremember[...]127.0.0.1:6379>zadduserscore3434zhangfei4455liubei6666guanyu(integer)3得到某个元素的分数,zscorekeymember127.0.0.1:6379>zscoreuserscorezhangfei"3434"获取一定范围内的元素列表,如果想输出分数从小到大排序,使用zrangekeystartstop[WITHSCORES],如果你想从大到小输出分数,用ZREVRANGE键开始停止[WITHSCORES],WITHSCORES是一个选项,如果使用WITHSCORES,分数会合并显示。127.0.0.1:6379>zrangeuserscore031)"zhangfei"2)"liubei"3)"guanyu"127.0.0.1:6379>zrangeuserscore03withscores1)"zhangfei"2)"3434"3)"liubei"4)"4455"5)"guanyu"6)"6666"127.0.0.1:6379>zrevrangeuserscore03withscores1)"guanyu"2)"6666"3)"liubei"4)"4455"5)"zhangfei"6)"3434删除一个或多个元素,可以使用ZREMkeymember[member…]127.0.0.1:6379>zremuserscoreliubei(integer)1127.0.0.1:6379>zrangeuserscore03withscores1)"zhangfei"2)"3434"3)"guanyu"4)"6666"在python中使用redis要用python操作redis,需要先安装redis的python库,pipinstallredis,python提供了两种连接redis的方式,一种是直连,r=redis.Redis(host='localhost',port=6379)另一种方式是使用连接池,pool=redis.ConnectionPool(host='localhost',port=6379)r=redis.Redis(connection_pool=pool)连接池机制可以避免频繁创建和释放连接,提高整体性能。这种机制允许我们预先创建多个连接,并将它们放入连接池中。当我们需要对Redis进行操作时,可以直接从连接池中获取。完成后不会直接释放连接,而是归还给连接池。python操作redis和命令行操作类似,这里就不多说了,大家可以自己试试。想了解更多测试,请到个人网站看看!!
