第十二章 学会Redis,看这一篇就足够了。【建议收藏】

提示:看完本文,绝对使你的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"02,withscores=True)
r = client.zrevrangebyscore("zset2"1000,withscores=True)
r= client.zscore("zset2""v5")
r = client.zcount("zset2"10100)
r = client.zincrby("zset2"50"v5")

2.3.对list数据类型的操作

  • 以下供大家根据函数名自由学习
r = client.lpush("l2"135)
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、高效的性能和丰富的功能,成为了企业和开发者首选的内存数据库管理系统,广泛应用于缓存、实时数据分析、消息队列等各种场景。

  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值