https://blog.csdn.net/weixin_45912307/article/details/120604552
1. 基础概念
- NoSql和SQL
- 区别:
- 关系型数据库:mysql、oracle
- 数据之间有关联关系
- 数据存储在硬盘的文件上
- 非关系型数据库
- 数据直接没有关联关系
- 数据存储在内存中
- 关系型数据库:mysql、oracle
- 联系
- 关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库
- 让NoSQL数据库对关系型数据库的不足进行弥补。
- 一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据
- 什么是redis
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构- 字符串类型 string
- 哈希类型 hash : map格式
- 列表类型 list : linkedlist格式。支持重复元素
- 集合类型 set : 不允许重复元素
- 有序集合类型 sortedset:不允许重复元素,且元素有顺序
2. redis安装(docker容器方式)
-
拉取redis镜像:
docker pull redis
-
创建并启动redis容器;默认端口是6379,如果需要外部访问则可以使用端口映射:
- 创建容器:
docker run -di --name=myredis -p 6379:6379 redis
- 进入容器:
docker exec -it myredis /bin/bash
- 创建容器:
-
连接redis: ①使用命令行客户端 ②使用图形界面工具
- 命令行方式:
/urs/local/bin/redis-cli
- 命令行方式:
-
校验redis是否连接成功:
set usernam aa
3. redis命令操作
1. 字符串类型 string
- 存储:
set key value
- 获取:
get key
- 删除:
del key
2. 哈希类型 hash
- 存储:
- 单个值:
hset key field value
- 多个值:
hmset key field1 value1 field2 value2 ... ...
- 单个值:
- 获取:
hget key field
: 获取指定的field对应的单个值hmget key field1 field2 ...
: 获取指定的field对应的单个值hgetall key
:获取所有的field和value
- 删除:
hdel key field
3. 列表类型 list:可以添加一个元素到列表的头部(左边)或者尾部(右边)
- 添加:
lpush key value
: 将元素加入列表左表rpush key value
:将元素加入列表右边
- 获取:
lrange key start end
:范围获取
- 删除:
lpop key
: 删除列表最左边的元素,并将元素返回rpop key
: 删除列表最右边的元素,并将元素返回
5. 集合类型 set : 不允许重复元素
- 存储:
sadd key value
- 获取:
smembers key
:获取set集合中所有元素 - 删除:
srem key value
:删除set集合中的某个元素
6. 有序集合类型 sortedset:不允许重复元素,且元素有顺序。每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
- 存储:
zadd key score value
- 获取:
zrange key start end [withscores]
- 删除:
zrem key value
7. 通用命令
keys *
: 查询所有的键
-type key
: 获取键对应的value的类型del key
:删除指定的key value
4. 核心配置
- 绑定ip:如果需要远程访问,可将此⾏注释,或绑定⼀个真实ip
bind 127.0.0.1 - 端⼝,默认为6379
port 6379 - 是否以守护进程运⾏
- 如果以守护进程运⾏,则不会在命令⾏阻塞,类似于服务
- 如果以⾮守护进程运⾏,则当前终端被阻塞
- 设置为yes表示守护:
daemonize yes
- 数据⽂件
dbfilename dump.rdb - 数据⽂件存储路径
dir /var/lib/redis - ⽇志⽂件
logfile “/var/log/redis/redis-server.log” - 数据库,默认有16个
database 16 - 主从复制,类似于双机备份。
slaveof
5. 与python交互
- 安装redis:
pip install redis
- list - 添加、获取
from redis import *
if __name__=="__main__":
try:
#创建StrictRedis对象,与redis服务器建⽴连接
sr=StrictRedis()
#添加键mylist01,值为1,3,5,7,11
res=sr.lpush('mylist01',1,3,5,7,11)
#输出响应结果,如果添加成功则返回True,否则返回False
print(res)
# 获取列表全部值
ret = sr.lrange('mylist01',0,-1)
print(ret)
except Exception as e:
print(e)
6 主从搭建
1. 官网下载redis.conf配置文件,默认下载到当前目录
wget http://download.redis.io/redis-stable/redis.conf
2. 复制配置文件
mkdir root/redis
mv redis.conf /root/redis
cd /root/redis
cp redis.conf redis-master.conf
cp redis.conf redis-slave.conf
3. 编辑主库redis-master.conf文件
- 查看容器id ip
docker ps
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称/容器ID
vi redis-master.con
配置文件修改以下内容bind 172.17.0.1 port 6300 daemonize yes
4. 编辑从库redis-slave.conf文件
- 查看容器id ip
docker ps
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称/容器ID
vi redis-master.con
配置文件修改以下内容bind 172.17.0.2 port 6301 daemonize yes slaveof 172.17.0.1 6300
5. 运行redis-master
# 运行服务
docker run -it --name redis-master -v /root/redis/redis-master.conf:/usr/local/etc/redis/redis-master.conf -d -p 6300:6379 redis /bin/bash
# 进入容器
docker exec -it redis-master bash
# 加载配置
redis-server /usr/local/etc/redis/redis-master.conf
# 切到客户端连接文件所在目录
cd /usr/local/bin
# 测试连接
redis-cli -h 172.17.0.1 -p 6300
6. 运行redis-slave
# 运行服务
docker run -it --name redis-slave -v /root/redis/redis-slave.conf:/usr/local/etc/redis/redis-slave.conf -d -p 6301:6379 redis /bin/bash
# 进入容器
docker exec -it redis-slave bash
# 加载配置
redis-server /usr/local/etc/redis/redis-slave.conf
# 切到客户端连接文件所在目录
cd /usr/local/bin
# 测试连接
redis-cli -h 172.17.0.2 -p 6301
7. 查看主从关系
info Replication
- 主库
- 从库