Chào mọi người
Vấn đề này thực chất là một câu hỏi mình, sau đó mình mò mẫm rồi xử lý được, nên share đây cùng thảo luận
Giả sử mình có model user.rb, hàm find(:id), mình muốn cache query của hàm này của 1 model nào đó chứ ko phải all thì sẽ xử lý thế nào
Đây là cách xử lý của mình
model: user.rb
1 2 3 4 5 6 7 8 9 10 11 | <span class="token keyword">def</span> <span class="token method-definition"><span class="token keyword">self</span><span class="token punctuation">.</span><span class="token function">find</span></span><span class="token punctuation">(</span>id<span class="token punctuation">)</span> user <span class="token operator">=</span> <span class="token constant">Rd</span><span class="token punctuation">.</span>user_get<span class="token punctuation">(</span>id<span class="token punctuation">)</span> <span class="token keyword">if</span> <span class="token operator">!</span>user puts <span class="token string">"OVERRIDING no user <span class="token interpolation"><span class="token delimiter tag">#{</span>id<span class="token delimiter tag">}</span></span>"</span> user <span class="token operator">=</span> <span class="token keyword">super</span> <span class="token constant">Rd</span><span class="token punctuation">.</span>user_set<span class="token punctuation">(</span>id<span class="token punctuation">,</span> user<span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token symbol">:ex</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">3600</span><span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token keyword">end</span> <span class="token keyword">return</span> user <span class="token keyword">end</span> |
services/rd.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <span class="token keyword">class</span> <span class="token class-name">Rd</span> <span class="token keyword">def</span> <span class="token method-definition"><span class="token keyword">self</span><span class="token punctuation">.</span><span class="token function">user_get</span></span><span class="token punctuation">(</span>id<span class="token punctuation">)</span> <span class="token keyword">begin</span> user <span class="token operator">=</span> <span class="token variable">$rd</span><span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">"user_info_<span class="token interpolation"><span class="token delimiter tag">#{</span>id<span class="token delimiter tag">}</span></span>"</span><span class="token punctuation">)</span> puts <span class="token string">"user redis <span class="token interpolation"><span class="token delimiter tag">#{</span>id<span class="token delimiter tag">}</span></span>"</span> <span class="token keyword">return</span> <span class="token constant">User</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span><span class="token constant">JSON</span><span class="token punctuation">.</span>parse<span class="token punctuation">(</span>user<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">rescue</span> <span class="token keyword">return</span> <span class="token keyword">nil</span> <span class="token keyword">end</span> <span class="token keyword">end</span> <span class="token keyword">def</span> <span class="token method-definition"><span class="token keyword">self</span><span class="token punctuation">.</span><span class="token function">user_set</span></span><span class="token punctuation">(</span>id<span class="token punctuation">,</span> user<span class="token punctuation">,</span> options<span class="token operator">=</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token variable">$rd</span><span class="token punctuation">.</span>set<span class="token punctuation">(</span><span class="token string">"user_info_<span class="token interpolation"><span class="token delimiter tag">#{</span>id<span class="token delimiter tag">}</span></span>"</span><span class="token punctuation">,</span> user<span class="token punctuation">.</span>to_json<span class="token punctuation">,</span> options<span class="token punctuation">)</span> <span class="token keyword">end</span> <span class="token keyword">end</span> |
$rd là redis client connection chỗ config/application.rb
1 2 3 4 5 6 7 | <span class="token variable">$rd</span> <span class="token operator">=</span> <span class="token constant">Redis</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span> <span class="token symbol">:url</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token string">"redis://<span class="token interpolation"><span class="token delimiter tag">#{</span><span class="token constant">ENV</span><span class="token punctuation">[</span><span class="token string">'REDIS_CONNECT'</span><span class="token punctuation">]</span><span class="token delimiter tag">}</span></span>/0"</span><span class="token punctuation">,</span> <span class="token symbol">:connect_timeout</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">0.2</span><span class="token punctuation">,</span> <span class="token symbol">:read_timeout</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">1.0</span><span class="token punctuation">,</span> <span class="token symbol">:write_timeout</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">0.5</span> <span class="token punctuation">)</span> |
Mọi người có cách nào hay có đóng góp gì vui lòng comment, cảm ơn