Python | Python学习之Redis交互详解

简介: Python | Python学习之Redis交互详解

前言

最近在学习scrapy redis,顺便复习了redis。

本篇为redis篇,包含实例演示,主从服务配置,python交互等内容。

nosql与redis介绍

nosql数据库:

  • 不支持SQL语法
  • 存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据都是KV形式
  • NoSQL的世界中没有一种通用的语言,每种nosql数据库都有自己的api和语法,以及擅长的业务场景
  • NoSQL中的产品种类相当多:Mongodb,Redis,Hbase hadoop,Cassandra hadoop等等。

redi数据库是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

安装与启动

windows:

安装redis:

https://github.com/MSOpenTech/redis/releases

安装redis管理客户端:

https://redisdesktop.com/download

linux:

安装:sudo apt-get -y install redis-server

连接redis:redis-cli

重要配置项说明:配置文件位置:/etc/redis/redis.conf

bind ip 绑定ip以配置远程访问
port [num] 绑定端口
daemonize 是否以守护进程运行,推荐设置为yes,不会在命令行阻塞,类似于服务
dbfilename 数据文件名称
dir /xx/xx/redis 设置数据文件存储的位置
log file /xx/xx/xx/redis-server.log 日志文件位置
slaveof ip port 主从复制的ip端口

启动redis:sudo server redis start

停止redis:sudo server redis stop

重启redis:sudo server redis restart

加载指定的redis配置启动:sudo redis-server /etc/redis/redis.conf

查看redis进程:ps-ef|grep redis

杀死进程:sudo kill -9 pid

redis数据结构与操作

redis数据结构

  • redis是key-value的数据结构,每条数据都是一个键值对
  • 键的类型是字符串,且键不能重复
  • 值的类型分为五种:字符串strin,哈希hash,列表list,集合set,有序集合zset

redis数据操作

redis键命令

redis键命令对所有数据类型通用

查找键:keys [正则表达式]

查看全部键:keys *

判断键是否存在:exists key

查看键对应的值的类型:type key

删除键对应的值的类型:del key1 key2 key3...

设置键的过期时间:expire key seconds

查看键的有效时间:ttl key

string类型相关操作

字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。

新增与更新

设置键值(当键存在即为更新值):set key value

举个栗子:

# 设置键为xianyu值为plus的数据
set xianyu plus

设置键值以及过期时间:setex key seconds value

举个栗子:

# 设置键为xianyu值为plus的数据,且3秒后过期
setex xianyu 3 plus

设置多个键值:mset key1 value1 key2 value2...

举个栗子:

# 设置键为xianyu[n]值为plus[n]的数据
mset xianyu plus xianyu1 plus1 xianyu2 plus2

向现有的值追加其他值:append key value

举个栗子:

# 向键名为xianyu的值中追加值1
append xianyu 1
查看

查看键值:get key

举个栗子:

# 查看xianyu的值
get xianyu

查看多个键的值:mget key1 key2 key3...

举个栗子:

# 查看xianyu1,xianyu2,xianyu3的值
mget xianyu1 xianyu2 xianyu3
删除

删除键:del key

hash哈希类型相关操作

hash类型的值的类型为string

新增与修改

设置单个值:hset key field value

举个栗子:

# 设置键xianyu的name属性的值为xianyuplus
hset xianyu name xianyuplus

设置多个值:hmset key field1 value1 field2 value2 ...

举个栗子:

# 设置xianyu的name值为xianyuplus age值为23
hmset xianyu name xianyuplus age 23
获取

获取单个键的所有属性:hkeys key

举个栗子:

# 获取xianyu的所有属性
hkeys xianyu

获取单个属性的值:hget key field

举个栗子:

# 获取xianyu的name值
hget xianyu name

获取多个属性的值:hmget key field1 field2 ...

举个栗子:

# 获取xianyu的name值和age值
hmget xianyu name age

获取所有属性的值:hvals key

举个栗子:

hvals xianyu
删除

删除单个键所有属性和值:del key

删除键的属性(对应的值也会被清空):hdel field1 field2...

举个栗子:

# 删除xianyu的name和age
hdel xianyu name age

list列表类型相关操作

list类型的值为string,值按照插入顺序排序

新增

在list左边插入数据:lpush key value1 value2 value3...

举个栗子:

#插入1,2,3,4,5,6,
lpush xianyu 1 2 3 4 5 6

在list右边插入数据:rpush key value1 value2 value3...

举个栗子:

#插入1,2,3,4,5,6,
rpush xianyu 1 2 3 4 5 6

在指定元素前或后插入数据:linsert key before/after 现有元素 新元素

举个栗子:

# 在1的前面插入a
linsert xianyu before 1 a
获取列表元素

获取列表指定范围内的值:lrange key start stop

注意:这里的列表和python中的列表索引方式相同,从左往右以0开始,索引支持负数

举个栗子:

# 获取键为xianyu的列表0到6的全部元素
lrange xianyu 0 6
# 获取键为xianyu的列表所有元素
lrange xianyu 0 -1
修改

设置指定索引位置的元素:lset key index value

举个栗子:

lset xianyu 0 1
删除

删除指定元素:lrem key count value

将列表中前count次出现的值为value的元素移除
count > 0: 从头往尾移除
count < 0: 从尾往头移除
count = 0: 移除所有

举个栗子:

# 删除从头往尾数的两个1
lrem xianyu 2 1

set集合类型相关操作

  • 无序集合
  • 元素为string类型
  • 元素具有唯一性,不重复
  • 说明:对于集合没有修改操作
新增

添加元素:sadd key member1 member2 ...

举个栗子:

# 向键xianyu的集合中添加元素a,b,c
sadd xianyu a b c
获取

获取所有值:smembers key

举个栗子:

# 获取键xianyu的集合所有的值
smembers xianyu
删除

删除指定的元素:srem key member

举个栗子:

# 删除键xianyu的集合值指定的元素
srem xianyu a

zset有序集合相关操作

  • sorted set,有序集合
  • 元素为string类型
  • 元素具有唯一性,不重复
  • 每个元素都会关联一个double类型的score,表示权重,通过权重将元素从小到大排序
  • 说明:没有修改操作
新增

新增多个元素:zadd key score1 member1 score2 member2 ...

举个栗子:

zadd xianyu 2 name 1 age
查看

这里的有序集合和列表相同都有索引值

查看有序集合的值:zrange key start stop

举个栗子:

# 获取xianyu中0-6的值
zrange xianyu 0 6
# 获取xianyu中所有的值
zrange xianyu 0 -1
# 获取xianyu中权重最大最小中间的值

查看集合权重在指定范围内的值:zrangebyscore key min max

举个栗子:

zrangebyscore xianyu min max

返回成员member的score值:zscore key member

举个栗子:

zscore xianyu a
删除

删除指定元素:zrem key member1 member2 ...

举个栗子:

zrem xianyu a

删除权重在指定范围的元素:zrem key min max

举个栗子:

zrem xianyu 1 2

python与redis交互

安装与导入

安装:pip install redis

导入模块:from redis import *

创建StrictRedis

通过init创建对象,指定参数host、port与指定的服务器和端口连接,host默认为localhost,port默认为6379,db默认为0,默认没有密码。

red = StrictRedis(host='localhost', port=6379, db=0)

方法与操作string实例(其他类型操作类似)

这里不同类型拥有的方法和上面redis中讲解的方法相同,这里不再赘述。

举个栗子:

# 链接redis,创建stricredis对象
from redis import *
if __name__=="__main__":
    try:
        #创建StrictRedis对象,与redis服务器连接
        redis=StrictRedis()
        # 新增一个string类型
        result=redis.set('name','xianyuplus')
        # 成功打印True,失败打印False
        print(result)
        #获取键name的值
        result = redis.get('name')
        #输出键的值,如果键不存在则返回None
        print(result)
        #设置键name的值,如果键已经存在则进行修改,如果键不存在则进行添加
        result = redis.set('name','xianyu')
       #输出响应结果,如果操作成功则返回True,否则返回False
        print(result)
        result = redis.delete('name')
        #输出响应结果,如果删除成功则返回受影响的键数,否则则返回0
        print(result)
        #获取所有的键
        result=sr.keys()
        #输出响应结果,所有的键构成⼀个列表,如果没有键则返回空列表
        print(result)
    except Exception as e:
        print(e)

redis搭建主从服务(ubuntu)

什么是主从服务

  • 一个master可以拥有多个slave,一个slave可以拥有多个slave,如此下去,形成了多级服务器集群架构
  • master用来写数据,slave用来读数据,经统计:网站的读写比率是10:1
  • 通过主从配置可以实现读写分离
  • master和slave都是一个redis实例(redis服务)

配置主

vim etc/redis/redis.conf
bind [本机ip]
sudo service redis stop
redis-server redis.conf

配置从

sudo cp redis.conf ./slave.conf
vim slave.conf
bind [主配置的ip]
slaveof [主配置的ip 端口号]
port 6378 --这个端口号不能和主配置的相同
sudo redis-server slave.conf

查看主从关系

redis-cli -h [主配置的ip] info Replication

主从测试

主配置上写入数据:set xianyu xianyuplus
从配置上读取数据:get xianyu

尾言

以上就是关于redis的一些用法,重点部分还是各个数据类型的操作,一定要照着敲一次才能记得住哦。

相关文章
|
5月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
364 1
|
5月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
502 0
|
5月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
837 1
|
7月前
|
供应链 新能源 调度
微电网调度(风、光、储能、电网交互)(Matlab&Python代码实现)
微电网调度(风、光、储能、电网交互)(Matlab&Python代码实现)
185 0
|
5月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
697 6
|
5月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
255 4
|
6月前
|
JavaScript Java 大数据
基于python的网络课程在线学习交流系统
本研究聚焦网络课程在线学习交流系统,从社会、技术、教育三方面探讨其发展背景与意义。系统借助Java、Spring Boot、MySQL、Vue等技术实现,融合云计算、大数据与人工智能,推动教育公平与教学模式创新,具有重要理论价值与实践意义。
|
8月前
|
JSON 数据安全/隐私保护 数据格式
拼多多批量下单软件,拼多多无限账号下单软件,python框架仅供学习参考
完整的拼多多自动化下单框架,包含登录、搜索商品、获取商品列表、下单等功能。
|
8月前
|
机器学习/深度学习 数据安全/隐私保护 计算机视觉
过三色刷脸技术,过三色刷脸技术教程,插件过人脸python分享学习
三色刷脸技术是基于RGB三通道分离的人脸特征提取方法,通过分析人脸在不同颜色通道的特征差异

推荐镜像

更多