Redis
是一个开源的使用ANSI C语言
编写、支持网络、可基于内存亦可持久化的日志型、Key-Value
数据库。它是一种非关系型数据库,经常用过缓存,拥有丰富的数据类型:字符串、哈希、列表、集合和有序集合。
2.1. Redis
的安装与连接测试
- 直接安装:
sudo apt-get install redis-server
,该安装只是Linux
的稳定版本,如果想安装Redis
官方稳定版本需要采用源码安装
- 源码安装:
- 官网
redis.io
下载稳定的最新版本,比如redis-5.0.7.tar.gz
- 安装
tcl
:sudo apt-get install tcl
- 解压下载的安装包,将解压后的文件放至指定的安装目录,
sudo mv redis-5.0.7 /usr/local/redis cd /usr/local/redis
- 编译安装:
sudo make
——>sudo make test
——>sudo make install
- 测试:
/usr/local/redis/src/redis-server
——>/usr/local/redis/src/redis-cli
——>set name lajos
——>get name
- 创建相关目录:
sudo makdir /etc/redis
(配置文件路径)——>sudo mkdir /var/lib/redis
(redis
数据库存储路径) - 安装服务:
cd /usr/local/redis/utils
——>sudo ./install_server.sh
- 重启服务:
ps ajx | grep redis
——>sudo kill -9 对应的进程号
- 测试:
redis-server
——>redis-cli
- 配置文件:
cd /etc/redis
——>sudo vim /etc/redis/6379.conf
——>可以修改bind
、daemonize
、requirepass
——>然后重启服务 - 直接开启客户机:
redis-cli
- 官网
- 连接测试
- 检查服务是否启动:
ps aux(ajx, -ef) | grep redis
- 连接:
redis-cli -h 主机 -p 端口 -a 密码
- 退出:
quit
- 检查服务是否启动:
- 密码管理:默认没有密码,若设置密码,需要通过
auth
认证- 单次有效:
- 获取密码:
config get requirepass
- 设置密码:
config set requirepass 123456
- 密码认证:
auth 123456
- 获取密码:
- 永久有效:修改配置文件
/etc/redis/redis.conf
- 将
requirepass xxxxx
行修改设置的密码 - 重新启动
redis
服务
- 将
- 单次有效:
2.2. Redis
命令
- 常用
1 | ping:测试连接情况,回复PONG表示OK |
- 字符串(
string
)
1 | set:设置 |
- 哈希(
hash
)
1 | hset:设置单个属性 |
- 列表(
list
)
1 | lpush:从左边(头部)插入数据 |
- 集合(
set
)
1 | sadd:添加元素 |
- 有序集合(
sorted set
)
1 | zadd:添加元素 |
2.3. Python
操作Redis
redis
扩展库中有两个类,Redis
和StrictRedis
,StrictRedis
实现了官方的命令,Redis
是它的子类,兼容老版本。扩展库没有实现select
方法,可以通过连接时指定使用的库。
- 安装扩展:
pip install redis
2.3.1. 简单连接
redis.Redis(host='localhost', port=6379, db=0, password=None, socket_timeout=None, socket_connect_timeout=None,socket_keepalive=None, socket_keepalive_options=None, connection_pool=None, unix_socket_path=None,encoding='utf-8', encoding_errors='strict', charset=None, errors=None, decode_responses=False, retry_on_timeout=False, ssl=False, ssl_keyfile=None, ssl_certfile=None, ssl_cert_reqs='required', ssl_ca_certs=None, max_connections=None, single_connection_client=False, health_check_interval=0)
:db
表示选定的数据库,decode_response
表示解码返回
1 | import redis |
2.3.2. 连接池
多个redis
对象使用同一个连接池进行连接,避免了多次连接、断开等操作的系统开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。
1 | import redis |
2.3.3. 详细操作命令
2.3.4. 管道(pipeline
)
可以记录多个操作,然后一次将操作发送至数据库,避免了多次连接、断开等操作的系统开效
多个操作可以依次进行保存,然后发送,也可以进行连贯操作
1 | import redis |
2.3.5. 发布和订阅
Redis
发布订阅(pub/sub
)是一种消息通信模式:发送者(pub
)发送消息,订阅者(sub
)接收消息。
1 | import redis |
- 发送者
1 | from pythonRedis import RedisHelper |
- 订阅者
1 | from pythonRedis import RedisHelper |
2.4 常见问题
在使用源码安装
redis
时,当在/usr/local/redis/utils
下执行sudo ./install_server.sh
时出现:1
2
3
4
5Welcome to the redis service installer
This script will help you easily set up a running redis server
This systems seems to use systemd.
Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!此时,需要去修改
/usr/local/redis/utils/install_server.sh
这个文件,将下面的内容注释掉,然后重新执行sudo ./install_server.sh
就可以正常安装。1
2
3
4
5
6
7
8bail if this system is managed by systemd
_pid_1_exe="$(readlink -f /proc/1/exe)"
if [ "${_pid_1_exe##*/}" = systemd ]
then
echo "This systems seems to use systemd."
echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!"
exit 1
fi
- 本文作者: Lajos
- 本文链接: https://www.lajos.top/2020/05/13/No-2-Python与数据库-Redis/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!