前言
最近在学习scrapy redis,顺便复习了redis。 本篇为redis篇,包含实例演示,主从服务配置,python交互等内容。
nosql与redis介绍
nosql数据库:
不支持SQL语法
存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据都是KV形式
NoSQL的世界中没有一种通用的语言,每种nosql数据库都有自己的api和语法,以及擅长的业务场景
NoSQL中的产品种类相当多:Mongodb,Redis,Hbase hadoop,Cassandra hadoop等等。
redi数据库是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
安装与启动
windows:
安装redis: https://github测试数据/MSOpenTech/redis/releases
安装redis管理客户端: https://redisdesktop测试数据/download
Linux :
安装: sudo apt-get -y install redis-server 连接redis: redis-cli 重要配置项说明: 配置文件位置:/etc/redis/redis.conf
bind?ip?绑定ip以配置远程访问 port?[num]?绑定端口 daemonize?是否以守护进程运行,推荐设置为yes,不会在命令行阻塞,类似于服务 dbfilename?数据文件名称 dir?/xx/xx/redis?设置数据文件存储的位置 log?file?/xx/xx/xx/redis-server.log?日志文件位置 slaveof?ip?port?主从复制的ip端口
启动redis: sudo server redis start 停止redis: sudo server redis stop 重启redis: sudo server redis restart 加载指定的redis配置启动: sudo redis-server /etc/redis/redis.conf 查看redis进程: ps-ef|grep redis 杀死进程: sudo kill -9 pid
redis数据结构与操作
redis数据结构redis是key-value的数据结构,每条数据都是一个键值对
键的类型是字符串,且键不能重复
值的类型分为五种:字符串strin,哈希hash,列表list,集合set,有序集合zset
redis数据操作 redis键命令redis键命令对所有数据类型通用
查找键: keys [正则表达式] 查看全部键: keys * 判断键是否存在: exists key 查看键对应的值的类型: type key 删除键对应的值的类型: del key1 key2 key3... 设置键的过期时间: expire key seconds 查看键的有效时间: ttl key
string类型相关操作字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
新增与更新设置键值(当键存在即为更新值): set key value 举个栗子:
#?设置键为xianyu值为plus的数据 set?xianyu?plus
设置键值以及过期时间: setex key seconds value 举个栗子:
#?设置键为xianyu值为plus的数据,且3秒后过期 setex?xianyu?3?plus
设置多个键值: mset key1 value1 key2 value2... 举个栗子:
#?设置键为xianyu[n]值为plus[n]的数据 mset?xianyu?plus?xianyu1?plus1?xianyu2?plus2
向现有的值追加其他值: append key value 举个栗子:
#?向键名为xianyu的值中追加值1 append?xianyu?1查看
查看键值: get key 举个栗子:
#?查看xianyu的值 get?xianyu
查看多个键的值: mget key1 key2 key3... 举个栗子:
#?查看xianyu1,xianyu2,xianyu3的值 mget?xianyu1?xianyu2?xianyu3删除
删除键: del key
hash哈希类型相关操作hash类型的值的类型为string
新增与修改设置单个值: hset key field value 举个栗子:
#?设置键xianyu的name属性的值为xianyuplus hset?xianyu?name?xianyuplus
设置多个值: hmset key field1 value1 field2 value2 ... 举个栗子:
#?设置xianyu的name值为xianyuplus?age值为23 hmset?xianyu?name?xianyuplus?age?23获取
获取单个键的所有属性: hkeys key 举个栗子:
#?获取xianyu的所有属性 hkeys?xianyu
获取单个属性的值: hget key field 举个栗子:
#?获取xianyu的name值 hget?xianyu?name
获取多个属性的值: hmget key field1 field2 ... 举个栗子:
#?获取xianyu的name值和age值 hmget?xianyu?name?age
获取所有属性的值: hvals key 举个栗子:
hvals?xianyu删除
删除单个键所有属性和值: del key 删除键的属性(对应的值也会被清空): hdel field1 field2... 举个栗子:
#?删除xianyu的name和age hdel?xianyu?name?agelist列表类型相关操作
list类型的值为string,值按照插入顺序排序
新增在list左边插入数据: lpush key value1 value2 value3... 举个栗子:
#插入1,2,3,4,5,6, lpush?xianyu?1?2?3?4?5?6
在list右边插入数据: rpush key value1 value2 value3... 举个栗子:
#插入1,2,3,4,5,6, rpush?xianyu?1?2?3?4?5?6
在指定元素前或后插入数据: linsert key before/after 现有元素 新元素 举个栗子:
#?在1的前面插入a linsert?xianyu?before?1?a获取列表元素
获取列表指定范围内的值: lrange key start stop
注意:这里的列表和python中的列表索引方式相同,从左往右以0开始,索引支持负数 举个栗子:
#?获取键为xianyu的列表0到6的全部元素 lrange?xianyu?0?6 #?获取键为xianyu的列表所有元素 lrange?xianyu?0?-1修改
设置指定索引位置的元素: lset key index value 举个栗子:
lset?xianyu?0?1删除
删除指定元素: lrem key count value
将列表中前count次出现的值为value的元素移除 count?>?0:?从头往尾移除 count?<?0:?从尾往头移除 count?=?0:?移除所有
举个栗子:
#?删除从头往尾数的两个1 lrem?xianyu?2?1set集合类型相关操作
无序集合
元素为string类型
元素具有唯一性,不重复
说明:对于集合没有修改操作
新增添加元素: sadd key member1 member2 ... 举个栗子:
#?向键xianyu的集合中添加元素a,b,c sadd?xianyu?a?b?c获取
获取所有值: smembers key 举个栗子:
#?获取键xianyu的集合所有的值 smembers?xianyu删除
删除指定的元素: srem key member 举个栗子:
#?删除键xianyu的集合值指定的元素 srem?xianyu?azset有序集合相关操作
sorted set,有序集合
元素为string类型
元素具有唯一性,不重复
每个元素都会关联一个double类型的score,表示权重,通过权重将元素从小到大排序
说明:没有修改操作
新增新增多个元素: zadd key score1 member1 score2 member2 ... 举个栗子:
zadd?xianyu?2?name?1?age查看
这里的有序集合和列表相同都有索引值
查看有序集合的值: zrange key start stop 举个栗子:
#?获取xianyu中0-6的值 zrange?xianyu?0?6 #?获取xianyu中所有的值 zrange?xianyu?0?-1 #?获取xianyu中权重最大最小中间的值
查看集合权重在指定范围内的值: zrangebyscore key min max 举个栗子:
zrangebyscore?xianyu?min?max
返回成员member的score值: zscore key member 举个栗子:
zscore?xianyu?a删除
删除指定元素: zrem key member1 member2 ... 举个栗子:
zrem?xianyu?a
删除权重在指定范围的元素: zrem key min max 举个栗子:
zrem?xianyu?1?2
python与redis交互
安装与导入安装: pip install redis 导入模块: from redis import *
创建StrictRedis通过init创建对象,指定参数host、port与指定的服务器和端口连接,host默认为localhost,port默认为6379,db默认为0,默认没有密码。
red?=?StrictRedis(host='localhost',?port=6379,?db=0)方法与操作string实例(其他类型操作类似)
这里不同类型拥有的方法和上面redis中讲解的方法相同,这里不再赘述。
举个栗子:
#?链接redis,创建stricredis对象 from?redis?import?* if?__name__=="__main__": ????try: ????????#创建StrictRedis对象,与redis服务器连接 ????????redis=StrictRedis() ????????#?新增一个string类型 ????????result=redis.set('name','xianyuplus') ????????#?成功打印True,失败打印False ????????print(result) ????????#获取键name的值 ????????result?=?redis.get('name') ????????#输出键的值,如果键不存在则返回None ????????print(result) ????????#设置键name的值,如果键已经存在则进行修改,如果键不存在则进行添加 ????????result?=?redis.set('name','xianyu') ???????#输出响应结果,如果操作成功则返回True,否则返回False ????????print(result) ????????result?=?redis.delete('name') ????????#输出响应结果,如果删除成功则返回受影响的键数,否则则返回0 ????????print(result) ????????#获取所有的键 ????????result=sr.keys() ????????#输出响应结果,所有的键构成?个列表,如果没有键则返回空列表 ????????print(result) ????except?Exception?as?e: ????????print(e)
redis搭建主从服务(ubuntu)
什么是主从服务
一个master可以拥有多个slave,一个slave可以拥有多个slave,如此下去,形成了多级服务器集群架构
master用来写数据,slave用来读数据,经统计:网站的读写比率是10:1
通过主从配置可以实现读写分离
master和slave都是一个redis实例(redis服务)
配置主vim?etc/redis/redis.conf bind?[本机ip] sudo?service?redis?stop redis-server?redis.conf配置从
sudo?cp?redis.conf?./slave.conf vim?slave.conf bind?[主配置的ip] slaveof?[主配置的ip?端口号] port?6378?--这个端口号不能和主配置的相同 sudo?redis-server?slave.conf查看主从关系
redis-cli?-h?[主配置的ip]?info?Replication主从测试
主配置上写入数据:set?xianyu?xianyuplus 从配置上读取数据:get?xianyu
尾言
以上就是关于redis的一些用法,重点部分还是各个数据类型的操作,一定要照着敲一次才能记得住哦。
推荐阅读
Python | Python学习之mysql交互详解
咸鱼普拉思
一只咸鱼在编程路上的摸爬滚打,记录摸索中的点点滴滴。
查看更多关于Python | Python学习之Redis交互详解的详细内容...