左手Mongodb右手Redis redis操作

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
左手Mongodb右手Redis redis操作的更多相关文章
- 左手Mongodb右手Redis
第二章,了解Mongodb保存数据 Mongodb对于每次插入的数据没有要求,字段可以随便变动,字段类型可以随意变动. Mongodb可以并发插入上万条文档,这是传统关系型数据库不能望其项背的. 1. ...
- 左手Mongodb右手Redis 第三章mongdb操作
mongodb查询操作 1.查询操作 db.getCollection('example_data_1').find({}) 查询所有的信息,相当于mysql中的select * from tabl ...
- 左手Mongodb右手Redis 第一章,进入Mongodb和Redis的世界
---恢复内容开始--- 1,为什么要使用非关系型数据库,关系型数据库咋滴,不能用嘛? 存在即合理,非关系型数据库的出现,那说明关系型数据库不适用了. 非关系型数据库(NOSQL)-->Not ...
- 左手Mongodb右手Redis 通过python连接mongodb
首先需要安装第三方包pymongo pip install pymongodb """ 通过python连接mongodb数据库 首先需要初始化数据库连接 "& ...
- 操作redis数据库 & 操作Excel & 开发接口
操作redis数据库: string类型 1. 增 set,传俩个参数 key value(只要是字符串就行)2. 删 delete 传一个参数 key3. 修改 set 在目标key重新传参 key ...
- Redis常用操作-----字符串
1.APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾. 如果 key 不存在, APPEND 就简单地将给定 ...
- Redis(三)Redis基本命令操作与API
一Redis 连接 Redis 连接命令主要是用于连接 redis 服务. 实例 以下实例演示了客户端如何通过密码验证连接到 redis 服务,并检测服务是否在运行: redis 127.0.0.1: ...
- redis java操作
Redis Java连接操作 连接到Redis服务器 import redis.clients.jedis.Jedis; public class RedisJava { public static ...
- python对缓存(memcached,redis)的操作
1.Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的 ...
随机推荐
- android button click事件
package a.a; import android.app.Activity;import android.os.Bundle;import android.view.View;import an ...
- python time 和日期相关模块
时间日期相关的模块 calendar 日历模块 time 时间模块 datetime 日期时间模块 timeit 时间检测模块 日历模块 calendar() 功能:获取指定年份的日历字符串 格式:c ...
- [Linux] 028 源码包安装过程
1. 安装准备 安装 C 语言编译器 下载源码包 如:apache 相应源码包下载地址 2. 安装注意事项 源代码保存位置:/usr/local/src 软件安装位置:/usr/local 如何确定安 ...
- Matplotlib基础使用
matplotlib 一.Matplotlib基础知识 Matplotlib中的基本图表包括的元素 x轴和y轴 axis 水平和垂直的轴线 x轴和y轴刻度 tick 刻度标示坐标轴的分隔,包括最小刻度 ...
- 2019牛客暑期多校训练营(第二场) - F - Partition problem - 枚举
https://ac.nowcoder.com/acm/contest/882/F 潘哥的代码才卡过去了,自己写的都卡不过去,估计跟评测机有关. #include<bits/stdc++.h&g ...
- 1233: [Usaco2009Open]干草堆tower
传送门 感觉正着做不太好搞,考虑倒过来搞 容易想到贪心,每一层都贪心地选最小的宽度,然后发现 $WA$ 了... 因为一开始多选一点有时可以让下一层宽度更小 然后有一个神奇的结论,最高的方案一定有一种 ...
- P4132 [BJOI2012]算不出的等式
传送门 看到这个式子就感觉很有意思 左边就是求一次函数 $y=\left \lfloor \frac{q}{p} \right \rfloor x$ 在 $x \in [0,(p-1)/2]$ 时函数 ...
- Android手机、电视(盒子) 打开ADB调试 一览表
手机.电视(盒子) 打开ADB调试 一览表 一.手机打开ADB调试方法 序号 名称 描述 方式 1 华为手机 EMUI 1.设置 ->关于手机-> 版本号 点击(4~5次)2.返回设置 - ...
- JVM(14)之 类加载机制
开发十年,就只剩下这套架构体系了! >>> 从本篇博文开始,我们就进入虚拟机类加载机制的学习了.那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要 ...
- 如何查找django安装路径
需要找到django的安装路径,官方说的那个方法不好用,国内搜索都是都不到的,后来谷歌搜到了很简单 import django django 这样就可以找django的安装路径了,真心不懂为什么国内都 ...