Home  >  Article  >  Backend Development  >  phalapi-caching usage and redis expansion

phalapi-caching usage and redis expansion

*文
*文Original
2017-12-23 16:28:551932browse

Cache, used by many websites, especially when dealing with high concurrency, caching is essential. This article is based on phalapi to explain the actual use of cached Redis. I hope it will be helpful to everyone.

Preface

When we are developing a project, we may encounter many problems, such as message push, sending emails, sending text messages, and concurrency failure. At this time, it is time to turn Let’s go to the commonly used cache to save us. Next, let’s talk about the actual use of cached Redis to solve practical problems. Here is the basic knowledge based on redis, and a brief look at the redis expansion document of PhalApi. Come and read this Section.


#1. What problems can be solved

When we use a technology, of course we use it to solve problems. So what specific problems can we use caching technology Redis to solve?

1.1 Caching result set

Here is an example and you will understand what caching result set means after looking at it

//从缓存redis的clubcache库中查询club表where条件是city,city值是$city
$cache = DI()->redis->get_Time('club'.'city'.$city,'clubcache');
//如果查询到了就直接返回缓存的结果
if($cache){
    return $cache;
}
//如果不存在从数据库里面获取结果然后存入redis缓存key的条件和取值时一样,最后一个参数为过期时间
$rs = $this->getORM()->select('*')->where('city',$city)->fetchAll();
DI()->redis->set_Time('club'.'city'.$city,$rs,'clubcache',600);

What we do above is to save the results for 600 seconds. Querying again within 600 seconds will get the same results

1.2 Queue processing

There is a key point in the application of Redis to time. The function is its queue

Let’s first go through a few special redis functions

//写入队列左边
set_lPush
//写入队列左边 如果value已经存在,则不添加 
set_lPushx
//写入队列右边
set_rPush
//写入队列右边 如果value已经存在,则不添加
set_rPushx
//读取队列左边
get_lPop
//读取队列右边
get_rPop
//读取队列左边 如果没有读取到阻塞一定时间
get_blPop
//读取队列右边 如果没有读取到阻塞一定时间
get_brPop

For example, when we are doing business such as message push, sending emails, and sending text messages, we need to request the first For third-party interfaces, the request speed is determined by the third party. For example, a push interface on WeChat is 200ms. If it is put into our API business, a huge problem will arise. User access speed will drop extremely. The solution to this kind of problem is The queue process is as follows

When we receive a push request from the user

        ↓

Add the push request to the queue API without performing any operation (such as adding it to the left)

(Reading the right side is backward and out, if you read the left, you are advanced first)

Then execute the push logic of the response

Generally our script is an infinite loop, or the shell makes a scheduled request. We will use blocking when the data cannot be read to solve the problem of too fast loops where the value cannot be reached. Question

1.3 Temporary data storage

Temporary data does not require too much explanation, just an example is enough

For example, when we obtain the verification code, we need to Is the verification code stored in the database? I think it is not necessary, and the database is not easy to perform expiration operations. We can only judge by ourselves

Then we use redis to store the verification code into redis and then give an expiration time. This solves this problem very well

1.4 Database

Using redis as a database is a relatively in-depth use. Here are some thoughts

After everyone, the service can be distributed , but it is not easy to distribute most databases, so many systems are spliced ​​and piled up in the database. Of course, you can use cache to store the result set, but this solution is convenient for treating the symptoms rather than the root cause. When discussing with children's shoes, I got A convenient solution is to use redis as the first database and mysql as the metadata database.

After doing this operation, the server will automatically synchronize the hot data to redis and store the cold data in mysql. When the cold data is used, After the data is stored in redis, most of the user's operations are basically operations based on redis

The cost of this implementation is relatively high. It requires a lot of energy to implement redis data synchronization encapsulation, use where queries, etc. Do, in the later stage I plan to make a general extension


#2. Standardized use

In fact, the above categories have been almost covered, why still I have to take out a separate paragraph to talk about the specifications, because the cache is not like a database. When you need to check the cache, if all the data is accumulated in a redis library, you will be very painful.

But Redis supports multiple libraries, so it needs a set of specifications to divide them. Here I will share how I use

0~10 libraries as normal business libraries, that is, push queues and temporary data. Each library only Store data for a business. For example, WeChat push data exists in 5 libraries, and email push data exists in 6 libraries. Temporary data for sending verification codes is stored in 3 libraries, and so on. If you feel that 10 libraries are not enough, you can use it according to the business Add

10 or more libraries as cache libraries to store the result set data of each table, or other data

The naming convention of all keys must contain type + table name + condition


Related recommendations:

php file cache class usage example analysis

PHP caching mechanism

Analysis on Redis cluster failure


The above is the detailed content of phalapi-caching usage and redis expansion. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn