更新时间:2022-08-16 16:19:55
# perl my $memclient = Cache::Memcached->new({ servers => [ '10.0.0.10:11211', '10.0.0.11:11211' ]});
# pseudocode memcli = new Memcache memcli:add_server('10.0.0.10:11211')某些客户端的实现可能允许重复添加同一个Server,但***每个Server是有一个实例,而且也要注意他们的顺序***不要经常变化,防止key的重新映射;在初始化MemcacheClient的时候要注意实例化的次数,不要太过频繁的实例化,***通过连接池来管理。
# Don't load little bobby tables sql = "SELECT * FROM user WHERE user_id = ?" key = 'SQL:' . user_id . ':' . md5sum(sql) # We check if the value is 'defined', since '0' or 'FALSE' # can be # legitimate values! if (defined result = memcli:get(key)) { return result } else { handler = run_sql(sql, user_id) # Often what you get back when executing SQL is a special handler # object. You can't directly cache this. Stick to strings, arrays, # and hashes/dictionaries/tables rows_array = handler:turn_into_an_array # Cache it for five minutes memcli:set(key, rows_array, 5 * 60) return rows_array }注意:在通过set方法缓存数据时,我们可以指定数据过期时间,上面例子中设置的是5分钟,这样的话,五分钟内用户看到的都是同样的信息,即5分钟内的数据变化用户是感觉不到的,在开发时一定要注意根据实际情况对过期时间进行合理设置。
sql1 = "SELECT * FROM user WHERE user_id = ?" sql2 = "SELECT * FROM user_preferences WHERE user_id = ?" key = 'SQL:' . user_id . ':' . md5sum(sql1 . sql2) if (defined result = memcli:get(key)) { return result } else { # Remember to add error handling, kids ;) handler = run_sql(sql1, user_id) t[info] = handler:turn_into_an_array handler = run_sql(sql2, user_id) t[pref] = handler:turn_into_an_array # Client will magically take this hash/table/dict/etc # and serialize it for us. memcli:set(key, t, 5 * 60) return t }
if (result = memcli:get(key)) { return result } else { user = fetch_user_info(user_id) bio_template = fetch_biotheme_for(user_id) bio_fragment = apply_template(bio_template, user) memcli:set(key, bio_fragment, 5 * 15) return bio_fragment }
user_prefix = memcli:get('user_namespace:' . user_id) bio_data = memcli:get(user_prefix . user_id . 'bio')缓存Set 或 List