非关系型数据库存储——Redis存储


Redis是一个基于内存的高效的键值型非关系型数据库,存取效率极高。而且支持多种存储数据结构,使用也非常简单。

1.准备工作

在开始之前,需要安装Redis以及redis-py库。如果要做数据导入/导出操作的话,还需要安装RedisDump。

2.Redis和StrictRedis

redis-py库提供两个类Redis和StrictRedis来实现Redis的命令操作。
StrictRedis实现了绝大部分官方的命令,参数也一一对应,比如set()方法就对应Redis命令的set方法。而Redis是StrictRedis的子类,它的主要功能是用于向后兼容旧版本库里的几个方法。为了兼容,它将方法做了改写,比如lrem()方法就将value和num参数的位置互换,这和Redis命令行的命令参数不一致。
官方推荐使用StrictRedis,我们下面也用StrictRedis演示

3.连接Redis

现在,我们已经在本地安装了Redis并运行在6379端口,没有设置密码。那么可以用如下命令连接并测试Redis:

from redis import StrictRedis

redis = StrictRedis(host='localhost',port=6379,db=0) # password=如果有的话
redis.set('name','Bob')
print(redis.get('name'))

这里我们传入了Redis的地址、运行端口、使用的数据库和密码信息。在默认不传的情况下,这4个参数分别为localhost、6379、0和None。首先声明了一个StrictRedis对象,接下来调用set()方法,设置一个键值对,然后打印。
运行结果如下

b'Bob'

这说明我们连接成功,并可以执行set()和get()操作了。
当然,我们还可以使用ConnectionPool来连接,示例如下:

from redis import StrictRedis,ConnectionPool

pool = ConnectionPool(host='localhost',port=6379,db=0)
redis = StrictRedis(connection_pool=pool)

这样的连接效果是一样的。观察源码可以发现,StrictRedis就是用host和port等参数又构造了一个ConnectionPool,所以直接将ConnectionPool当作参数传给StrictRedis也一样。
另外,ConnectionPool还支持通过URL来构建。URL的格式支持有如下3种:

redis://[:password]@host:port/db
rediss://[:password]@host:port/db
unix://[:password]@/path/to/socket.sock?db=db

这3种URL分别表示创建Redis TCP连接、Redis TCP+SSL连接、Redis UNIX socket连接。我们只需要构造上面任意一种URL即可,其中password部分如果有则可以写,没有则可以省略。下面再演示用URL构造连接:

url = 'redis://:foobared@localhost:6379/0'
pool = ConnectionPool.from_url(url)
redis = StrictRedis(connection_pool=pool)

这里我们使用第一种连接字符串进行连接。首先,声明一个Redis连接字符串,然后调用from_url()方法创建ConnectionPool,接着将其传给StrictRedis即可完成连接,所以使用URL的连接方式还是比较方便的。

4.键操作

在这里插入图片描述
在这里插入图片描述

5.字符串操作

在这里插入图片描述
在这里插入图片描述

6.列表操作

在这里插入图片描述
在这里插入图片描述

7.集合操作

在这里插入图片描述
在这里插入图片描述

8.有序集合操作

在这里插入图片描述
在这里插入图片描述

9.散列操作

在这里插入图片描述
在这里插入图片描述

10.RedisDump

RedisDump提供了强大的Redis数据的导入和导出功能
首先,确保已经安装好了RedisDump
RedisDump提供了两个可执行命令:redis-dump用于导出数据,redis-load用于导入数据。

redis-dump

首先,可以输入以下命令查看所有可选项:

redis-dump -h

运行结果如下:

Usage: redis-dump [options]

Dump data from specified or default redis.

If no output file is specified, dump to standard output.

Options:
  -h, --help            show this help message and exit
  -H HOST, --host=HOST  connect to HOST (default localhost)
  -p PORT, --port=PORT  connect to PORT (default 6379)
  -s SOCKET, --socket=SOCKET
                        connect to SOCKET
  -w PASSWORD, --password=PASSWORD
                        connect with PASSWORD
  -d DB, --db=DB        dump DATABASE (0-N, default 0)
  -k KEYS, --keys=KEYS  dump only keys matching specified glob-style pattern
  -o OUTPUT, --output=OUTPUT
                        write to OUTPUT instead of stdout
  -y, --pretty          split output on multiple lines and indent it
  -E ENCODING, --encoding=ENCODING
                        set encoding to use while decoding data from redis

其中,-d代表数据库代号,-s代表导出后的休眠时间,-c代表分块大小,默认是10000,-f代表导出时的过滤器,-0代表禁用运行时优化,-V用于显示版本,-D表示开启调试。
我们可以用本地的Redis做测试,博主这个版本没有-u这个参数

redis-dump

运行后可以将本地0至15号数据库的所有数据输出出来,例如:

{"name":{"type":"string","value":"Bob","ttl":-0.001,"expireat":1648560164.8600767},"k1":{"type":"string","value":"v1","ttl":-0.001,"expireat":1648560164.8620763}}

如果想要将其输出为JSON文件,可以使用如下命令:

redis-dump -u :foobared@localhost:6379 > ./redis_data.jl

这样就可以成功将Redis的所有数据库的所有数据导出成JSON文件了
另外,可以使用-d参数指定某个数据库的导出,例如只导出1号库的内容:

redis-dump -u :foobared@localhost:6379 -d 1  > ./redis.data.jl

如果只想导出特定的内容,比如想导出以adsl开头的数据,可以根据-f参数过滤,命令如下:

redis-dump -u :foobared@localhost:6379 -f adsl:*  > ./redis.data.jl

redis-load

同样,我们可以首先输入如下命令查看所有可选项:

redis-load -h

运行结果如下:

redis-load --help
 Try:redis-load [global options] COMMAND [command options]
 	-u ,--uri=S        Redis URI (e.g. redis://hostname[:port])
	-d ,--database=S   Redis database(e.g. -d 15)
	-s ,--sleep=S 	   Sleep for S seconds after dumping (for debugging)
	-n ,--no_check_utf8 
	-V ,--version 		Display version
	-D ,--debug	
		--nosafe

其中-u代表Redis连接字符串,-d代表数据库代号,默认是全部,-s代表导出后的休眠时间,-n代表不检测UTF-8编码,-V表示显示版本,-D表示开启调试。
我们可以将JSON行文件导入到Redis数据库中:

< redis_data.json redis-load -u :foobared@localhost:6379

这样就成功导入了
另外,下面的命令同样可以达到

cat redis_data.json | redis-load -u :foobared@localhost:6379
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

降温vae+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值