Redis
简介
Redis(Remote Dictionary Server 远程字典服务) 是一个开源、支持网络、基于内存、可选持久性的键值对存储数据库,是 NoSQL 数据库。
官方原版: https://redis.io
中文官网: https://www.redisdocs.com/zh-cn
命令参考: https://redis.com.cn
入门教程: https://www.runoob.com/redis
安装
网上教程或官网。
redis 安装成功以后,window 下的配置文件保存在软件安装目录下。如果是 mac 或者 linux,则默认安装在 /etc/redis/redis.conf。
核心配置
绑定ip: 访问白名单,如果需要远程访问,可将此注释,或绑定1个真实ip。
bind 127.0.0.1
端⼝: 默认为6379。
port 6379
是否以守护进程运行:
- 如果以守护进程运行,则不会在命令阻塞,类似于服务
- 如果以守护进程运行,则当前终端被阻塞
daemonize yes # 设置为yes表示守护进程,设置为no表示⾮守护进程,推荐设置为yes
RDB持久化的备份策略:
RDB 备份是默认开启的。
# save 时间 读写次数
save 900 1 # 当redis在900内至少有1次读写操作,则触发一次数据库的备份操作
save 300 10 # 当redis在300内至少有10次读写操作,则触发一次数据库的备份操作
save 60 10000 # 当redis在60内至少有10000次读写操作,则触发一次数据库的备份操作
RDB持久化的备份文件:
dbfilename dump.rdb
RDB持久化数据库数据文件的所在目录:
dir <目录>
日志文件目录:
loglevel notice
logfile /var/log/redis/redis-server.log
数据库数量:
database 16 # 默认有16个
登录密码:
- 生产阶段打开,开发阶段一般都是注释掉。
- redis 在6.0版本以后新增了 ACL 访问控制机制,新增了用户管理,这个版本以后才有账号和密码。
requirepass <密码> # 登录 redis-cli -p
AOF持久化的开启配置项:
appendonly no # 默认值是no,关闭状态
AOF持久化的备份文件:
AOF 的备份数据文件与 RDB 的备份数据文件保存在同一个目录下,由 dir 配置项指定。
appendfilename "appendonly.aof"
AOF持久化备份策略:
# appendfsync always
appendfsync everysec # 工作中最常用。每一秒备份一次
# appendfsync no
RDB 与 AOF参考:
Redis 两种持久化机制RDB和AOF详解: https://zhuanlan.zhihu.com/p/100885432
启动服务
启动服务: redis-server --service-start
停止服务: redis-server --service-stop
注意
- 可以直接使用
redis-server启动,但是关闭了终端后服务会终止。 - 可以使用
reddis-server <配置文件地址>加载配置文件。
连接: redis-cli -h <ip> -p <端口>
数据类型
Redis提供的数据类型主要分为5种自有类型和一种自定义类型,这5种自有类型包括:String类型、哈希类型、列表类型、集合类型和顺序集合类型。
字符串(string)
单个数据的最大容量是512M。
key: 值
注意: redis 中的所有数据操作,如果设置的键不存在则为添加,如果设置的键已经存在则修改。
哈希(hash)
用于存储字典,字典的结构为键值对。域、值的类型都为 string,域在 同一个 hash 中是唯一的。
key:{
域(属性): 值,
域:值,
域:值,
...
}
列表(list)
它的子成员类型为 string。
key: [值1,值2, 值3, ...]
无序集合(set)
它的子成员类型为 string 类型,元素唯一不重复,没有修改操作。
key: {值1, 值4, 值3, ...}
有序集合(zset)
它的子成员值的类型为 string 类型,元素唯一不重复,没有修改操作。权重值从小到大排列。
key: {
值1 权重值1(数字);
值2 权重值2;
值3 权重值3;
值4 权重值4;
}
Python操作redis
使用 reidis 模块实现。
import redis
pool = redis.ConnectionPool(host='127.0.0.1', port=6379, decode_responses=False)
db = redis.Redis(connection_pool=pool)
db.set('name', 'Mjx')
print(db.get('name'))
重要参数:
max_connections:最大连接数decode_responses:是否解码socket_connect_timeout:连接超时时间
