最近在学习scrapy redis,顺便复习了redis。
本篇为redis篇,包含实例演示,主从服务配置,python交互等内容。python
nosql数据库:mysql
不支持SQL语法linux
存储结构跟传统关系型数据库中的那种关系表彻底不一样,nosql中存储的数据都是KV形式git
NoSQL的世界中没有一种通用的语言,每种nosql数据库都有本身的api和语法,以及擅长的业务场景github
redi数据库是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。正则表达式
windows:redis
安装redis:
https://github.com/MSOpenTech/redis/releasessql
安装redis管理客户端:
https://redisdesktop.com/download数据库
linux:ubuntu
安装: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是key-value的数据结构,每条数据都是一个键值对
键的类型是字符串,且键不能重复
redis键命令
redis键命令对全部数据类型通用
查找键:keys [正则表达式]
查看所有键:keys *
判断键是否存在:exists key
查看键对应的值的类型:type key
删除键对应的值的类型:del key1 key2 key3...
设置键的过时时间:expire key seconds
查看键的有效时间:ttl key
字符串类型是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 age
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 1
无序集合
元素为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 a
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
安装:pip install redis
导入模块:from redis import *
经过init建立对象,指定参数host、port与指定的服务器和端口链接,host默认为localhost,port默认为6379,db默认为0,默认没有密码。
red = StrictRedis(host='localhost', port=6379, db=0)
这里不一样类型拥有的方法和上面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)
一个master能够拥有多个slave,一个slave能够拥有多个slave,如此下去,造成了多级服务器集群架构
master用来写数据,slave用来读数据,经统计:网站的读写比率是10:1
经过主从配置能够实现读写分离
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的一些用法,重点部分仍是各个数据类型的操做,必定要照着敲一次才能记得住哦。