共 1 章,19 子模块
学习目标 能够写出Redis中string类型数据的增删改查操作命令能够写出Redis中hash类型数据的增删改查相关命令 重要文档 Redis 参考命令Redis 官方文档 数据结构 redis是key-value的数据结构,每条数据都是⼀个键值对键的类型是字符串注意:键不能重复
值的类型分为五种:
字符串string哈希hash列表list集合set有序集合zset 数据操作行为 保存修改删除点击中⽂官⽹查看命令⽂档http://redis.cn/commands.html
学习目标 能够说出Redis中 list 保存的数据类型 list类型 列表的元素类型为string按照插⼊顺序排序 增加 在左侧插⼊数据lpush key value1 value2 …
例1:从键为a1的列表左侧加⼊数据a 、 b 、clpush a1 a b c
在右侧插⼊数据rpush key value1 value2 …
例2:从键为a1的列表右侧加⼊数据0、1rpush a1 0 1
在指定元素的前或后插⼊新元素linsert key before或after 现有元素 新元素
例3:在键为a1的列表中元素b前加⼊3linsert a1 before b 3
返回列表⾥指定范围内的元素
start、stop为元素的下标索引索引从左侧开始,第⼀个元素为0索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素lrange key start stop
例4:键为a1的列表所有元素lrange a1 0 -1
设置指定索引位置的元素值 索引从左侧开始,第⼀个元素为0索引可以是负数,表示尾部开始计数,如-1表示最后⼀个元素lset key index value
例5:修改键为a1的列表中下标为1的元素值为zlset a 1 z
删除删除指定元素
将列表中前count次出现的值为value的元素移除count > 0: 从头往尾移除count < 0: 从尾往头移除count = 0: 移除所有lrem key count value
例6.1:向列表a2中加⼊元素a、b、a、b、a、blpush a2 a b a b a b
例6.2:从a2列表右侧开始删除2个blrem a2 -2 b
例6.3:查看列表a2的所有元素lrange a2 0 -1
set类型 ⽆序集合元素为string类型元素具有唯⼀性,不重复说明:对于集合没有修改操作 增加 添加元素sadd key member1 member2 …
例1:向键a3的集合中添加元素zhangsan、lisi、wangwusadd a3 zhangsan sili wangwu
返回所有的元素smembers key
例2:键a3的集合中所有元素smembers a3
删除 删除指定元素srem key
例3:删除键a3的集合中元素wangwusrem a3 wangwu
zset类型 sorted set,有序集合元素为string类型元素具有唯⼀性,不重复每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序说明:没有修改操作 增加 添加zadd key score1 member1 score2 member2 …
例1:向键a4的集合中添加元素lisi、wangwu、zhaoliu、zhangsan,权重分别为4、5、6、3zadd a4 4 lisi 5 wangwu 6 zhaoliu 3 zhangsan
返回指定范围内的元素start、stop为元素的下标索引索引从左侧开始,第⼀个元素为0索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素zrange key start stop
例2:键a4的集合中所有元素zrange a4 0 -1
返回score值在min和max之间的成员zrangebyscore key min max
例3:键a4的集合中权限值在5和6之间的成员zrangebyscore a4 5 6
返回成员member的score值zscore key member
例4:键a4的集合中元素zhangsan的权重zscore a4 zhangsan
删除 删除指定元素zrem key member1 member2 …
例5:删除集合a4中元素zhangsanzrem a4 zhangsan
删除权重在指定范围的元素zremrangebyscore key min max
例6:删除集合a4中权限在5、6之间的元素zremrangebyscore a4 5 6
安装包安装Redis的有3种方式https://github.com/andymccurdy/redis-py
第一种:进⼊虚拟环境,联⽹安装包redispip install redis
第二种:进⼊虚拟环境,联⽹安装包rediseasy_install redis
第三种:到中⽂官⽹-客户端下载redis包的源码,使⽤源码安装一步步执行 wget https://github.com/andymccurdy/redis-py/archive/master.zipunzip master.zipcd redis-py-mastersudo python setup.py install
调⽤模块 引⼊模块from redis import StrictRedis
这个模块中提供了StrictRedis对象,⽤于连接redis服务器,并按照不同类型提供 了不同⽅法,进⾏交互操作 StrictRedis对象⽅法 通过init创建对象,指定参数host、port与指定的服务器和端⼝连接,host默认为localhost,port默认为6379,db默认为0 sr = StrictRedis(host='localhost', port=6379, db=0)简写sr=StrictRedis() 根据不同的类型,拥有不同的实例⽅法可以调⽤,与前⾯学的redis命令对应,⽅法需要的参数与命令的参数⼀致 string setsetexmsetappendgetmgetkey keys existstypedeleteexpiregetrangettl hash hsethmsethkeyshgethmgethvalshdel list lpushrpushlinsertlrangelsetlrem set saddsmemberssrem zset zaddzrangezrangebyscorezscorezremzremrangebyscore 学习目标 能够使用StrictRedis对象对string类型数据进行增删改查 准备 在桌面上创建redis目录使用pycharm打开 redis目录创建redis_string.py文件 from redis import *if __name__=="__main__":try:#创建StrictRedis对象,与redis服务器建⽴连接sr=StrictRedis()except Exception as e:print(e) string-增加 ⽅法set,添加键、值,如果添加成功则返回True,如果添加失败则返回False编写代码如下 from redis import *if __name__=="__main__":try:#创建StrictRedis对象,与redis服务器建⽴连接sr=StrictRedis()#添加键name,值为itheimaresult=sr.set('name','itheima')#输出响应结果,如果添加成功则返回True,否则返回Falseprint(result)except Exception as e:print(e) string- ⽅法get,添加键对应的值,如果键存在则返回对应的值,如果键不存在则返回None编写代码如下 from redis import *if __name__=="__main__":try:#创建StrictRedis对象,与redis服务器建⽴连接sr=StrictRedis()#键name的值result = sr.get('name')#输出键的值,如果键不存在则返回Noneprint(result)except Exception as e:print(e) string-修改 ⽅法set,如果键已经存在则进⾏修改,如果键不存在则进⾏添加编写代码如下 from redis import *if __name__=="__main__":try:#创建StrictRedis对象,与redis服务器建⽴连接sr=StrictRedis()#设置键name的值,如果键已经存在则进⾏修改,如果键不存在则进⾏添加result = sr.set('name','itcast')#输出响应结果,如果操作成功则返回True,否则返回Falseprint(result)except Exception as e:print(e) string-删除 ⽅法delete,删除键及对应的值,如果删除成功则返回受影响的键数,否则则返 回0编写代码如下 from redis import *if __name__=="__main__":try:#创建StrictRedis对象,与redis服务器建⽴连接sr=StrictRedis()#设置键name的值,如果键已经存在则进⾏修改,如果键不存在则进⾏添加result = sr.delete('name')#输出响应结果,如果删除成功则返回受影响的键数,否则则返回0print(result)except Exception as e:print(e) 键 ⽅法keys,根据正则表达式键编写代码如下 from redis import *if __name__=="__main__":try:#创建StrictRedis对象,与redis服务器建⽴连接sr=StrictRedis()#所有的键result=sr.keys()#输出响应结果,所有的键构成⼀个列表,如果没有键则返回空列表print(result)except Exception as e:print(e) 学习目标 能够根据课件中的步骤搭建 Redis 的主从 主从概念 ⼀个master可以拥有多个slave,⼀个slave⼜可以拥有多个slave,如此下去,形成了强⼤的多级服务器集群架构master用来写数据,slave用来读数据,经统计:网站的读写比率是10:1通过主从配置可以实现读写分离 master和slave都是一个redis实例(redis服务) 主从配置 配置主 查看当前主机的ip地址ifconfig
修改/etc/redis/redis.conf文件sudo vi redis.confbind 192.168.26.128
重启redis服务sudo service redis stopsudo redis-server redis.conf
配置从 复制/etc/redis/redis.conf文件sudo cp redis.conf ./slave.conf
修改redis/slave.conf文件sudo vi slave.conf
编辑内容bind 192.168.26.128slaveof 192.168.26.128 6379port 6378
redis服务sudo redis-server slave.conf
查看主从关系redis-cli -h 192.168.26.128 info Replication
数据操作 在master和slave分别执⾏info命令,查看输出信息 进入主客户端redis-cli -h 192.168.26.128 -p 6379
进入从的客户端redis-cli -h 192.168.26.128 -p 6378
在master上写数据set aa aa
在slave上读数据get aa
为什么要有集群 之前我们已经讲了主从的概念,一主可以多从,如果同时的访问量过大(1000w),主服务肯定就会挂掉,数据服务就挂掉了或者发生自然灾难大公司都会有很多的服务器(华东地区、华南地区、华中地区、华北地区、西北地区、西南地区、东北地区、台港澳地区机房) 集群的概念 集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。当请求到来首先由负载均衡服务器处理,把请求转发到另外的一台服务器上。
redis集群分类
软件层面硬件层面软件层面:只有一台电脑,在这一台电脑上启动了多个redis服务。
硬件层面:存在多台实体的电脑,每台电脑上都启动了一个redis或者多个redis服务。 搭建集群 当前拥有两台主机172.16.179.130、172.16.179.131,这⾥的IP在使⽤时要改为实际值 参考阅读 redis集群搭建 http://www.cnblogs.com/wuxl360/p/5920330.html[Python]搭建redis集群 http://blog.5ibc.net/p/51020.html 配置机器1 在演示中,172.16.179.130为当前ubuntu机器的ip在172.16.179.130上进⼊Desktop⽬录,创建conf⽬录在conf⽬录下创建⽂件7000.conf,编辑内容如下 port 7000bind 172.16.179.130daemonize yespidfile 7000.pidcluster-enabled yescluster-config-file 7000_node.confcluster-node-timeout 15000appendonly yes 在conf⽬录下创建⽂件7001.conf,编辑内容如下 port 7001bind 172.16.179.130daemonize yespidfile 7001.pidcluster-enabled yescluster-config-file 7001_node.confcluster-node-timeout 15000appendonly yes 在conf⽬录下创建⽂件7002.conf,编辑内容如下 port 7002bind 172.16.179.130daemonize yespidfile 7002.pidcluster-enabled yescluster-config-file 7002_node.confcluster-node-timeout 15000appendonly yes总结:三个⽂件的配置区别在port、pidfile、cluster-config-file三项
使⽤配置⽂件启动redis服务
redis-server 7000.confredis-server 7001.confredis-server 7002.conf 查看进程如下图 配置机器2 在演示中,172.16.179.131为当前ubuntu机器的ip在172.16.179.131上进⼊Desktop⽬录,创建conf⽬录在conf⽬录下创建⽂件7003.conf,编辑内容如下 port 7003bind 172.16.179.131daemonize yespidfile 7003.pidcluster-enabled yescluster-config-file 7003_node.confcluster-node-timeout 15000appendonly yes 在conf⽬录下创建⽂件7004.conf,编辑内容如下 port 7004bind 172.16.179.131daemonize yespidfile 7004.pidcluster-enabled yescluster-config-file 7004_node.confcluster-node-timeout 15000appendonly yes 在conf⽬录下创建⽂件7005.conf,编辑内容如下 port 7005bind 172.16.179.131daemonize yespidfile 7005.pidcluster-enabled yescluster-config-file 7005_node.confcluster-node-timeout 15000appendonly yes总结:三个⽂件的配置区别在port、pidfile、cluster-config-file三项
使⽤配置⽂件启动redis服务
redis-server 7003.confredis-server 7004.confredis-server 7005.conf 查看进程如下图 未完待续 下一期下一章 全套笔记直接地址: 请移步这里