Redis放在控制器还是模型层?
在实际项目中,Redis大部分情况下应该放在控制器还是模型?
目前只做过两种方案:
控制器中:
大致的逻辑如下(不要纠结于方法名称):
class UserController extends Controller { public function index() { $userRedis = new UserRedis(); if (!$userInfo = $userRedis->find(['id' => 1000])) { $user = new User(); $userInfo = $user->find(['id' => 1000]); $userRedis->save($userInfo); } return $userInfo; } }
在这种情况下,模型还是独立存在的,数据库模型依然直接读取数据库,Redis模型读取Redis,两者互不影响,控制器从中协调。
模型:
class UserModel extends Model { public function find($conditions) { $userRedis = new UserRedis(); if (!$userInfo = $userRedis->find($conditions)) { $userInfo = $this->find($conditions); $userRedis->save($userInfo); } return $userInfo; } }
在这种情况下,控制器只需要调用一次接口方案,而无需关心内部实现,整个数据逻辑交给模型来处理。
在项目中实际用过Redis的朋友路过顺便分享一下自己的经验,大家集思广益一下。^_^
回复内容:
在实际项目中,Redis大部分情况下应该放在控制器还是模型?
目前只做过两种方案:
控制器中:
大致的逻辑如下(不要纠结于方法名称):
class UserController extends Controller { public function index() { $userRedis = new UserRedis(); if (!$userInfo = $userRedis->find(['id' => 1000])) { $user = new User(); $userInfo = $user->find(['id' => 1000]); $userRedis->save($userInfo); } return $userInfo; } }
在这种情况下,模型还是独立存在的,数据库模型依然直接读取数据库,Redis模型读取Redis,两者互不影响,控制器从中协调。
模型:
class UserModel extends Model { public function find($conditions) { $userRedis = new UserRedis(); if (!$userInfo = $userRedis->find($conditions)) { $userInfo = $this->find($conditions); $userRedis->save($userInfo); } return $userInfo; } }
在这种情况下,控制器只需要调用一次接口方案,而无需关心内部实现,整个数据逻辑交给模型来处理。
在项目中实际用过Redis的朋友路过顺便分享一下自己的经验,大家集思广益一下。^_^
优先模型层个人觉得似乎是比较好一点的方法,不论是维护还是逻辑
一般都放数据模型层吧
一般还是说放到模型层,然后封装一个方法,业务层在调用的时候,直接去调取方法就好了,而不用想着再去做缓存的事情。因为缓存在模型层都帮忙给做了。
只要跟数据读写有关的,还是放模型层比较合适
是我我就放模型层了,控制层控制逻辑流程和返回响应,逻辑复杂了看上去不会乱
放 Model 层。
原则:尽量屏蔽具体存储介质的差异。
Mysql、redis 对于项目都只是存储数据的,在代码里面应该不要钱解决存哪,提供统一的调用方式, UserMysql.find()
、UserRedis.find()
;
或者 User.find()
,User.findFromRedis()
默认调用从 mysql 读取,redis 操作折提供其他的函数
这个也是 ORM 的思想。
这取决于你的Model是否就等于数据库。
因为从你的$this->find来看,似乎是直接把Model的$this当做了数据库?
有两种选择:
不要把Model本身直接定义为数据库,而在Model里用redis和db类分别操作。如果redis和db里的操作都很少很简单,可以选择这样。
把Model定位为数据操作层,叫UserDbModel(对应你现在的UserModel),再定义另一个Model叫UserRedisModel(对应你现在的$userRedis),让两者地位平等,同时在Model层上加一层Logic层,处理缓存与数据库的关系,Controller变为只能调用Logic层。这种方式是我现在在用的,对复杂的逻辑而言可以显得更清晰。

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



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

The future of PHP will be achieved by adapting to new technology trends and introducing innovative features: 1) Adapting to cloud computing, containerization and microservice architectures, supporting Docker and Kubernetes; 2) introducing JIT compilers and enumeration types to improve performance and data processing efficiency; 3) Continuously optimize performance and promote best practices.

PHP is not dying, but constantly adapting and evolving. 1) PHP has undergone multiple version iterations since 1994 to adapt to new technology trends. 2) It is currently widely used in e-commerce, content management systems and other fields. 3) PHP8 introduces JIT compiler and other functions to improve performance and modernization. 4) Use OPcache and follow PSR-12 standards to optimize performance and code quality.

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHP is suitable for web development, with simple syntax and high execution efficiency. 2. Python is suitable for data science and machine learning, with concise syntax and rich libraries.

Redis uses hash tables to store data and supports data structures such as strings, lists, hash tables, collections and ordered collections. Redis persists data through snapshots (RDB) and append write-only (AOF) mechanisms. Redis uses master-slave replication to improve data availability. Redis uses a single-threaded event loop to handle connections and commands to ensure data atomicity and consistency. Redis sets the expiration time for the key and uses the lazy delete mechanism to delete the expiration key.

To view the Redis version number, you can use the following three methods: (1) enter the INFO command, (2) start the server with the --version option, and (3) view the configuration file.

Steps to solve the problem that redis-server cannot find: Check the installation to make sure Redis is installed correctly; set the environment variables REDIS_HOST and REDIS_PORT; start the Redis server redis-server; check whether the server is running redis-cli ping.

The tools and frameworks that need to be mastered in H5 development include Vue.js, React and Webpack. 1.Vue.js is suitable for building user interfaces and supports component development. 2.React optimizes page rendering through virtual DOM, suitable for complex applications. 3.Webpack is used for module packaging and optimize resource loading.
