在Web应用发展的初期,那时关系型数据库受到了较为广泛的关注和应用,原因是因为那时候Web站点基本上访问和并发不高、交互也较少。而在后来,随着访问量的提升,使用关系型数据库的Web站点多多少少都开始在性能上出现了一些瓶颈,而瓶颈的源头一般是在磁盘的I/O上。而随着互联网技术的进一步发展,各种类型的应用层出不穷,这导致在当今云计算、大数据盛行的时代,对性能有了更多的需求,主要体现在以下几个方面:
> 1. 低延迟的读写速度:应用快速地反应能极大地提升用户的满意度
> 2. 支撑海量的数据和流量:对于搜索这样大型应用而言,需要利用PB级别的数据和能应对百万级的流量
> 3. 大规模集群的管理:系统管理员希望分布式应用能更简单的部署和管理
目录
开始学习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了!!
本文章的源码也绑定该文章了
---------
由衷的希望这篇文章能帮助到你
原创不易,还希望能小小的点赞支持一下