Redis,数据库的好伙伴

小夏 科技 更新 2024-02-08

Redis是一个使用内存来存储数据的键值数据库,因此经常用于需要缓存数据的情况,可以缓解许多后端数据库的压力。 在本文中,我们将简要介绍 Redis 提供的功能以及可以使用的位置。

Redis官网列出了每个支持的命令,所以让我们先来看看最简单的一个

redis> set mykey "hello"redis> get mykey"hello"
如前所述,Redis 是一个具有键值结构的数据库,因此最简单的设置是设置键的值,如果要检索它,可以使用 get。

redis> set mykey "10"redis> decr mykey(integer) 9redis> incr mykey(integer) 10
顾名思义,它的意思是为某个键加一减一,就像在编程语言中一样mykey++mykey--

还有incrbydecrby,您可以指定要添加或减少的量。

redis> hset mydata name "nick"redis> hset mydata nickname "nicknick"redis> hget mydata name"nick"
H是hash的意思,所以可以访问一个值下的字段,这样就可以更多样化地使用它,比如可以定义key的规则是:post+文章id,可以存储这篇文章的点赞和回复数量等,这样就不必每次都去数据库重新查询了。

redis> sadd myset "nick"redis> sadd myset "peter"redis> sadd myset "nick"redis> scard myset(integer) 2
sadd 的 s 是set意思是,这样set指已了解数据结构的那个set,其中不会有重复的内容。

redis> lpush mylist "a"redis> lpush mylist "b"redis> rpush mylist "c"redis> lrange mylist 0 -11) "b"2) "a"3) "c"redis> lset mylist 0 "d"redis> lrange mylist 0 -11) "d"2) "a"3) "c"
这里的数据结构是:list,可以选择从左边或右边推取值,对应的命令是lpushrpushlset它指定索引的值。

lrange您可以打印出指定范围的值,是的此形式表示最后一个值。

Redis的好处是速度非常快,所以如果你遇到一些需要快的情况,可以考虑看看Redis能不能帮到你,这里有几个我实际用过的例子。

其实短**的原理很简单,就是在对原来的**(比如哈希算法)做了一系列的计算后,得到一个短字符串,位数或者你想决定什么符号,然后把这组对应关系存储在数据库中,当别人查询到对应的键时, 您将被重定向到相应的**。

因为它是与这个键值的一对一关系,所以它非常适合 Redis。

如果你不使用像 Redis 这样的键值缓存,你就必须每次都从数据库中查询它。 如果数据量小也好,但是当数据量变大时,时间会增加,对数据库的负担也会增加,所以我认为在数据库和逻辑层之间引入一层缓存是一个不错的选择。

实现的过程也很简单,用户加一个短**,系统计算出abc123对应如上将key=abc123, value=写入数据库,但是存储在redis中 当用户点击:abc123 this**时,去redis查看是否有这个key,重定向到对应的**如果没有,就得去数据库检查,检查后记得给redis写一份副本 如果你的数据有很多数据,而且不想花大钱准备一个大内存的redis服务器(数据库是存储在硬盘上,Redis是存储在内存中,数据库在存储成本方面会便宜很多),就可以使用Redisexpire这个功能。

存储数据时,可以添加新数据expire time当这个时间到了,密钥将被自动清除。 例如,短过期时间可以设置为 7 天,如果 7 天没有被任何用户访问,它将被自动删除。

这样做的好处是可以减少内存的使用量,只保留一些热数据在 Redis 中,其他不太受欢迎和不常访问的数据在数据库中,然后在访问时写入 Redis。

其实上面说的短**服务,除了缩短的功能**之外,还有一个重要的点,那就是:统计数据。 例如,Google Short** 会为您提供:访问次数、图表、使用什么设备等,这些都是 Short** 服务的核心。

如果要做这个功能,那么就要记录每一个请求,或者至少记录请求的内容(用的是什么手机,时间点,IP),这样数据才能显示给用户。

如果存在数据库,并且每次都从数据库中读取读取,则会导致一些性能问题,例如每次刷新统计页面时,都必须重新:select conut(*)from short_url where一次,您可以捕捉到总共有多少人访问过。

记住我们提到的incr是吗? 这不是它派上用场的地方! 您可以定义密钥的格式,例如:abc123:visit 表示对 abc123 的访问总数,然后,只要执行每个请求:incr abc123:visit,这个键就是你想要的号码,以后从Redis中读取就行了。

除此之外,假设您想提供 重复 IP 访问的数量 ,前面提到过set这很合适。 你可以将每个请求的 ** IP 扔到一个集合中,只要你使用它scard你可以知道有多少重复的IP,这很方便吧?

我曾经做过一个项目,有以下要求:

中午12点对用户开放**,答完问题后会看到自己的排名(按答题时间排序),只有前300名才会根据自己的排名获得奖品,然后就可以考虑需要在哪里与数据库互动。

进入**时,应先检查是否有300人以上,如果有,会提示活动结束(选择count(*),然后检查用户是否回答了问题,如果你回答了问题,则显示排名(选择..where id=..如果您还没有回答问题,将显示答案页面,并在答案完成后显示用户名(插入 ..)id=..由于本次活动只有前300名获奖者有奖品,估计如果有10,000名用户,活动可能在10秒内结束!

在 10 秒内同时对你的数据库进行如此多的查询可能会有点让人不知所措,仔细观察,你会发现有很多地方不需要用数据库来做,如果你用 Redis 来做,那就更好了!

例如,您可以像这样计划它:

使用 key:isover 存储活动是否结束,使用 account 作为键,将用户的排名存储在其中,上述过程可以改写为:

进入**时,进入redis读取isover,检查活动是否结束,检查用户是否回答了问题,查看redis用户账号的key中是否有数据,如果还没有回答问题,回答完问题,写入数据库,将排名写入redis,如果该用户的排名为>=300, 设置 isover = true 最初需要对数据库进行 3 次操作,但现在减少到只有最必要的操作,其余的都可以由 Redis 处理。而且因为Redis是一个使用内存来存储数据的数据库,所以处理速度非常快! 此外,我们没有很多密钥(只有 10,000 多个密钥),而且我们使用的内存非常少。

这样一来,在Redis的帮助下,可以顺利解决原数据库负载过重,可能速度慢甚至挂断的问题。

如果下次你有一个用户很多的项目,或者需要快速返回数据,但又担心数据库撑不住,不妨考虑一下是否可以导入 Redis,或者其他也缓存的服务。 事实上,在很多情况下,如果缓存使用得当,可以减轻很多数据库的负担,加快响应速度。

相似文章

    Redis 数据库的事务

    Redis Transaction Essence 命令的集合!事务中的所有命令都已序列化。在交易执行过程中,它是按顺序执行的!一次性的 顺序的 独家的!执行几列命令!队列集设置为执行 Redis事务没有没有隔离层的概念!所有命令都不会直接在事务中执行!它只会在命令启动时执行!Redis 在单个命令...

    Redis 数据库组织(必需)。

    什么是 Redis?Redis是基于C语言开发的开源数据库,与传统数据库不同,Redis数据存储在内存 in memory database 中,读写速度非常快,在缓存方向上应用广泛。此外,Redis 还存储 KV 键值对数据。为了满足不同业务领域的需求,Redis内置了数据类型实现。此外,Redi...

    Redis 数据库 RDB 和 AOF

    内存中数据集的快照以指定的时间间隔写入磁盘,在行话中也称为快照快照,通过将快照文件直接读入内存来恢复。Redis 会为持久化创建一个单独的 fork 子进程,并先将数据写入临时文件,然后在持久化过程结束后使用这个临时文件。替换上一个持久化的文件。在整个过程中,主进程不执行任何 IO 操作。这确保了极...

    Redis数据库的配置文件

    互联网。bind ... 绑定 IP 保护模式是。端口 端口设置。一般 一般 daemonize yes 作为守护进程运行,默认值为 no,我们需要将其打开 yes!pidfile var run redis .PID 如果在后端运行 我们需要指定一个 pid 文件!日志。specify the s...

    蚂蚁数据库是国产数据库发展的信息创新政策支撑

    由于中国在信息技术领域起步较晚,国内大量市场份额被国际IT巨头占据,甚至长期处于垄断地位,这也给了一些国家试图通过挑起科技和摩擦来平衡中国发展的机会。为了解决可能存在的安全风险,重要信息系统和关键基础设施使用的核心信息技术产品和关键服务必须是可控的 可研究的 可开发的 可生产的。数据库作为信息技术发...