文档章节

左手Mongodb右手Redis redis操作

o
 osc_wws45aot
发布于 2019/08/20 09:41
字数 1265
阅读 7
收藏 0

精选30+云产品,助力企业轻松上云!>>>

set key value  设置key的值

get key 取得key的值

decr key 值会减一

incr key 值会加一

decrby key value ,会让key的值减少value.

incrby key value 会让key的值增加value.

del key 删除key的值

 

python操作redis的第三方库是“redis”

使用命令 pip install redis

import redis
client = redis.Redis()

后面都要的操作都要使用client对象进行。

for key in client.Keys():
    print(key)

client.keys()返回的是一个列表,列表内的bytes型key.

1.创建字符串

client.set(key,value)

2.获取字符串的值

client.get("hello")

前面的b代表是bytes类型

通过key,decode()解码,字符串就可以正常显示。

提示:

无论是Python的字符串还是数字,进入redis就会编程bytes型的数据,因此特别注意格式转化。

在redis-cli中,set命令有一个nx参数,在python中也可以使用:

client.set("key","value",nx=True)

如果key存在了,则不会覆盖原有的数据。

 redis的数据都保存在内存中,查询起来非常快。可以满足对查询速度要求很快但查询逻辑简单的查询。

对于数据超百万级的,需要使用redis的hash.存储相同的数据,hash消耗的内存只有字符串的四分之一。

对于不知道有多少key的情况,不能冒然使用keys *,甚至导致redis失去响应。

 

列表的创建,查询和修改

1.列表list是redis中的另一种数据结构。

列表就像一根平放的水管,既可以从左边塞数据,也可以向右边塞数据,可以从左边取数据也可以从右边取数据。

redis-cli种插入数据,使用push.

左边插入,lpush value1....value2...

右边插入,rpush  value1...value2

用lpush插入数据的流程如图所示

用rpush和lpush插入数据的写法完全相同。

查看列表的长度,使用llen,命令格式是llen key

根据索引查看数据

使用lrange来根据索引查看数据

索引从最左边开始,从0开始到长度-1.

索引查看数据的命令格式为:

lrange 0 开始索引 结束索引

lrange example_list 6 6

lrange key start stop

弹出数据,使用pop,分为lpop,rpop

lpop,左弹出 lpop key

rpop 右弹出 rpop key 

弹出的数据会被从列表中删除。

修改数据lset 

lset key index 新的值
lset example_list 3 me

python如何插入数据

 

 把多条数据使用一个列表保存,然后在这个列表“左侧加※”后作为参数加入到lpush或者rpush

读取数据

首先查看列表长度llen(key)

需要解码,使用decode()

从左右弹出数据使用lpop,rpop,

被弹出来的数据也是bytes类型,所以仍需要解码

列表的应用:

 在工程中,redis列表一般用来作为一个队列,存放一批可以使用相同逻辑处理的数据

在一个互联网公司,需要在除夕给10万个用户发送祝福短信,假设一台服务器1秒钟可以发送一个短信,现有10台服务器,需要2.7小时完成任务。

为了保证不漏掉客服,也不能重读发送。

不停的从redis获取手机号调用发送接口。

模拟程序:

 

import json

import redis

client = redis.Redis(host="localhost", port=6379)


def send_sms(phone_number):
    print("发送对象手机", phone_number)
    print("啦啦啦啦啦")


while True:
    phone_info_bytes = client.lpop("phone_queue")
    if not phone_info_bytes:
        print("短信发送完毕")
        break
    phone_info = json.loads(phone_info_bytes)
    retry_times = phone_info.get("retry_times", 0)
    phone_number = phone_info["phone_number"]
    result = send_sms(phone_number)
    if result:
        print(f"手机号:{phone_number} 短信发送成功!")
        continue
    if retry_times >= 3:
        print(f"重试超过三次,放弃手机号{phone_number}")
        continue
    next_phone_info = {"phone_number": phone_number, "retry_times": retry_times + 1}
client.rpush("phone_queue", json.dumps(next_phone_info))

 集合set的创建和修改

集合sets是redis的基本数据结构之一

集合里数据不能重复,也没有顺序,所以不存在左右侧区分。

集合的首字母是s,添加是“add”,所以集合中添加数据是“sadd”.

sadd key value1 value2 value3

set集合中都是无序的。

查询集合数据量的命令是scard,其中s是集合sets的首字母,card是cardinality 基数的缩写

scard key

获取数据命令spop

命令格式:

spop key count ,如果count省略,则表示随机获取1个数据,如果count大于1,则获取多条数据

获取集合中的所有数据

smembers key不会删除数据,但是数据大慎用,或导致系统i/o资源耗尽,redis失去响应。

 要删除特定元素,可以使用命令“srem”

srem key value1....value2...value3

集合的交集

在数学中,有集合的交集,并集,差集,在redis中也存在这样的概念。

交集:既属于A又属于B的

在redis中使用sinter求交集

sinter key1,key2,key3

 

集合的并集

A和B集合的所有去重数据。

sunion key1,key2,key3...

 

集合的差集

只属于一个集合,不属于另外一个集合的数据构成的集合。

sdiff key1,key2,key3

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

Pycharm文件打开方式

Pycharm修改文件默认打开方式 新下载了一个Pycharm,建了个小demo,期间产生了一个sqlite3文件,由于是第一次打开,就弹出选择打开方式的对话框,手一块直接点了个Text,然后就乱码了: 那我...

osc_fi9eaftu
28分钟前
8
0
微信域名检测中反应速度的重要性

随着微信域名检测的普及,越来越多的人重视这方面有个客户是这样跟我说的,他现在用的那个检测有频率限制 最快只能一秒检测一个, 并发多的时候是不能边跳转边检测的, 只能写到计划任务里面...

mkapi01
29分钟前
18
0
状压dp大总结1 [洛谷]

前言 状态压缩是一种\(dp\)里的暴力,但是非常优秀,状态的转移,方程的转移和定义都是状压\(dp\)的难点,本人在次总结状压dp的几个题型和例题,便于自己以后理解分析状态和定义方式 状态压缩...

osc_s28jz759
30分钟前
17
0
aspnet core 2.1中使用jwt从原理到精通一

目录 原理; 根据原理使用C#语言,生成jwt; 自定义验证jwt; 使用aspnetcore 中自带的类生成jwt; 学有所得 了解jwt原理; 使用C#轻松实现jwt生成和验证 原理 jwt对所有语言都是通用的,只要...

osc_1ls4yaq1
32分钟前
11
0
github上DQN代码的环境搭建,及运行(Human-Level Control through Deep Reinforcement Learning)conda配置

最近师弟在做DQN的实验,由于是强化学习方面的东西,正好和我现在的研究方向一样于是我便帮忙跑了跑实验,于是就有了今天的这个内容。 首先在github上进行搜寻,如下图: 发现第一个星数最多...

osc_252iaxru
33分钟前
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部