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层。这种方式是我现在在用的,对复杂的逻辑而言可以显得更清晰。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds



Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Causes et solutions pour les erreurs Lors de l'utilisation de PECL pour installer des extensions dans un environnement Docker Lorsque nous utilisons un environnement Docker, nous rencontrons souvent des maux de tête ...

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

Problèmes et solutions rencontrés lors de la compilation et de l'installation de Redis sur Apple M1 Chip Mac, de nombreux utilisateurs peuvent ...

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,
