Home Backend Development PHP Tutorial phalapi-caching usage and redis expansion

phalapi-caching usage and redis expansion

Dec 23, 2017 pm 04:28 PM
redis cache

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);
Copy after login

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
Copy after login

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 of this Website
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

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to build the redis cluster mode How to build the redis cluster mode Apr 10, 2025 pm 10:15 PM

Redis cluster mode deploys Redis instances to multiple servers through sharding, improving scalability and availability. The construction steps are as follows: Create odd Redis instances with different ports; Create 3 sentinel instances, monitor Redis instances and failover; configure sentinel configuration files, add monitoring Redis instance information and failover settings; configure Redis instance configuration files, enable cluster mode and specify the cluster information file path; create nodes.conf file, containing information of each Redis instance; start the cluster, execute the create command to create a cluster and specify the number of replicas; log in to the cluster to execute the CLUSTER INFO command to verify the cluster status; make

How to clear redis data How to clear redis data Apr 10, 2025 pm 10:06 PM

How to clear Redis data: Use the FLUSHALL command to clear all key values. Use the FLUSHDB command to clear the key value of the currently selected database. Use SELECT to switch databases, and then use FLUSHDB to clear multiple databases. Use the DEL command to delete a specific key. Use the redis-cli tool to clear the data.

How to read redis queue How to read redis queue Apr 10, 2025 pm 10:12 PM

To read a queue from Redis, you need to get the queue name, read the elements using the LPOP command, and process the empty queue. The specific steps are as follows: Get the queue name: name it with the prefix of "queue:" such as "queue:my-queue". Use the LPOP command: Eject the element from the head of the queue and return its value, such as LPOP queue:my-queue. Processing empty queues: If the queue is empty, LPOP returns nil, and you can check whether the queue exists before reading the element.

How to use the redis command How to use the redis command Apr 10, 2025 pm 08:45 PM

Using the Redis directive requires the following steps: Open the Redis client. Enter the command (verb key value). Provides the required parameters (varies from instruction to instruction). Press Enter to execute the command. Redis returns a response indicating the result of the operation (usually OK or -ERR).

How to use redis lock How to use redis lock Apr 10, 2025 pm 08:39 PM

Using Redis to lock operations requires obtaining the lock through the SETNX command, and then using the EXPIRE command to set the expiration time. The specific steps are: (1) Use the SETNX command to try to set a key-value pair; (2) Use the EXPIRE command to set the expiration time for the lock; (3) Use the DEL command to delete the lock when the lock is no longer needed.

How to configure Lua script execution time in centos redis How to configure Lua script execution time in centos redis Apr 14, 2025 pm 02:12 PM

On CentOS systems, you can limit the execution time of Lua scripts by modifying Redis configuration files or using Redis commands to prevent malicious scripts from consuming too much resources. Method 1: Modify the Redis configuration file and locate the Redis configuration file: The Redis configuration file is usually located in /etc/redis/redis.conf. Edit configuration file: Open the configuration file using a text editor (such as vi or nano): sudovi/etc/redis/redis.conf Set the Lua script execution time limit: Add or modify the following lines in the configuration file to set the maximum execution time of the Lua script (unit: milliseconds)

How to use the redis command line How to use the redis command line Apr 10, 2025 pm 10:18 PM

Use the Redis command line tool (redis-cli) to manage and operate Redis through the following steps: Connect to the server, specify the address and port. Send commands to the server using the command name and parameters. Use the HELP command to view help information for a specific command. Use the QUIT command to exit the command line tool.

How to optimize the performance of debian readdir How to optimize the performance of debian readdir Apr 13, 2025 am 08:48 AM

In Debian systems, readdir system calls are used to read directory contents. If its performance is not good, try the following optimization strategy: Simplify the number of directory files: Split large directories into multiple small directories as much as possible, reducing the number of items processed per readdir call. Enable directory content caching: build a cache mechanism, update the cache regularly or when directory content changes, and reduce frequent calls to readdir. Memory caches (such as Memcached or Redis) or local caches (such as files or databases) can be considered. Adopt efficient data structure: If you implement directory traversal by yourself, select more efficient data structures (such as hash tables instead of linear search) to store and access directory information

See all articles