Redis入门教程

本文介绍了Redis的特点,包括数据持久化、丰富的数据结构支持及数据备份能力。此外,还详细讲解了Redis的安装方法、客户端redis-cli的使用、键值操作、事务与管道功能,并提供了Python操作Redis的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis is an open-source in-memory database project implementing a distributed, in-memory key-value store with optional durability.

License: BSD
Developer(s): Salvatore Sanfilippo
Initial release: May 10, 2009; 8 years ago
Stable release: 4.0.2 / September 21, 2017; 2 months ago
Written in: ANSI C
Initial release date: April 10, 2009

Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。
- Redis 支持数据的备份,即 master-slave 模式的数据备份。

Redis 安装

Redis 可以直接在物理机安装,当然,更推荐的做法是使用 Docker 镜像直接启动。

  • 物理机安装: Centos7 安装 Redis
  • Docker 镜像: Redis by docker

    最简单的启动方式(容器名称为 myredis, 宿主机端口为 63790):

    $ docker run --name myredis -p 63790:6379 -d redis
    

Docker 的基本使用参考: Docker tutorial
Redis 配置文件说明: Redis 配置

客户端 redis-cli

Redis 命令用于在 redis 服务上执行操作。要在 redis 服务上执行命令需要一个 redis 客户端。Redis 客户端存在于 redis 的安装包中(如 redis-3.2.9/src)。

连接本地 Redis(不指定端口则连接默认端口 6379):

$ redis-cli -p 63790

连接远程 Redis:

$ redis-cli -h host -p port

执行PING命令检测服务器是否启动:

127.0.0.1:63790> PING
PONG

Key

Redis 键都为字符串,Redis 提供键命令用于管理 redis 的键。

127.0.0.1:63790> SET foo bar
OK

127.0.0.1:63790> DEL foo
(integer) 1

以上先创建键 foo 并指定值为 “bar”,而后删除该键。一般操作成功返回 1,否则返回 0。

具体的键命令参考:Redis-keys

Value

Redis 的值支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

  1. Stringstring 命令): 一个键最大能存储 512MB。
  2. Hashhash 命令): 对应于 Python 的字典。每个 hash 可以存储 2321 2 32 − 1 键值对(40多亿)。
  3. Listlist 命令): 对应 Python 的列表,可以添加一个元素到列表的头部(左边)或者尾部(右边)。每个 list 可以存储 2321 2 32 − 1 元素(40多亿)。
  4. Setset 命令): 对应 Python 的集合,每个 set 可以存储 2321 2 32 − 1 元素(40多亿)。
  5. Zsetzset 命令): zset 类似 set,不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。zset 的成员是唯一的,但分数(score)却可以重复。

事务

Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
- 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
- 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

一个事务从开始到执行会经历以下三个阶段:
- 开始事务,MULTI
- 命令入队,多个命令入队到事务中
- 执行事务,EXEC

示例:

127.0.0.1:63790> MULTI
OK

127.0.0.1:63790> set foo bar
QUEUED

127.0.0.1:63790> get foo
QUEUED

127.0.0.1:63790> exec
1) OK
2) "bar"

事务命令查看:Redis 事务命令

管道

Redis是一种基于客户端-服务端模型以及请求/响应协议的 TCP 服务。这意味着通常情况下一个请求会遵循以下步骤:
- 客户端向服务端发送一个查询请求,并监听 Socket 返回,通常是以阻塞模式,等待服务端响应。
- 服务端处理命令,并将结果返回给客户端。

Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。管道技术最显著的优势是提高了 redis 服务的性能

管道的使用在下一节 Python 使用中介绍。

Python 使用 Redis

创建连接

import redis

server = redis.StrictRedis(
    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=None, 
    ssl_ca_certs=None,
    max_connections=None
)

其中,最常用的几个参数:host、port、db、socket_timeout、socket_connect_timeout、retry_on_timeout,所以通常的连接:

import redis

server = redis.StrictRedis(
    host='localhost', 
    port=6379,
    db=0, 
    socket_timeout=30,
    socket_connect_timeout=30,
    retry_on_timeout=True
)

不出意外已经成功连接到 Redis 服务器,现在可以和服务器交互操作,如:

server.set('foo', 'bar')
server.incr('cnt')

事务和管道

事务的使用方法如下:

pipe = server.pipeline()
pipe.multi()
pipe.set('foo', 'bar')
pip.get('foo')
result = pipe.execute()

管道的使用和事务相同,不过需要在创建时设置参数 transaction=False:

pipe = server.pipeline(transaction=False)
pipe.set('foo', 'bar')
pip.get('foo')
result = pipe.execute()

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值