广告
返回顶部
首页 > 资讯 > 后端开发 > Python >【python】redis模块
  • 856
分享到

【python】redis模块

模块pythonredis 2023-01-31 02:01:56 856人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

单线程,通过epoll实现高并发,端口6379linux下载地址:Http://Redis.io/downloadwindows下载地址:https://GitHub.com/MSOpenTech/redis/releases 本文介绍的内

线程,通过epoll实现高并发,端口6379

linux下载地址:Http://Redis.io/download

windows下载地址:https://GitHub.com/MSOpenTech/redis/releases

 

本文介绍的内容:

string:存字符串

hash:存名字和值

list:存列表

set:存集合

sort set:有序集合,带权值排序的集合,可以应用到学生对应的分数

发布和订阅

小技巧

 

系统下命令
参数
作用
redis-cti -h ip port

ip:指定IP

port:主机端口

在redis安装目录下运行,启动redis实例

set name value

name:键名

value:键值

设置键名和键值
get namename:键名
获取键值
set name value ex time

name :键名

value:键值

ex:指定存在时间

time:时间

设置键的存在时间,过期自动删除

 

 

python下命令:

ConnectionPool(host,port)

host:redis服务器地址

port:端口

连接到redis服务器pool=redis.ConnectionPool(host='192.168.1.1',port=6379)
Redis(connection_pool)connection_pool:上面的链接绑定链接实例conn=(connection_pool=pool)
pipeline(transaction)transaction:redis链接创建管道pipe=redis.pipeline(transaction=conn)
execute()提交操作pipe.excute()

通用操作

select(db)db:redis数据库名。redis默认16个数据库。名字是0~15选取并使用redis的数据库
delete(*names)
*names删除对应的name
exists(name)name判断key是否存在
keys(pattern='*')

pattern:支持以正通配符

*:匹配任意多个字符

?:只匹配一个字符

[]:指定匹配[]的字符

以上可以搭配使用

匹配pattern指定的name

 

 

expire(name,time)

name:

time:

为name设存活时间,过期自动删除
rename(src,dst)

src:

dst:

把name由src改成dst
move(name,db)

name:

db:

把name移动到指定的db下,如果目标db已存在相同name,则不移动 
type(name)name:查看name的类型
randomkey()随机获取一个name
scan(cursor,match,count)

cursor:默认0

match:默认None

count:默认None

从cursor开始,匹配符合match条件,只匹配count条
scan_iter(match,count)

match:

count:

匹配count个,符合match条件的name,返回迭代器
Redis()

host:

port:

connection_pool:

连接到redis服务器
ConnectionPool()

host:

port:

创建链接凭据,供Redis()方法使用
pipeline(transaction,shard_hint)

transaction:默认False,不每次都与服务器交互

shard_hint:默认None

创建一个道对象,使用管道对象进行set后,必须使用execute()方法,才能上传数据到redis服务端,减少了服务器和客户端的交互次数

pipe=r.pipeline()

pipe.set(name,value)

execute()提交管道内容到redis服务器pipe.execute()
STR操作
set()

name:key名

value:key值

ex:过期时间,秒

px:过期时间,毫秒

nx:False。True:name不存在则set

xx:False。True:name存在则set

设置key和key值
setnx(name,value)

name:key名

value:key值

如果key不存在,设置key和key值

 

setex(name,value,time_s)

 

name:key名

value:key值

time_s:过期时间,秒

设置key和key的值,到时间自动删除key
psetex(name,time_ms,value)

name:key名

value:key值

time_ms:过期时间,毫秒

设置key和key的值,到时间自动删除key
mset(*args,**kwargs)批量设置

mset(r1='1',r2='2')

或:

mset({r1:'1',r2:'2'})

setbit()

name:key名

offset:偏移量

value:值

设置string的ASCII码,二进制位的值
get()name:key名获取键值
mget()*args:多个key名,逗号分割获取多个键值
getset()

name:key名

value:值

 

获取当前键值,并设置新值
getbit()

name:key名

offset:偏移量

获取string的ASCII码二进制位的值
bitop('operation',dest,*keys)

operation:and(与)or(或)not(非)xor(异或)

dest:新的redis名字

*keys:要查找的redis名

 

把要查找的redis名按operation进行二进制位运算,结果存放在dest里面

bitop('and','result','r1','r2','r3')
incr(name,amount)

name:key名

amount:只能是整型,默认是1

每次运行把name增量加amount,运行几次incr,name的值就是几

decr(name,amount)

name:key名

amount:只能是整型,默认是1

每次运行把name字段减amount,运行几次decr,name就减几次,可以减到负值
imcrbyfloat(name,amount)

name:key名

amount:可以是浮点型,默认1.0

strlen()name:key名返回name的字符串长度
append(name,str)

name:key名

str:追加的字符

把str追加到name的后面

HASH操作

hset(name,key,value)

name:redis的name
key:name对应的hash中的key
value:name对应的hash中的value

hash以字典存储

设置name[key]的值

hsetnx(name, key, value)

name:redis的name
key:name对应的hash中的key
value:name对应的hash中的value

name中不存在当前key

设置key的值,存在则不修改

hget(name,key)

name:redis的name

key:name对应的hash中的key

获取neme中key的值
hkeys(name)name:redis的name获取name对应的hash中所有的key的名字
hvals(name)name:redis的name获取name对应的hash中所有的key的值
hmset(name,dict)

name:redis的name

dict:字典,如:{'k1':'v1', 'k2': 'v2'}

批量设置name的哈希值
hgetall(name)name:redis的name获取name对应hash的所有键值
hmget(name,*keys)

name:redis的name

*keys:['k1', 'k2']或'k1', 'k2'

一次获取指定的多个key值
hdel(name,*keys)

name:redis的name

*keys:['k1', 'k2']或'k1', 'k2'

删除name中的keys
hlen(name)name:获取name中keys的个数
hexists(name,key)

name:

key:

检查name的key是否存在
hdel(name,*keys)

name:

*keys:

删除
hincrby(name,key,amount)

name:

key:

amount:默认1,可指定。

自增name中key的值,不存在则创建新key

key=amount

hincrbyfloat(name,key,amount)

name:

key:

amount:默认1.0,可指定其浮点数。

自增name中key的值,不存在则创建新key

key=amount

hscan(name,cursor,match,count)

name:

cursor:默认0,指定游标位置。从哪开始查。

match:默认None,匹配表达式。

count:默认None

查找指定key

**增量式迭代获取,对于数据大的数据非常有用,hscan可以实现分片的获取数据,并非一次性将数据全部获取完,从而放置内存被撑爆

从位置0开始,查找info中的包含a的字段,并且只找前三个

hscan('info',0,'*a*',3)

hscan_iter(name,match,count)

name:

match:匹配指定key,默认None 表示所有的key

count:每次分片最少获取个数,默认None表示采用Redis的默认分片个数

查找指定key,并返回迭代器,读取时循环迭代器for item in r.hscan_iter('xx'):
print item
LIST操作
lpush(name,values)

name:表名

values:值。

1, 2, 3

向name表里存values,新的在左边,先入后出
lrange(name,start,end)

name:

start:开始位置

end:结束位置

取列表

取所有start=0,end=-1

rpush(name,values)

name:表名

values:值。

1, 2, 3

向name表里存values,新的在右边,后入先出
rrange(name,start,end)
lpushx(name,values)

name:表名

values:值。

1, 2, 3

列表存在才存
llen(name)name:表名返回列表个数
linsert(name,where,refvalue,value)

name:表名

where:before或after

refvalue:标杆值,在它的前或后插入

value:要插入的数据

在name表的某一个值前或后插入一个新值
lset(name,index,value)

name:表名

index:修改索引第几个参数,从0开始

value:修改的值

修改
lrem(name,value,num)

name:表名

value:要删除的值

num:0删除表中所有的value指定值

        2 从前到后,删除两个

        -2 从后到前,删除两个

删除
lpop(name)name:从左向右读取一个值,并删除
lrange(name,start,end)

name:

start:

end:

获取name表分片数据
lindex(name,index)

name:

index:下标

读取指定下标的值
ltrim(name,start,end)

name:

start:

end:

保留start到end之间的数据,其它删除
rpoplpush(src,dst)

src:

dst:

从src表的最右边取出数据

存放到dst表的最左边

blpop(keys,timeout)

keys:redis name的集合

timeout:默认为0。超时时间,所有的元素取完以后,等待timeout秒,0为永远阻塞

从列表左边取出并删除redis name所有元素,并等待timeout秒

等待期间,其它用户放入值,会继续删除

brpop(keys,timeout)

keys:

timeout

从列表右边取出并删除redis name所有元素,并等待timeout秒
brpoplpush(src,dst,timeout)

src:

dst:

timeout:

从src列表右边取出并删除元素,存入dst列表的左边。
SET操作
sadd(name,*values)

name:

values:

集合有去重特性,所以重复数据不能添加
smembers(name)name:
scard(name)name:获取元素个数
sdiff(*keys)

*keys:多个redis 的name

 

获取前者的差集,只显示第一个集合中,其它集合没有的元素sdiff("name1","name2")
sdiffstore(dst,*src)

dst:

*src:

将只存在src1集合里,不存在src2,src3等等的元素,存放到dst里。
sinter(*keys)*keys:多个redis 的name

交集,显示几个keys里都有的元素

sinterstore(dst,*src)

交集,把几个src中都有的元素存到dst里
suNIOn(*keys)*keys:并集,把所有keys里的元素相加
sunionstore(dst,*src)

dst:

*src:

sismember(name,value)

name:

value:

查找name里面的value成员

有返回1,没有返回0

smove(src,dst,value)

src:

dst:

value:

将value从src移动到dst
spop(name)name:从集合的后面删除元素,并返回值
srandmember(name,numbers)

name:

numbers:默认1

随机返回numbers个元素
srem(name,value)

name:

value:

删除name里指定的value
sscan(name,index,match,count)

name:

index:

match:

count:

sscan_iter(name,match,count)

name:

match:

count:

有序集合
zadd(name,*args,**kwargs)

name:

*args:

**kwargs"

把权重和值放入name里面

数越小,值越在前

如查value和权重值已存在,修改权重为当前权重

redis.zadd('my-key', 'name1', 1.1, 'name2', 2.2, name3=3.3, name4=4.4)
zcount(name,min,max)

name:

min:

max:

获取min到max分数的个数(包含min和max)
zcard(name)name:统计name里元素的个数
zrange(name,start,end,desc,withscores,score_cast_func)

name:

start:元素起始位置

end:

desc:默认False,从小到大排序,True从大到小排序。

withscores:默认False,只获取元素的值。True获取值和分数。

score_cast_func:默认float,可以对分数进行类型的转换

取出name中,从start到end的元素

全取:0 -1

 

应用场景,可以保存成绩。。。

zrevrange(name,start,end,withscores,score_cast_func)

name:

start:元素起始位置

end:

withscores:默认False,只获取元素的值。True获取值和分数。

score_cast_func:默认float,可以对分数进行类型的转换

获取指定位置的值和分数,从大到小排序
zrangebyscore(name,min,max,start,num,withscores,score_cast_func)

name:

min:

max:

start:默认None

num:默认None

withscores:默认False,只获取元素的值。True获取值和分数。

score_cast_func:默认float,可以对分数进行类型的转换

按照分数范围,从start(value)位置开始,获取name中的有序集合的元素,顺序从小到大
zrevrangebyscore(name,min,max,start,num,withscores,score_cast_func)

name:

min:

max:

start:默认None

num:默认None

withscores:默认False,只获取元素的值。True获取值和分数。

score_cast_func:默认float,可以对分数进行类型的转换

从大到小排序。
zincrby(name,value,amount)

name:

value:

amount:默认1

运行一次,value的值增加amount指定的数值。
zrank(name,value)

name:

value:

获取value在name中的index(从0开始)

zrevrank(name,value)

name:

value:

获取value在name中的index(从0开始),

从大到小

zrangebylex(name,min,max,start,num)

name:

min:左区间,+表示正无限,-表示负无限,(表示开区间,[表示闭区间。

max:右区间

start:默认None,对结果进行分片,从start开始。

num:默认None,对结果进行分片,从start开始显示num个

当有相同的分数时,对value进行匹配。
zrem(name,value)

name:

value:

删除集合中value的元素
zremrangebyrank(name,min,max)

name:

min:

max:

删除排行(index)从min到max范围的元素
zremrangebyscore(name,min,max)

name:

min:

max:

删除分数是min到max范围的元素
zremrangebylex(name,min,max)

name:

min:

max:

删除值是min到max范围的元素
zscore(name,value)

name:

value:

获取value的分数
zinterstore(dest,keys,aggregate)

dest:

keys:

aggregage:默认None,分数按sum。可以为sum,min,max

keys的交集,存储到dest,keys对应的分数,按aggregage操作
zunionstore(dest,keys,aggregate)

dest:

keys:

aggregage:默认None,可以为sum,min,max

并集,存储到dest,
zscan(name,cursor,match,count,score_cast_func)

name

cursor:

match:

count:

score_case_func:默认float,可以对分数进行类型的转换

从cursor开始查找符合match的元素,查找count个
zscan_iter(name,match,count,score_cast_func)

name:

match:

count:

score_cast_func:

从cursor开始查找符合match的元素,查找count个,返回迭代,需要循环读取。

发布和订阅:

redis自带命令

PSUBSCRIBE pattern [pattern ...]

订阅一个或多个符合给定模式(条件)的频道。

支持*通配符

PUNSUBSCRIBE [pattern [pattern ...]]

退订所有给定模式(条件)的频道

支持*通配符

PUBSUB <subcommand> [argument [argument ...]]查看订阅与发布系统状态
PUBLISH channel message将信息发送到指定的频道。
SUBSCRIBE channel [channel ...]订阅给定的一个或多个频道的信息。
UNSUBSCRIBE channel [channel ...]命令用于退订给定的一个或多个频道的信息。
Python模块命令
subscribe
publish

 事务:

 事务开始后,所有的操作必须提交,否则不保存到数据库

MULTI事务开始
EXEC事务结束

 

问题:

1、1亿在线用户查询:

    把数据库里的自增ID写进offset,在线则设置为1,下线清除掉。一个用户状态只占一个二进制位。

    setbit(n5,1,1)

    setbit(n5,2,1)

    ......

 

    统计用户在线,使用bitcount(n5),就可以了。

 

    查看用户是否在线,使用getbit(n5,999),返回0,不在线;返回1在线。

 

2,验证码

我们经常在登录一些网站或是进行付款等操作的时候,都会收到一些验证码,并且说10min后失效。

实际上就可以通过下面一条指令来实现:

set phone_num code ex 600

用手机号作为key,验证码作为值,超时6min。这样当你输入好验证码,提交的时候,后台就可以了先get phone_num,再比较你的输入和数据库里面存的值,从而完成身份的验证。

 

3,session

早前,网站通过cookie来保存用户的用户名和密码,之后出现了很多的安全隐患,因此就提出了session的机制。

用户登陆成功之后,本地的cookie会保留一个较长的随机码,而网站后的后台则存储了这个随机码和你的用户id的对应关系。在你第二次登录的时候,cookie会传输到后台,而后台则根据你的随机码,获取你的用户信息,如果符合,则自动登录。这样,即使网站上有不法分子获取了你的cookie,也得不到你的任何信息,因为你的真实的有用的信息都存储在网站的后台。

我们在登录邮箱的时候,通常都会有一个选项,7天内自动登录。这其实就是给后台存的session设置了一个超时。聪明的你是不是已经会自己实现了呢?

NX:(if Not eXist)只有键key不存在的时候才会设置key的值

XX:只有键key存在的时候才会设置key的值

NX通常用于实现机制,XX的功能,小喵暂时木有头绪。。。想到应用场景的筒子们可以留言告诉小喵,小喵看到了一定会更新的。

 

 

系统下命令参考:

http://www.runoob.com/redis/redis-tutorial.html

https://www.cnblogs.com/idiotgroup/p/5455282.html

https://www.cnblogs.com/xtsec/p/7000404.html

--结束END--

本文标题: 【python】redis模块

本文链接: https://www.lsjlt.com/news/186438.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【python】redis模块
    单线程,通过epoll实现高并发,端口6379linux下载地址:http://redis.io/downloadwindows下载地址:https://github.com/MSOpenTech/redis/releases 本文介绍的内...
    99+
    2023-01-31
    模块 python redis
  • python redis模块
      redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)...
    99+
    2023-01-31
    模块 python redis
  • python使用redis模块来跟redis实现交互
    目录redis模块的使用1.安装模块2.导入模块4.连接池5.操作管道事务订阅\发布redis模块的使用 1.安装模块 pip3 install redis 2.导入模块 import redis 3.连接方式 严格连接...
    99+
    2022-06-30
    python redis模块 python redis实现交互
  • Python redis模块的使用教程指南
    目录1.安装模块2.连接池3.Redis 基本命令 String4.redis 基本命令 hash5.redis基本命令 list6.redis基本命令 set7.其他常用操作8.管道1.安装模块 python 要使用 ...
    99+
    2022-10-21
  • Python redis模块的使用教程指南
    目录1.安装模块2.连接池3.redis 基本命令 String4.redis 基本命令 hash5.redis基本命令 list6.redis基本命令 set7.其他常用操作8.管...
    99+
    2022-11-11
  • python怎么使用redis模块来跟redis实现交互
    本篇内容主要讲解“python怎么使用redis模块来跟redis实现交互”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python怎么使用redis模块来跟redis实现交互”吧!redis模...
    99+
    2023-07-02
  • python模块:smtplib模块
    1.使用本地的sendmail协议进行邮件发送格式(1):smtpObj=smtplib.SMTP([host [,port [,local_hostname]]])host:SMTP服务器主机的IP地址或者是域名port:服务的端口号(默...
    99+
    2023-01-31
    模块 python smtplib
  • Python模块:time模块
    time模块:python中处理时间的基础模块,有时间戳,元组,自定义,三种时间表现形式。python中时间戳的值是以1970年1月1日0点开始计算的,单位是秒。时间戳:就是两个时间差的数值。时区:传说中在开发服务器/客户端程序时,时区不一...
    99+
    2023-01-31
    模块 Python time
  • 使用Python模块:struct模块
    Python没有提供直接的将用户定义的数据类型和文件IO关联起来的功能,但是它提供了struct库(是一个内置库)——我们可以以二进制模式来写这些数据(有趣的是,它真的是设计来讲文本数据写为缓存的) 1)bytes、str...
    99+
    2023-01-31
    模块 Python struct
  • python模块学习----nmap模块
    安装nmap模块:pip install python_nmanmap模块说明:python-nmap是一个帮助使用nmap端口扫描器的python库。它允许轻松操纵nmap扫描结果,并且将是一个完美的选择,为需要自动完成扫描任务的系统管理...
    99+
    2023-01-31
    模块 python nmap
  • python加密模块-hashlib模块
    hashlib模块 用于加密相关的操作,3.X里代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法 (sha比md5 更复杂、md5 不能反解) 具体应用:用于网站防篡改。具...
    99+
    2023-01-31
    模块 python hashlib
  • Python模块
    初步认识 安装完python后,python自带一部分模块,自带的模块又称作内置模块。其中一部分模块在路径Lib下。(这里的文件夹可以看做包,可以把多个模块放进一个包里) 从模块的来源来讲,可以分三种:内置模块、自定义模块(自己定义的)...
    99+
    2023-01-30
    模块 Python
  • python - 模块
    参考:https://www.cnblogs.com/nulige/p/6166205.html一、模块介绍Python Module(模块),就是一个保存了Python代码的文件。模块能定义函数,类和变量。模块里也能包含可执行的代码。文件...
    99+
    2023-01-31
    模块 python
  • python 模块
    python的模块分为2种:1.标准库(不需要安装,直接导入就可以使用的)2.第三方库(必须要手动安装的)先来介绍2个标准库:sys和os#!/usr/bin/env python# coding: utf-8...
    99+
    2023-01-30
    模块 python
  • python-模块
    一:模块的基本认识: 内置模块 内置模块是python自带的功能,在使用内置模块相应功能时,需要先导入再使用    第三方模块 下载-->安装-->使用 1.找到python所在的根目录-->再找到Scrip...
    99+
    2023-01-31
    模块 python
  • Python基础之hashlib模块subprocess模块logging模块
    目录一、hashlib模块基本操作与用法二、subprocess模块简介基本操作与用法三、logging模块简介基本操作与用法一、hashlib模块 什么是哈希模块: hashlib...
    99+
    2022-11-11
  • Python中的sys模块、random模块和math模块
    一、sys运行时环境模块 sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。 用法: sys.argv:命令行参数List,第...
    99+
    2022-11-11
  • python常见模块之OS模块和time模块
    一、OS模块概述 Python OS模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。 二、常用方法 三、OS模...
    99+
    2022-11-12
  • 浅谈Python安装并使用redis模块的方法
    这篇文章给大家分享的是有关浅谈Python安装并使用redis模块的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。安装和使用安装安装redis模块pip3 inst...
    99+
    2022-10-18
  • Python时间模块之datetime模块
    目录 简介 函数介绍及运用 date:日期类 1.获取当前时间  2.日期对象的属性 3.date类中时间和时间戳的转换: 4.修改日期使用replace方法  time:时间类  time类操作 datetime:日期时间类 timede...
    99+
    2023-09-12
    python datetime python 日期时间
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作