Pitfalls of Rails fragment caching with memcached

Fragment caching is a powerful technique for improving performance of your web application. Rails site describes in detail how to apply this technique.

Rails are providing developers with really excellent abstractions, but it’s always good to know what’s under the hood and how it all works.

There are a few things that might potentially cause bugs in your code, or waste your time (speaking from my own experience). So here goes:

1. Beware of globally keyed fragments

Let’s take example from Rails tutorial:

<% cache do %>
  All available products:
  <% Product.all.each do |p| %>
    <%= link_to p.name, product_url(p) %>
  <% end %>
<% end %>

Now if you need to deal with a multi-language site you might want to make cache fragment language dependent. What might seem a convenient solution:

<%- cache([user.locale.to_s]) do -%>

will turn into a source of very interesting problems. While calling the cache method without parameters will automatically create a controller/action specific cache key, calling it with a key will make this fragment a globally keyed fragment. Cache key in the first case is going to look like “views/localhost:3000/controller-name”, and in the other case “views/en” – this is not as unique identifier any more.

While automatic cache key naming provided by rails is very convenient, it is very easy to run into a problem with duplicate cache key names used in different places.

2. Another pitfall of automatic cache key naming is that you shall never assume that when creating a cache with global key you can later find it using e.g. telnet interface to memcache. Example – add

<%- cache('unique_cache_key') do -%>
<%- end -%>

in your view and then try to read directly from memcache:

$ telnet localhost 11211
GET unique_cache_key
END

At the same time

GET views/unique_cache_key

will work. It’s easy to make this mistake trying to check or delete cache keys directly from memcache when using Rails cache methods.

3. delete_matched is not supported by memcached (see rails/activesupport/lib/active_support/cache/mem_cache_store.rb)

In practice that means that if you’re using memcached as Rails cache engine and trying to delete or expire fragment cache using standard Rails methods and regexp – you’ll fail.

expire_fragment(/base\/xyz.*/)

will fail miserably. Ideal solution is not to use explicit cache expiration, but rather create cache keys in such a way that doesn’t require expiration. Alternatively it’s possible to use extensions implementing delete_matched for memcached (haven’t tried it myself though).

Tip: one very useful tool for checking memcached is peep by Evan Weaver – allows you to peek into the cache and see what’s really cached and how it is used.


Comments

275 responses to “Pitfalls of Rails fragment caching with memcached”

  1. PatrickroN
  2. Albertoroale

    Crestor Pharm crestor lawsuit 2019 what tier drug is crestor

  3. Alfonsodomia

    20mg atorvastatin: LipiPharm – Lipi Pharm

  4. PatrickroN
  5. Billyhem

    Rybelsus side effects and dosage: semaglutide 10 mg – rybelsus 7

  6. Albertoroale

    cost of prednisone 40 mg prednisone 10mg prices Predni Pharm

  7. Alfonsodomia

    how much will 40 mg of atorvastatin lower cholesterol: Order cholesterol medication online – LipiPharm

  8. PatrickroN

    https://semaglupharm.com/# best place to inject semaglutide

  9. Billyhem

    Predni Pharm: PredniPharm – cost of prednisone tablets

  10. Albertoroale

    FDA-approved generic statins online [url=https://lipipharm.com/#]Lipi Pharm[/url] No RX Lipitor online

  11. Alfonsodomia

    CrestorPharm: Crestor Pharm – Buy statins online discreet shipping

  12. PatrickroN
  13. PatrickroN

    https://semaglupharm.shop/# Rybelsus for blood sugar control

  14. Alfonsodomia

    apo atorvastatin 80 mg: LipiPharm – Lipi Pharm

  15. Albertoroale

    Predni Pharm prednisone 5mg price prednisone 20mg tab price

  16. Billyhem

    Semaglu Pharm: SemagluPharm – SemagluPharm

  17. PatrickroN
  18. Alfonsodomia

    Semaglu Pharm: Semaglu Pharm – Semaglutide tablets without prescription

  19. Albertoroale

    Cheap Lipitor 10mg / 20mg / 40mg Lipi Pharm LipiPharm

  20. Billyhem

    Predni Pharm: apo prednisone – Predni Pharm

  21. PatrickroN

    https://semaglupharm.shop/# does insurance cover rybelsus

  22. Alfonsodomia

    SemagluPharm: rybelsus and kidney function – Semaglu Pharm

  23. Albertoroale

    No prescription diabetes meds online Semaglu Pharm SemagluPharm

  24. Billyhem

    Semaglu Pharm: Semaglu Pharm – SemagluPharm

  25. PatrickroN
  26. Alfonsodomia

    Predni Pharm: prednisone pharmacy – PredniPharm

  27. Albertoroale

    Predni Pharm Predni Pharm Predni Pharm

  28. Billyhem

    PredniPharm: prednisone 250 mg – PredniPharm

  29. PatrickroN

    https://semaglupharm.com/# rybelsus empty stomach

  30. Alfonsodomia

    CrestorPharm: Over-the-counter Crestor USA – Crestor Pharm

  31. Albertoroale

    atorvastatin rhabdomyolysis LipiPharm LipiPharm

  32. Jamesvew
  33. PatrickroN
  34. Billyhem

    crestor and fatigue: Over-the-counter Crestor USA – Crestor Pharm

  35. Alfonsodomia

    atorvastatin and thc: can atorvastatin be crushed – LipiPharm

  36. Albertoroale

    rosuvastatin and osteoporosis Crestor home delivery USA Crestor Pharm

  37. PatrickroN

    https://semaglupharm.shop/# semaglutide nausea

  38. Billyhem

    PredniPharm: where can i order prednisone 20mg – prednisone 20 mg tablets coupon

  39. Alfonsodomia

    why should over 70s not take atorvastatin?: pill identifier atorvastatin 40 mg – lipitor 10

  40. Albertoroale

    what happens if semaglutide gets warm is rybelsus a pill rybelsus over the counter

  41. PatrickroN

    http://semaglupharm.com/# No prescription diabetes meds online

  42. Billyhem

    LipiPharm: Discreet shipping for Lipitor – LipiPharm

  43. Alfonsodomia

    buy prednisone canadian pharmacy: PredniPharm – Predni Pharm

  44. Albertoroale

    Predni Pharm Predni Pharm prednisone 60 mg price

  45. PatrickroN

    https://semaglupharm.com/# Rybelsus online pharmacy reviews

  46. Billyhem

    LipiPharm: Atorvastatin online pharmacy – Discreet shipping for Lipitor

  47. Alfonsodomia

    Crestor Pharm: Crestor mail order USA – Crestor home delivery USA

  48. Albertoroale

    Crestor Pharm Crestor Pharm Affordable cholesterol-lowering pills

  49. PatrickroN
  50. Billyhem

    Lipi Pharm: 80 mg atorvastatin 80 mg – what is lipitor taken for

  51. Jamesheags
  52. Robertcoorp

    http://canadapharmglobal.com/# reputable canadian online pharmacy

  53. MichelCip

    India Pharm Global: indian pharmacies safe – India Pharm Global

  54. SamuelLab

    www canadianonlinepharmacy Canada Pharm Global best rated canadian pharmacy

  55. RobertSem

    india online pharmacy: India Pharm Global – indian pharmacy online

  56. Robertcoorp

    https://medsfrommexico.com/# mexican rx online

  57. MichelCip

    certified canadian pharmacy: Canada Pharm Global – legit canadian pharmacy online

  58. SamuelLab

    Meds From Mexico mexico drug stores pharmacies medication from mexico pharmacy

  59. Jamesheags

    http://medsfrommexico.com/# medicine in mexico pharmacies

  60. RobertSem

    Meds From Mexico: medicine in mexico pharmacies – mexican pharmaceuticals online

  61. Robertcoorp

    https://indiapharmglobal.shop/# best india pharmacy

  62. MichelCip

    cheap canadian pharmacy: canadian pharmacy prices – canada discount pharmacy

  63. SamuelLab

    canadian online drugs cheap canadian pharmacy canada pharmacy 24h

  64. Robertcoorp

    https://canadapharmglobal.com/# canadian pharmacy online reviews

  65. RobertSem

    buy canadian drugs: Canada Pharm Global – best canadian pharmacy to order from

  66. MichelCip

    India Pharm Global: Online medicine order – India Pharm Global

  67. SamuelLab

    indian pharmacies safe indian pharmacy online India Pharm Global

  68. Jamesheags

    http://canadapharmglobal.com/# onlinecanadianpharmacy

  69. Robertcoorp

    http://indiapharmglobal.com/# India Pharm Global

  70. MichelCip

    canada pharmacy: canada online pharmacy – canadian pharmacy near me

  71. RobertSem

    legitimate canadian mail order pharmacy: Canada Pharm Global – certified canadian pharmacy

  72. SamuelLab

    trustworthy canadian pharmacy canadian pharmacy online ship to usa canadian pharmacy uk delivery

  73. Robertcoorp

    https://indiapharmglobal.com/# reputable indian pharmacies

  74. MichelCip

    best online pharmacies in mexico: pharmacies in mexico that ship to usa – pharmacies in mexico that ship to usa

  75. RobertSem

    canadian pharmacy 24: Canada Pharm Global – buying from canadian pharmacies

  76. SamuelLab

    india online pharmacy India Pharm Global top online pharmacy india

  77. Jamesheags

    https://canadapharmglobal.com/# safe reliable canadian pharmacy

  78. Robertcoorp

    http://indiapharmglobal.com/# India Pharm Global

  79. MichelCip

    safe canadian pharmacy: canadian mail order pharmacy – canadadrugpharmacy com

  80. RobertSem

    mexican rx online: mexican border pharmacies shipping to usa – mexican drugstore online

  81. Robertcoorp
  82. SamuelLab

    canadian pharmacies compare my canadian pharmacy canadian drugstore online

  83. MichelCip

    vipps approved canadian online pharmacy: legit canadian online pharmacy – canadian pharmacy online

  84. RobertSem

    Meds From Mexico: Meds From Mexico – Meds From Mexico

  85. Robertcoorp

    https://medsfrommexico.shop/# medication from mexico pharmacy

  86. Jamesheags

    http://medsfrommexico.com/# mexican drugstore online

  87. SamuelLab

    canadian pharmacy ltd Canada Pharm Global the canadian pharmacy

  88. MichelCip

    best india pharmacy: buy medicines online in india – India Pharm Global

  89. RobertSem

    canadian pharmacies compare: Canada Pharm Global – canadian pharmacy online

  90. Robertcoorp

    http://indiapharmglobal.com/# indian pharmacy paypal

  91. SamuelLab

    top 10 online pharmacy in india online pharmacy india world pharmacy india

  92. WilliamNet

    EFarmaciaIt: motilex sciroppo – EFarmaciaIt

  93. HenryInero
  94. ClintonMob

    poste telefono fisso 14 90: arkopharma a cosa serve – EFarmaciaIt

  95. JosephWheds

    apotek snabbast leverans Svenska Pharma bindor 100 pack

  96. RobertToold
  97. WilliamNet

    EFarmaciaIt: filorga logo – dottor max farmacia

  98. HenryInero

    http://raskapotek.com/# retinol serum apotek

  99. ClintonMob

    multivitamin apotek: Svenska Pharma – Svenska Pharma

  100. JosephWheds

    apotek i danmark Rask Apotek lusekam apotek

  101. WilliamNet

    Papa Farma: zapatillas health opiniones – centro dental innova reseГ±as

  102. HenryInero
  103. RobertToold
  104. ClintonMob

    jobbe pГҐ apotek: Rask Apotek – Rask Apotek

  105. JosephWheds

    EFarmaciaIt meteo carrГЁ vi travocort pomata prezzo

  106. WilliamNet

    kompresjonstГёy apotek: Rask Apotek – Rask Apotek

  107. HenryInero
  108. JosephWheds

    Svenska Pharma bomullshandske apotek apotek Г¶ppet trettondagen

  109. WilliamNet

    Rask Apotek: Rask Apotek – kompresser apotek

  110. HenryInero
  111. ClintonMob

    Papa Farma: parafarmacias online mГЎs baratas – farmadirec

  112. WilliamNet

    parafarmacia las palmas: canadian pharmacy en espaГ±ol – Papa Farma

  113. JosephWheds

    sjekke fГёflekker apotek Rask Apotek Rask Apotek

  114. HenryInero
  115. ClintonMob

    apotek spania: Rask Apotek – varmepute med ris apotek

  116. WilliamNet

    Svenska Pharma: Svenska Pharma – Svenska Pharma

  117. JosephWheds

    frisГёrsaks apotek Rask Apotek Rask Apotek

  118. HenryInero

    https://efarmaciait.shop/# sito farmacia affidabile

  119. RobertToold
  120. ClintonMob

    Papa Farma: Papa Farma – farmacias perto de mim

  121. WilliamNet

    farmacias 24 horas lugo: sobres citrafleet precio sin receta – Papa Farma

  122. JosephWheds

    Rask Apotek pinsett apotek intimvask best i test

  123. ClintonMob

    glidemiddel apotek: mollusker behandling apotek – Rask Apotek

  124. WilliamNet

    kГ¶pa medicin pГҐ nГ¤tet: Svenska Pharma – apotek online hemleverans

  125. HenryInero
  126. JosephWheds

    EFarmaciaIt EFarmaciaIt trausan 1000 mg prezzo

  127. RobertToold

    http://efarmaciait.com/# parafarmacia online affidabile

  128. HenryInero
  129. WilliamNet

    svovel sГҐpe apotek: gurkemeie tabletter apotek – Rask Apotek

  130. ClintonMob

    crema diprogenta: cialis prix – opiniones iraltone aga plus

  131. JosephWheds

    Svenska Pharma Svenska Pharma Svenska Pharma

  132. WilliamNet

    como comprar una farmacia: Papa Farma – mejores toallitas bebГ© ocu

  133. ClintonMob

    precio tadalafilo 10 mg: cariban sin receta – Papa Farma

  134. JosephWheds

    Svenska Pharma smärtstillande gel recept protein pulver apotek

  135. RobertToold

    https://raskapotek.shop/# body lotion apotek

  136. HenryInero
  137. WilliamNet

    Rask Apotek: vann i Гёret apotek – lГёs mage apotek

  138. JosephWheds

    Rask Apotek Rask Apotek serotonin tilskudd apotek

  139. ClintonMob

    brentan crema composicion: parafarmacia alicante – epiduo forte gel comprar online

  140. HenryInero
  141. WilliamNet

    Rask Apotek: Rask Apotek – Rask Apotek

  142. Chrisgox

    http://pharmaconfiance.com/# tadalafil sans ordonnance en belgique

  143. AlbertSkelf

    apteka den haag: afbeelding medicijnen – pil online bestellen

  144. MelvinBlimb

    chat a donner caen: grande pharmacie de rennes – Pharma Confiance

  145. Edwardsault

    http://pharmaconfiance.com/# pharmacie cambremer

  146. WilliamHar

    Medicijn Punt MedicijnPunt medicijnen op recept online bestellen

  147. AlbertSkelf

    aphotheke online: Pharma Jetzt – PharmaJetzt

  148. MelvinBlimb

    apotheek online nl: Medicijn Punt – Medicijn Punt

  149. Edwardsault

    https://pharmajetzt.com/# medikamente liefern lassen

  150. WilliamHar

    PharmaJetzt PharmaJetzt versand apotheke online

  151. Chrisgox

    https://medicijnpunt.com/# internet apotheek nederland

  152. MelvinBlimb

    Pharma Confiance: Pharma Confiance – ggp montpellier

  153. AlbertSkelf

    apotheek online nl: MedicijnPunt – aptoheek

  154. Edwardsault
  155. WilliamHar

    PharmaJetzt Pharma Jetzt PharmaJetzt

  156. MelvinBlimb

    Pharma Connect USA: pharmacy – Pharma Connect USA

  157. Edwardsault
  158. AlbertSkelf

    luitpold apotheke online shop: PharmaJetzt – versandapotheke gГјnstig

  159. WilliamHar

    rx online pharmacy reviews PharmaConnectUSA online pharmacy no prescription needed ambien

  160. MelvinBlimb

    medicijnen online: apotheek winkel 24 review – Medicijn Punt

  161. Edwardsault
  162. AlbertSkelf

    Pharma Confiance: be bioderma mon compte – medicament flagyl

  163. WilliamHar

    quand prendre monuril Pharma Confiance grande pharmacie de rennes

  164. MelvinBlimb

    Pharma Confiance: nhco point de vente – Pharma Confiance

  165. Edwardsault
  166. AlbertSkelf

    Pharma Confiance: Pharma Confiance – gdc magasin

  167. WilliamHar

    Pharma Connect USA Pharma Connect USA PharmaConnectUSA

  168. Edwardsault
  169. MelvinBlimb

    Pharma Confiance: telephone gdf – Pharma Confiance

  170. AlbertSkelf

    Pharma Confiance: Pharma Confiance – Pharma Confiance

  171. WilliamHar

    MedicijnPunt medicijnen op recept online bestellen Medicijn Punt

  172. Edwardsault

    https://medicijnpunt.com/# apotheek producten

  173. MelvinBlimb

    free tamiflu pharmacy: PharmaConnectUSA – Pharma Connect USA

  174. AlbertSkelf

    luitpold apotheke online-shop versandapotheke: Pharma Jetzt – PharmaJetzt

  175. Chrisgox
  176. Edwardsault
  177. WilliamHar

    Pharma Confiance Pharma Confiance Pharma Confiance

  178. MelvinBlimb

    ozempic 1 mg prix maroc: cialis 100 mg avis – garancia vente privГ©e

  179. AlbertSkelf

    versandapotheke gГјnstig: PharmaJetzt – PharmaJetzt

  180. Edwardsault
  181. WilliamHar

    apteka amsterdam niederlande apotheke apotheek webshop

  182. MelvinBlimb

    Medicijn Punt: Medicijn Punt – medicatie online bestellen

  183. AlbertSkelf

    Pharma Confiance: Pharma Confiance – Pharma Confiance

  184. Edwardsault

    https://pharmaconnectusa.com/# us online pharmacy cialis

  185. WilliamHar

    shop apotheke versandapotheke versandkostenfrei Pharma Jetzt lavita login

  186. MelvinBlimb

    belgische online apotheek: MedicijnPunt – Medicijn Punt

  187. Edwardsault
  188. AlbertSkelf

    online apotheek zonder recept: apotheke niederlande – MedicijnPunt

  189. WilliamHar

    pharmacie drakar Pharma Confiance bonne nuit que dieu vous protГЁge

  190. MelvinBlimb

    shop apptheke: PharmaJetzt – appotheke

  191. Edwardsault

    https://medicijnpunt.shop/# internet apotheek nederland

  192. AlbertSkelf

    Pharma Confiance: Pharma Confiance – Pharma Confiance

  193. MelvinBlimb

    internet apotheek: MedicijnPunt – MedicijnPunt

  194. WilliamHar

    Pharma Confiance Pharma Confiance pharmacie dumontet

  195. Chrisgox
  196. Edwardsault

    https://pharmaconfiance.com/# donne chaton cher 18

  197. AlbertSkelf

    PharmaConnectUSA: celebrex target pharmacy – best online pharmacy to buy viagra

  198. MelvinBlimb

    Pharma Confiance: Pharma Confiance – Pharma Confiance

  199. WilliamHar

    Pharma Jetzt online apotheke auf rechnung apotal apotheke online shop bestellen

  200. Edwardsault
  201. AlbertSkelf

    online apotheker: MedicijnPunt – MedicijnPunt

  202. MelvinBlimb

    imiquimod cream pharmacy: Pharma Connect USA – Kamagra Polo

  203. WilliamHar

    Pharma Connect USA meijer pharmacy amoxicillin PharmaConnectUSA

  204. Edwardsault

    https://pharmaconfiance.shop/# eau de beauté caudalie bienfaits

  205. Chrisgox
  206. AlbertSkelf

    hepatitis c virus (hcv): PharmaConnectUSA – online pharmacy with doctor consultation

  207. MelvinBlimb

    online pharmacy furosemide: PharmaConnectUSA – concerta pharmacy coupons

  208. WilliamHar

    PharmaConnectUSA fluconazole pharmacy uk PharmaConnectUSA

  209. Edwardsault
  210. AlbertSkelf

    amoxicilline mal de gorge: Pharma Confiance – Pharma Confiance

  211. MelvinBlimb

    cold cream coup de soleil: parpharmacie – creme visage avene que choisir

  212. WilliamHar

    billigste online apotheke PharmaJetzt arzneimittel kaufen

  213. Edwardsault
  214. Chrisgox

    http://pharmaconnectusa.com/# Pharma Connect USA

  215. AlbertSkelf

    advair pharmacy coupons: ciprofloxacin pharmacy uk – compounding pharmacy low dose naltrexone

  216. MelvinBlimb

    PharmaJetzt: PharmaJetzt – apotheke medikamente

  217. WilliamHar

    Medicijn Punt mijn apotheek medicijnen MedicijnPunt

  218. Edwardsault
  219. MelvinBlimb

    Pharma Confiance: Pharma Confiance – sanoflore pharmacie

  220. AlbertSkelf

    Pharma Confiance: doxycycline pharmacie – Pharma Confiance

  221. Edwardsault

    https://pharmajetzt.com/# luitpold apotheke online shop

  222. WilliamHar

    Medicijn Punt MedicijnPunt medicijn online bestellen

  223. Chrisgox

    http://pharmajetzt.com/# online apotheke ohne anmeldung

  224. MelvinBlimb

    legit online pharmacy nolvadex: Pharma Connect USA – Pharma Connect USA

  225. Edwardsault
  226. AlbertSkelf

    mexican pharmacy viagra online: dexamethasone online pharmacy – PharmaConnectUSA

  227. WilliamHar

    argel 7 prix Pharma Confiance shop pharmacie france

  228. Edwardsault

    https://medicijnpunt.com/# medicijnen aanvragen

  229. MelvinBlimb

    Pharma Jetzt: Pharma Jetzt – online apotheken deutschland

  230. WilliamHar

    PharmaJetzt PharmaJetzt medpex online apotheke

  231. AlbertSkelf

    nexium uk pharmacy: PharmaConnectUSA – PharmaConnectUSA

  232. Edwardsault
  233. Chrisgox

    https://pharmaconfiance.com/# parapharmacie dufour

  234. MelvinBlimb

    medicatie apotheek: medicatie online bestellen – Medicijn Punt

  235. WilliamHar

    apotheke online gГјnstig bestellen Pharma Jetzt Pharma Jetzt

  236. AlbertSkelf

    apotheken online bestellen: apotheke shop – online apotheke auf rechnung

  237. Edwardsault
  238. MelvinBlimb

    apotheek online nl: MedicijnPunt – medicatielijst apotheek

  239. AlbertSkelf

    abilify prices pharmacy: ciprofloxacin pharmacy uk – clobetasol cream online pharmacy

  240. WilliamHar

    Pharma Jetzt PharmaJetzt apotal online

  241. MelvinBlimb

    PharmaJetzt: bad steben apotheke – Pharma Jetzt

  242. Edwardsault

    https://pharmajetzt.com/# günstig medikamente bestellen

  243. AlbertSkelf

    benzodiazepines online pharmacy: provigil generic online pharmacy – walgreen pharmacy

  244. MelvinBlimb

    Pharma Jetzt: medikamente per click – arznei gГјnstig

  245. WilliamHar

    PharmaJetzt online apothke PharmaJetzt

  246. AlbertSkelf

    farmacie online: medicatie kopen – MedicijnPunt

  247. Edwardsault
  248. MelvinBlimb

    apotheek aan huis: Medicijn Punt – pseudoephedrine kopen in nederland

  249. AlbertSkelf

    recepta online: medicijnen bestellen apotheek – medicatie aanvragen

  250. Chrisgox

    https://pharmajetzt.shop/# internetapotheken

  251. WilliamHar

    Pharma Connect USA PharmaConnectUSA PharmaConnectUSA

  252. MelvinBlimb

    tadalafil 20 mg boГ®te de 28 prix: achat amoxicilline – effet amoxicilline

  253. Edwardsault
  254. AlbertSkelf

    Pharma Connect USA: PharmaConnectUSA – target pharmacy zocor

  255. MelvinBlimb

    apotheken produkte: apotal apotheke online – Pharma Jetzt

  256. WilliamHar

    target store pharmacy Pharma Connect USA Pharma Connect USA

  257. Edwardsault
  258. AlbertSkelf

    PharmaJetzt: PharmaJetzt – PharmaJetzt

  259. MelvinBlimb

    versand apotheke auf rechnung: PharmaJetzt – Pharma Jetzt

  260. AlbertSkelf

    Pharma Connect USA: is reliable rx pharmacy legit – Nitroglycerin

  261. Edwardsault

    https://pharmaconnectusa.shop/# bm pharmacy accutane

  262. WilliamHar

    is reliable rx pharmacy legit doxycycline uk pharmacy viagra pharmacy

  263. MelvinBlimb

    aphoteke online: Pharma Jetzt – PharmaJetzt

  264. AlbertSkelf

    apotheek apotheek: Medicijn Punt – apotheek medicijnen bestellen

  265. MelvinBlimb

    pharmacie villeneuve d’ascq: Pharma Confiance – Pharma Confiance

  266. Edwardsault

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.