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 许可协议。转载请注明出处!
 
		