提示:看完本文,绝对使你的redis非常精通。
文章目录
前言
Redis(Remote Dictionary Server 远程字典服务器)是一个基于内存的开源数据库管理系统,属于 NoSQL 数据库的一种。Redis 支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等,这使得它不仅仅是一个简单的键值存储系统,还可以应用于许多不同的用例。Redis 是一个功能丰富、高性能的内存数据库,适用于许多场景,包括缓存、实时数据分析、消息队列等。它具有简单的 API 和丰富的功能,受到广泛的开发者和企业的欢迎和应用。
一、redis是什么?
redis与MySQL一样只是一个数据库管理系统,是一个服务程序。我们可以在RDM可视化软件中操作和查看数据库中的数据。redis是内存存储,Redis 将数据存储在内存中,因此具有快速的读写性能。它还可以通过异步方式将数据持久化到磁盘上,以防止数据丢失。这是redis的一大特点。
二、对redis数据类型的操作案例
2.1.对hash数据类型的操作
- 概念
哈希键(redis键)字段(hash中的键)值(hash中的值) - 设置或者是插入一个键值对,其中值是一个哈希表。
r = client.hset(‘hash01’, ‘k1’,‘v1’)
多重:r = client.hmset(‘hash01’,{‘k2’: ‘v2’, ‘k3’: ‘v3’}) - 获取指定键对应的哈希表中的指定键对应的值
r = client.hget(‘hash01’, ‘k1’)
多重:r = client.hmget(‘hash01’, [‘k1’, ‘k2’]) - 删除指定键对应的哈希表中的指定键所在的键值对
r = client.hdel(‘hash01’, ‘k1’) - 使指定键对应的哈希表中的指定键对应的数字自增(所对应的值
应该是数字或者是数字型字符串)
r = client.hincrby(‘hash01’,‘k001’) - 判断是否存在值
print(client.hexists(‘hash01’, ‘k001’)) - 以下供大家根据函数名自由学习
r = client.hgetall(‘hash01’)
r = client.hvals(‘hash01’)
r = client.hkeys(‘hash01’)
r = client.hlen(‘hash01’)
2.2.对zset数据类型的操作
- 概念
通过权重来实现排序。 - 添加zset数据类型的键对应的值
r = client.zadd(‘zset0017’, {
‘v1’: 100,
‘v2’: 200
}) - 闭区间,返回第几名到第几名,是否带上权重,从zset0017中寻找。
r = client.zrange(‘zset0017’, 1, 2, withscores=1) - 移除zset中指定的值
r = client.zrem(‘zset0017’, ‘v5’) - 返回权重在0-100之间的值
r = client.zrangebyscore(“zset2”,0,100) - 将zset2何zset3的交集存到zset4中权重可以通过指定参数来确定。
r = client.zinterstore("zset4",["zset2","zset3"])
- 以下供大家根据函数名自由学习
r = client.zrevrange("zset2",0,2,withscores=True)
r = client.zrevrangebyscore("zset2",100,0,withscores=True)
r= client.zscore("zset2","v5")
r = client.zcount("zset2",10,100)
r = client.zincrby("zset2",50,"v5")
2.3.对list数据类型的操作
- 以下供大家根据函数名自由学习
r = client.lpush("l2",1,3,5)
r = client.rpush("12",0,-1,-3,-5,-7)
r = client.lpop("l2")
r= client.rpop("l2")
r = client.lset("12",4,"-30")
# 没有rset,因为lset中的l是list的意思,不是lift的意思。
r = client.linsert("l2","before","8","0.5")
三.使用redis来缓存MySQL中的数据
import random
import pymysql
import redis
# con = pymysql.connect(user='root',password='123456')
# con.select_db('qiku')
# cur = con.cursor()
#
# # sql = "create table comment (id int primary key not null auto_increment," \
# # "score int default 0, " \
# # "create_time datetime default current_timestamp)"
# # cur.execute(sql)
#
#
# # 插入一万个数据
# sql = "insert into comment (score) values (%s)"
# args = [(random.randint(1, 5),) for i in range(10000)]
# line = cur.executemany(sql, args=args)
# print("影响行数", line)
# con.commit()
#
# cur.close()
# con.close()
def get_comments_top10():
# 首先从 redis 中尝试获取!
client = redis.StrictRedis(password="123456", db=0)
info = client.lrange("comment_top10", 0, 9) # 名为comment_top10的键,值为一个列表。
if info:
print(f"从redis取值")
temp = []
for data in info:
data = data.decode().split("-")
temp.append((data[0], data[1]))
datas = tuple(temp)
else:
print(f"从mysq取值")
con = pymysql.connect(user="root", password="123456", database="qiku")
cur = con.cursor()
sql = "select id, score from comment limit 10"
cur.execute(sql)
datas = cur.fetchall()
for data in datas:
client.lpush("comment_top10", f"{data[0]}-{data[1]}")
client.expire("comment_top10", 10)
cur.close()
con.close()
client.close()
return datas
if __name__ == '__main__':
result = get_comments_top10()
print(result) # 格式是一个大元组,里面是每一个小的元组!
前半部分注释掉的是像MySQL中插入数据的代码。后面是使用redis来缓存mysql的数据。
总结
Redis作为一种基于内存的开源数据库管理系统,以其高性能、丰富的数据结构和多功能特性而闻名。其支持的数据结构包括字符串、哈希表、列表、集合、有序集合等,使得它不仅仅是一个简单的键值存储系统,还可以应用于各种复杂的场景。通过将数据存储在内存中,Redis实现了快速的读写操作,同时通过异步方式将数据持久化到磁盘上,以确保数据安全。除此之外,Redis还支持发布/订阅模式,可以用于实现消息队列、实时通信等功能。作为缓存服务器,Redis可以显著提高数据读取速度,降低后端数据库的压力。其原子操作能够实现高效的计数器功能,例如网站访问量统计等。总之,Redis以其简单的API、高效的性能和丰富的功能,成为了企业和开发者首选的内存数据库管理系统,广泛应用于缓存、实时数据分析、消息队列等各种场景。