14.1 Redis 的使用
首先来学习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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论