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

在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了!!

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

---------

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

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

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值