返回介绍

14.1 Redis 的使用

发布于 2024-02-05 21:13:20 字数 5713 浏览 0 评论 0 收藏 0

首先来学习Redis数据库的使用。Redis是一个速度非常快的非关系型数据库,使用内存作为主存储,内存中的数据也可以被持久化到硬盘。Redis以键值形式(key-value)存储数据,其中的值可以分为以下5种类型:

字符串(string)

哈希(hash)

列表(list )

集合(set)

有序集合(zset)

14.1.1 安装Redis

接下来安装Redis,在Ubuntu下可以使用apt-get安装:

sudo apt-get install redis-server

Redis数据库进程是一个网络服务器,可以使用以下命令开启/重启/停止Redis:

$ sudo service redis-server start  # 开启Redis
$ sudo service redis-server restart # 重启Redis
$ sudo service redis-server start  # 停止Redis

默认情况下,Redis会在127.0.0.1:6379上开启服务,可以使用netstat命令进行查询:

$ netstat -ntl
Proto Recv-Q Send-Q Local Address  Foreign Address  State
...
tcp   0    0 127.0.0.1:6379  *:*     LISTEN
...

此时,我们运行的Redis仅能被本机使用,因为它只接收来自本机(localhost)的请求。如果想让Redis能被其他计算机访问,需要在配置文件中修改Redis服务器的监听地址,在Redis配置文件/etc/redis/redis.conf中做以下修改:

$ sudo vi /etc/redis/redis.conf
...
# bind 127.0.0.1
bind 0.0.0.0  # 接收来自任意IP的请求
...

重启Redis后,修改生效:

$ sudo service redis-server restart
Stopping redis-server: redis-server.
Starting redis-server: redis-server.
$ netstat -ntl
Proto Recv-Q Send-Q Local Address  Foreign Address  State
...
$ tcp   0    0 0.0.0.0:6379   0.0.0.0:*    LISTEN
...

现在,可以在任意机器上使用客户端连接Redis数据库:

$ redis-cli -h 192.168.0.103  # 使用-h 参数指定主机IP
192.168.1.102:6379> PING   # 测试链接数据库是否成功
PONG

14.1.2 Redis基本命令

由于篇幅有限,这里仅介绍一些Redis基本使用命令,按照值的5种类型依次讲解。想学习Redis更多详细内容,请参考相关书籍或Redis官方网站https://redis.io。

字符串

Redis的字符串(String)可以存储字符串、整数、浮点数(数字也是字符串)。String命令及描述如表14-1所示。

表14-1 String命令及描述

192.168.1.102:6379> SET x abcde
OK
192.168.1.102:6379> GET x
"abcde"
192.168.1.102:6379> DEL x
(integer) 1
192.168.1.102:6379> GET x
(nil)

列表

Redis的列表(List)可以有序地存储多个字符串。List命令及描述如表14-2所示。

表14-2 List命令及描述

192.168.1.102:6379> RPUSH color orange     # 右边入队1 个值
(integer) 1
192.168.1.102:6379> RPUSH color red yellow blue  # 右边入队3 个值
(integer) 4
192.168.1.102:6379> LINDEX color 2      # 获取位置2的值
"yellow"
192.168.1.102:6379> LRANGE color 0 3     # 获取位置在0~3 范围的值
1) "orange"
2) "red"
3) "yellow"
4) "blue"
192.168.1.102:6379> LPOP color        # 左边出队1 个值
"orange"
192.168.1.102:6379> LRANGE color 0 -1    # 获取全部值(负引索表示倒数第几个)
1) "red"
2) "yellow"
3) "blue"

哈希

Redis的哈希(Hash)可以存储多个键值对,其中的键和值都是字符串。Hash命令及描述如表14-3所示。

表14-3 Hash命令与描述

192.168.1.102:6379> HSET point x 34  # 赋值x、y、z 三个字段
(integer) 1
192.168.1.102:6379> HSET point y 55
(integer) 1
192.168.1.102:6379> HSET point z 47
(integer) 1
192.168.1.102:6379> HGET point x   # 获取字段x的值
"34"
192.168.1.102:6379> HGETALL point   # 获取所有字段和值
1) "x"
2) "34"
3) "y"
4) "55"
5) "z"
6) "47"
192.168.1.102:6379> HDEL point y   # 删除字段y
(integer) 1
192.168.1.102:6379> HGETALL point
1) "x"
2) "34"
3) "z"
4) "47"

集合

Redis中的集合(Set)可以存储多个唯一的字符串。Set命令及描述如表14-4所示。

表14-4 Set命令及描述

192.168.1.102:6379> SADD color_set white black red blue # 添加4 个成员
(integer) 4
192.168.1.102:6379> SMEMBERS color_set        # 获取全部成员
1) "blue"
2) "red"
3) "black"
4) "white"
192.168.1.102:6379> SADD color_set white      # 添加已存在的成员会失败
(integer) 0
192.168.1.102:6379> SCARD color_set        # 查询成员个数
(integer) 4
192.168.1.102:6379> SREM color_set red        # 删除1 个成员
(integer) 1
192.168.1.102:6379> SMEMBERS color_set
1) "black"
2) "white"
3) "blue"
192.168.1.102:6379> SISMEMBER color_set blue     # 判断某成员是否存在
(integer) 1
192.168.1.102:6379> SISMEMBER color_set red
(integer) 0

有序集合

Redis中的有序集合(ZSet)与集合(Set)类似,可以存储多个唯一的字符串,但在有序集合中,每个成员都有一个分数,所有成员按给定分数在集合中有序排列。Zset命令及描述如表14-5所示。

表14-5 ZSet命令及描述

192.168.1.102:6379> ZADD language 3 python 6 perl 9 lisp # 添加3 个成员
(integer) 3
192.168.1.102:6379> ZADD language 1 C 4 java 5 C++    # 再添加3 个成员
(integer) 3
192.168.1.102:6379> ZREM language C++       # 删除1 个成员
(integer) 1
192.168.1.102:6379> ZRANGE language 2 4       # 获取位置在2~4 范围的成员
1) "java"
2) "perl"
3) "lisp"
192.168.1.102:6379> ZRANGEBYSCORE language 3 6     # 获取分值在3~6 范围的成员
1) "python"
2) "java"
3) "perl"

14.1.3 Python访问Redis

Redis支持多种语言API,在Python中可以使用第三方库redis-py访问Redis数据库。

使用pip安装redis-py:

$ sudo pip install redis

redis-py的使用非常简单,只需先连接Redis获得连接对象,然后调用该对象上与每一条Redis命令相对应的方法即可。请看下面的简单示例:

>>> import redis
>>> r = redis.StrictRedis(host='localhost', port=6379)  # 连接Redis,返回连接对象
>>> r.set('s', 'hello world')          # 字符串
True
>>> r.get('s')
b'hello world'
>>> r.rpush('queue', 1, 2, 3)  # 列表
3
>>> r.lpop('queue')
b'1'
>>> r.llen('queue')
2
>>> r.lrange('queue', 0, -1)
[b'2', b'3']

Redis简介部分到此结束了,希望这部分内容能够帮助大家读懂scrapy-redis的源码。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文