Redis API的理解与使用

6 篇文章 0 订阅
5 篇文章 0 订阅

目录

一.通用命令

二.数据结构与内部编码

三.单线程架构


 

一.通用命令

Redis有五种数据结构,它们是键值对中的值,对于键来说有一些通用的命令.Redis的全局通用命令有:keys,dbsize,exists key,del key [key …],expire key seconds,type key.

1.keys(查看所有键)

虽然keys *命令比较方便实用,但一般不建议在生产环境使用,是因为生产环境的简直对比较多,keys命令比较重,它的查询复杂度为O(n),加入你有几百万个键,这样查询的速度会比较慢,而且Redis是单线程的,这样还会阻塞其它的命令.还有这样取出的数据意义并不大.但是我们有其它的方法可以解决这样的问题,例如:热备从节点,scan命令.这些在后面会仔讲解.

127.0.0.1:6379> keys  *
1) "_ROUTE_KEY"
2) "mylist"
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> set java jedis
OK
127.0.0.1:6379> set python redis-py
OK
127.0.0.1:6379> keys *
1) "python"
2) "mylist"
3) "_ROUTE_KEY"
4) "java"
5) "hello"

2.dbsize(键总数)

dbsize命令会返回当前数据库的键总数,例如上面我们插入了五条数据,这里就返回了结果:5. 但是dbsize命令不会遍历数据库中所有的键,而是直接获取Redis内置的键总数变量,因此他的时间复杂度为O(1),这点个keys命令不同.

127.0.0.1:6379> dbsize
(integer) 5
127.0.0.1:6379> 

3.exists key(检查键是否存在)

使用exists 命令,如果键存在则返回1,不存在则返回0,如下所示:

127.0.0.1:6379> set a b
OK
127.0.0.1:6379> exists a
(integer) 1
127.0.0.1:6379> del a
(integer) 1
127.0.0.1:6379> exists a
(integer) 0
127.0.0.1:6379> 

4.del  key  [key …](删除键)

del是一个通用的命令,不管何种类型的数据,都可以将其删除,如果所删除的键存在,则返回 1,不存在则返回 0,如下:

127.0.0.1:6379> del java
(integer) 1
127.0.0.1:6379> del b
(integer) 0

5.expire key seconds(键过期)

Redis支持对键添加过期时间,当超出所设置的时间,会自动删除键,而且在设置键过期时间之后,我们还可以通过ttl命令来查看key剩余的过期时间,或者通过persist命令来去掉key的过期时间.当键被过期后,用ttl命令查看,则返回结果:2,具体如下:

127.0.0.1:6379> expire hello 10
(integer) 1
127.0.0.1:6379> ttl hello
(integer) -2

6.type key(键的数据结构类型)

如下,python是字符串类型,返回结果便为string,键mylist 是列表类型,返回结果则是list:

127.0.0.1:6379> type python
string
127.0.0.1:6379> type mylist
list

 

二.数据结构与内部编码

type命令所返回的实际上就是当前key的数据结构类型,他们分别是string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合),但这只是Redis对外的数据结构.实际上每种数据结构还有自己底层的内部编码实现,例如list就包含了linkedlist和ziplist两种内部编码,不过我们也可以通过object encoding命令来查询内部编码.

图1:

内部编码

 

图2:

内部编码

 

三.单线程架构

Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库服务.

 

1.单线程模型

首先来看下客户端与服务端的简单模型图,如图3所示,可以从图中看出每次客户端都只是经历:发送命令,执行命令和返回结果三个过程.

图3:

其中,这最主要的还是因为Redis是单线程来处理命令的,所以一条命令从客户端发送到服务端,不会立马被执行,所有的命令都会放到一个队列之中,然后逐个被执行,这就是redis的但线程的基本模型.

图4:

 

图5:

 

2.为什么单线程这么快?

1)纯内存访问,Redis讲所有数据放在内存中,内存的响应时长大约为100纳秒,这是Redis达到每秒万级别访问的重要基础.

2)非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现,再加上Redis的事件处理模型将epoll中的连接,读写,关闭都转换为事件,不在网络I/O上浪费过多的时间,如图6所示:

3)单线程避免了线程切换和竞态产生的消耗.

图6:

 

 

参考:redis开发与运维

最后语:不积跬步,无以至千里;不积小流,无以成江海。对于知识总要温故,这样才能知新!

版权声明:尊重博主原创文章,转载请注明出处 https://blog.csdn.net/zfy163520

使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值