首页 > 数据库 >python操作redis的数据类型(超详细!!)

python操作redis的数据类型(超详细!!)

时间:2024-08-30 18:50:49浏览次数:6  
标签:set name python 数据类型 redis nihao key scores print

在Web应用发展的初期,那时关系型数据库受到了较为广泛的关注和应用,原因是因为那时候Web站点基本上访问和并发不高、交互也较少。而在后来,随着访问量的提升,使用关系型数据库的Web站点多多少少都开始在性能上出现了一些瓶颈,而瓶颈的源头一般是在磁盘的I/O上。而随着互联网技术的进一步发展,各种类型的应用层出不穷,这导致在当今云计算、大数据盛行的时代,对性能有了更多的需求,主要体现在以下几个方面:

> 1. 低延迟的读写速度:应用快速地反应能极大地提升用户的满意度
> 2. 支撑海量的数据和流量:对于搜索这样大型应用而言,需要利用PB级别的数据和能应对百万级的流量
> 3. 大规模集群的管理:系统管理员希望分布式应用能更简单的部署和管理

目录

1、字符串操作!!

设置键的有效期

自增自减

2、hash(哈希)操作

3、list操作

3、集合(set)操作

从key对应的集合中随机获取 numbers 元素

删除key对应的集合中值为value的成员

4、有序集合操作

按照索引范围获取key对应的有序集合的所有元素

删除key对应的有序集合中值是value的成员

5、键操作


开始学习python操作redis的数据类型

在我的上一篇文章中已经讲了如何将python连接redis,那么我们接下来先前往powershell

redis-server

打开

(请不要把这个页面关闭了)

接下来在python连接redis:

import redis
pool = redis.ConnectionPool(host='127.0.0.1', port='6379')
r = redis.Redis(connection_pool=pool)

这里就完成连接了,接下来我们测试一下是否连接成功

r.set('name', 'zhangsan')
print(r.get('name))

运行,返回:

b'zhangsan'

我们也可以通过在powershell中输入:

redis-cli

然后输入:

get name

得到测试的答案

当当,连接成功!!

然后我们正式开始python对redis的操作 

1、字符串操作!!

r.set('bar', 'foo')  # set就是添加字符串和对应的值
print(r.get('bar'))  # 而get自然就是获取啦!!

不允许对已经存在的键设置值!!

也就是说如果我们运行下面这串代码:

# 先set一次
r.set('name', 'zhangsan')
print(r.get('name'))
# 对同一个key set第二次
r.set('name', 'lisi')
print(r.get('name'))
# set第三次
r.set('name', 10)
print(r.get('name'))

这就是运行结果:

b'zhangsan'
b'lisi'
b'10'

也就是说每次set都会覆盖那个值。

设置键的有效期

就是使用下列方法

r.setex('good', 10, 'nihao')

’good‘, ’nihao‘就是你设置的键值,而10为限定的时间 

然后我们可以用以下代码来验证下:

r.setex('good', 10, 'nihao')
for i in range(12):
    b = r.get('good')
    print(str(i) + str(b))
    time.sleep(1)

可以看到结果为:

0b'nihao'
1b'nihao'
2b'nihao'
3b'nihao'
4b'nihao'
5b'nihao'
6b'nihao'
7b'nihao'
8b'nihao'
9b'nihao'
10None
11None

自增自减

首先我们让自己设定的值一点点增加:使用这个方法

r.incr(name, amount)

name是你设定的key的名称, 而amount则是你要在这行代码下添加多少数值

我们可以先set一个key,然后使用incr看看:

r.set('name', 20)
r.incr('name', 10)
print(r.get('name'))

结果:

b'30'

我们就实现了让’name‘增加了10

自减是

r.decr(name, amount)

用法是跟incr一样的

2、hash(哈希)操作


# hash操作
r.hset('info', 'name', 'nihao')
print(r.hget('info', 'name'))

给hash实现批量设置

r.hmset('info', {'age':'11', 'sex':'man'})
print(r.hmget('info', 'age'))

那如何一次获得hash里所有的值呢:

print(r.hgetall('info'))

即可

3、list操作

r.rpush('scores', '100', '90', '80')  # 'scores': ['100', '90', '80']

这里的rpush解释:

其实r就是right的意思,但怎么理解呢,

就是比如说,这里是先放入100, 然后将90放到100的右边, 80再放到90的右边

那我们如何跟“get()”一样显示出来呢:

print(r.lrange('scores', 0, -1))

这里的lrange里的“l”, 指的就是“left”

0指的是第一位,而-1则是最后一位

这里的意思就是0到-1,也就是涵盖所有内容的意思

这里我们使用lpush试一下:

r.lpush('scores','120')
print(r.lrange('scores', 0, -1))

我们可以在list里进行一个切片操作

用到的方法是:

r.linsert(name, where, refvalue, value)

那么就是你的列表的key名,where:“before” or “after”

refvalue就是参考的位置, value是要插入的值

我们沿着之前的代码来实战一下:

r.linsert('scores', 'after', '100', '95')
print(r.lrange('scores', 0, -1))
r.linsert('scores', 'before', '100', '110')
print(r.lrange('scores', 0, -1))

结果:

[b'100', b'90', b'80']
[b'120', b'100', b'90', b'80']
[b'120', b'100', b'95', b'90', b'80']
[b'120', b'110', b'100', b'95', b'90', b'80']

发现就是在scores的前面(“before”) or  后面(“after”)分别插入了110 or 95

删除首位

r.lpop('scores')

执行这行代码打印,便会发现scores的最左边的值被删掉了,它会先返回一遍

取出scores的指定值:

print(r.lindex('scores', 0))

便取出了第一位120


3、集合(set)操作

我们可以用sadd的方法创造一个集合:

r.sadd('human_set', 'zhangsan', 'lisi', 'wangwu', 'zhaoliu')

这样就创建好了一个键为human_set的集合

用setmambers便可以调出所有成员了

print(r.smembers('human_set'))

返回结果为:

{b'lisi', b'zhaoliu', b'wangwu', b'zhangsan'}

从key对应的集合中随机获取 numbers 元素

我们可以使用srandmember()方法,

注意!!是member不是members,不要多输入了“s”

print(r.srandmember('human_set', '2'))

返回的结果为:

[b'wangwu', b'zhangsan']

这就随机选取了两个元素

删除key对应的集合中值为value的成员

用的是r.srem(),那么我们用这个方法删掉lisi

r.srem('human_set', 'lisi')

然后我们print一下:

print(r.smembers('human_set'))

结果为:

{b'wangwu', b'zhaoliu', b'zhangsan'}

可以知道lisi已经被删掉了

4、有序集合操作

我们先用r.zadd创建一个有序集合:

r.zadd('dageada', {'yuan':'78', 'rain':'20', 'alvin':'89', 'eric':'45'}
        )

我们再来打印它:

print(r.zrange("dageada", 0, -1))

输出的结果是:

[b'rain', b'eric', b'yuan', b'alvin']

按照索引范围获取key对应的有序集合的所有元素

既然是有序数列,那我们就要发挥“序”的功能了

首先是把他们按从小到大的顺序排好

print(r.zrange('dageda', 0, -1, withscores=True))

输出的结果为:

[(b'rain', 20.0), (b'eric', 45.0), (b'yuan', 78.0), (b'alvin', 89.0)]

将它好好按照了从小到大的顺序排好了!!

那从大到小排呢:

print(r.zrevrange('dageda', 0, -1, withscores=True))

输出的结果为:

[(b'alvin', 89.0), (b'yuan', 78.0), (b'eric', 45.0), (b'rain', 20.0)]

删除key对应的有序集合中值是value的成员

可是有的人很坏,我想踢掉它,那该怎么办呢??

那就要使用zrem()了

print(r.zrem('dageda', 'yuan'))

我们再输出一下:

[b'rain', b'eric', b'alvin']

我们就把“yuan”给删掉了

终于走到最好一步啦!!

5、键操作

我想学习了之前内容的你,到这里已经得心应手了

print(r.exists('scores'))  # 查询键是否存在
print(r.keys('*'))         # 查询所有的键
r.expire('scores', 10)  # 设置过期时间

其中keys()是查询所有的键的,那么我们可以

print(r.keys(*d*))

就会得到所有关于d的键

输出结果:

[b'scores']

恭喜你!!能完全掌控redis了!!

本文章的源码也绑定该文章了

---------

由衷的希望这篇文章能帮助到你

原创不易,还希望能小小的点赞支持一下

标签:set,name,python,数据类型,redis,nihao,key,scores,print
From: https://blog.csdn.net/heilai4/article/details/141609087

相关文章

  • 【C#】一个喜欢用Python的菜狗在尝试Linq之后总结的常见用法以及示例
    1.筛选(Where)筛选集合中的元素。类似python中列表推导式中的if示例int[]numbers={1,2,3,4,5,6};varevenNumbers=numbers.Where(n=>n%2==0);foreach(varnuminevenNumbers){Console.WriteLine(num);}//输出:2,4,6python中的实现[if......
  • Python处理大规模数据集
    Python处理大规模数据集问题描述解决方法分块写入两个sheet代码实现:代码解释:运行效果:分块读取数据写到Excel代码实现:代码解释:总结问题描述最近的项目中需要处理接近160万条数据的Excel,并将处理结果写入新的Excel表。Excel一张表的数量上限是100万,直接写表会报错,而......
  • Python中的数据类型知识汇总
    Python中的数据类型是编程的基础,它们决定了数据如何存储和操作。下面是Python中一些主要的数据类型及其详细介绍:基本数据类型1.1整型(int)描述:表示整数,没有小数部分。示例:a=5特点:可以表示正数、负数和零,范围根据系统架构的不同可能会有所变化。1.2浮点型(float)......
  • redis-热key大key
    BIGKEY作者:w08eBigkey,hotkey傻傻分不清楚什么是大keyRedis中的"大Key"通常指的是一个占用较大内存空间的键(Key)。这可能会对Redis的性能产生负面影响,因为大Key可能导致内存碎片化、删除延迟以及网络传输时间延长等问题。大Key可能出现在不同的场景中,例如:......
  • redis-缓存崩溃
    缓存崩溃作者:w08eredis实战之各种崩溃雪崩击穿穿透以及预热缓存雪崩回答话术缓存雪崩是应用系统指在某个时间点上,缓存中的大部分数据同时失效,导致大量的请求直接访问底层数据库或后端服务,从而造成数据库负载剧增,甚至导致数据库崩溃的情况。通常情况下,缓存中的数据会......
  • redis-持久化
    redis数据持久化作者:w08e数据持久化三连问redis宕机数据会丢失吗回答话术先说结论,如果我们没开启任何持久化机制,那么会丢失全部数据,否则只会丢失部分数据,丢失数据的多少取决于持久化配置。Redis提供了两套持久化机制,RDB快照和AOF日志文件追加。RDB它会根据情况定期......
  • Redis多线程特性
    Redis6.0版本之前是用单线程模型,6.0版本为什么使用多线程?Redis几乎不存在CPU成为性能瓶颈的情况,主要受限于内存和网络IO内存优化内存淘汰策略增加内存硬件网络IO优化Redis在处理客户端的请求时,包括获取(socket读)、解析、执行、内容返回(socket写)等都由一个顺序串......
  • Python中的数据类型知识汇总
    Python中的数据类型是编程的基础,它们决定了数据如何存储和操作。下面是Python中一些主要的数据类型及其详细介绍:基本数据类型1.1整型(int)描述:表示整数,没有小数部分。示例:a=5特点:可以表示正数、负数和零,范围根据系统架构的不同可能会有所变化。1.2浮点型(floa......
  • Python概述
    Python是一种高级编程语言,由GuidovanRossum于1991年开发。Python的设计目标是易于阅读、易于学习、易于使用,同时具有强大的功能和灵活性。它具有清晰简洁的语法,使得编写Python代码变得简单而愉快。一、为什么要学习Python?1.技术趋势:Python以其引人注目的特性和广泛的应......
  • Python 摸鱼神器: 打造你的个人摸鱼倒计时器
    为什么要做摸鱼倒计时器?在忙碌的工作生活中,我们经常忽视了劳逸结合的重要性。一个摸鱼倒计时器不仅能提醒我们适时放松,还能给我们带来一些小确幸。想象一下,当你看到距离下一个假期还有多少天时,是不是会感到一丝欣喜和期待呢?摸鱼倒计时器的核心原理我们的摸鱼倒计时器主要......