您好,当我尝试使用pip在OSX Lion上安装pylibmc时出现以下错误:
./_pylibmcmodule.h:42:10: fatal error: 'libmemcached/memcached.h' file not found
#include <libmemcached/memcached.h>
^
1 error generated.
error: command 'clang' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题的任何线索?
跑步时
pip install pylibmc
Run Code Online (Sandbox Code Playgroud)
在Ubuntu上,我收到以下错误:
_pylibmcmodule.h:42:36: fatal error: libmemcached/memcached.h: No such file or directory
Run Code Online (Sandbox Code Playgroud) 我花了很多时间在这上面,这显然超出了我的新手理解/技能.我尝试使用pip install 安装django-heroku-memcacheify,这会抛出错误.我将问题追溯到pylibmc,这导致了所有问题.这是错误日志的一个有趣部分:
_pylibmcmodule.h:42:36:错误:libmemcached/memcached.h:没有这样的文件或目录
这是(几乎)完整的追溯:
-----> Heroku receiving push
-----> Fetching custom buildpack... done
-----> Python app detected
-----> Preparing Python interpreter (2.7.2)
-----> Creating Virtualenv version 1.7.2
! CLEAN_VIRTUALENV set, rebuilding virtualenv.
Running virtualenv with interpreter /usr/local/bin/python2.7
New python executable in .heroku/venv/bin/python2.7
Not overwriting existing python script .heroku/venv/bin/python (you must
use .heroku/venv/bin/python2.7)
Installing distribute..................................................................................................................................................................................................done.
Installing pip................done.
-----> Activating virtualenv
-----> Installing dependencies using pip version 1.1
Requirement already satisfied (use --upgrade to upgrade): Django==1.4 in …Run Code Online (Sandbox Code Playgroud) 我遇到了一个问题,我的数据库中的数据正在恢复到旧状态.我想我已经把问题缩小到了这种情况.
想象一下两次购买的顺序如下:
我们现在丢失了数据,因为数据库记录被重写了部分过时的信息.
如何使用持久连接的PHP5和libmemcached来防止这种情况?我想我想要的是缓存节点根本不进行故障转移; 它应该只是无法读取和写入该节点,但不能从池中删除它,以便我不会得到重复的记录.
当节点出现故障时,这将使我的数据库上的负载增加1/n(其中n是缓存节点的总数),但最好是数据不一致.
不幸的是,我无法理解应该更改哪些设置以获得此行为.
我已经玩了不同的memcached库和插件版本,以实现PHP memcache客户端和memcached服务器之间的真正持久性.
问题是仍然打开和关闭连接,以便连接计数器上升而不是重用现有的持久连接.
我已经在redhat机器上从最新源编译了memcached守护进程.我使用版本memcached-1.4.14并以"#/ opt/memcached/bin/memcached -vvvv"开头
我从最新的源代码版本memcached-2.0.1编译的php插件,我已经针对libmemcached-1.0.9编译它以使其保持最新.目前它不能针对libmemcached-1.0.10进行编译.
我的PHP脚本如下所示:
<?php
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
$key = "key_" . uniqid();
$memcached = new Memcached( 'persistent' );
$memcached->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
$memcached->setOption(Memcached::OPT_RECV_TIMEOUT, 1000);
$memcached->setOption(Memcached::OPT_SEND_TIMEOUT, 3000);
$memcached->setOption(Memcached::OPT_TCP_NODELAY, true);
$memcached->setOption(Memcached::OPT_PREFIX_KEY, 'persistent');
if( !count($memcached->getServerList() ) )
{
$memcached->addServer( 'localhost', 11211 );
}
$memcached->set($key, 'value');
$value = $memcached->get($key);
print_r( $memcached->getStats() );
?>
Run Code Online (Sandbox Code Playgroud)
在触发脚本时,我在输出中看到没有添加服务器,仅在超时期限之后.
Array ( [@?qVG:11211] => Array ( [pid] => 3728 [uptime] => 73 [threads] => 4 [time] => 1343813688 [pointer_size] => …Run Code Online (Sandbox Code Playgroud) 我memcache(安装在php5上)和memcached(通过libmemcached安装在php7.2上)都连接到同一个memcached daemon/server.
Memcache::get完全正常,并按照我的期望获取数据.但是当我这样做时Memcached::get,它总是返回0.
我已经检查过使用这两个扩展时我已经压缩了.我也尝试在Memcached::OPT_BINARY_PROTOCOLfor 之间切换memcached,它仍然产生相同的null结果.
有趣的是,当我使用memcached扩展添加键/值对并使用相同的键检索时,我得到了我添加的正确/正确的值.
我现在无能为力,因为它不适用于已经存储在memcached服务器中的数据.
编辑1:我确实telnet到我的memcached服务器,并检查它实际上有值.另外,我检查了返回的结果代码Memcached::getResultCode是不是任何一种失败.
编辑2:我可能会进一步缩小范围.我注意到,当我["key1" => "value1"]从memcache-php5脚本中保存时,它会正确地存储和检索数据.但是当我尝试使用memcached-php7.1脚本检索相同的数据时,它返回0.
之后,我使用telnet从memcached服务器中删除了密钥"key1"的数据.然后我["key1" => "value1"]使用memcached-php7.1脚本保存,它可以正确检索数据.但是当尝试使用memcache-php5脚本检索它时,它会返回一些序列化数据"a:1:{s:4:\"key1\";s:6:\"value1\";}"(这是json_encoded输出)
因此,为了升级,我可能必须删除/刷新所有内容并使用memcached扩展在memcached服务器中重新创建条目.
我试图libmemcached-1.0.8在ubuntu lucid中从源代码制作和安装.我尝试了这些步骤
sudo wget http://download.tangent.org/libmemcached-1.0.8.tar.gz
sudo ./configure -prefix=/usr
sudo make
Run Code Online (Sandbox Code Playgroud)
make命令导致此错误
In file included from memcached/assoc.c:14:
memcached/memcached.h:18:19: error: event.h: No such file or directory
In file included from memcached/assoc.c:14:
memcached/memcached.h:358: error: field ‘notify_event’ has incomplete type
memcached/memcached.h:380: error: field ‘event’ has incomplete type
make[1]: *** [memcached/memcached_memcached-assoc.o] Error 1
make[1]: Leaving directory `/usr/local/src/libmemcached-1.0.8'
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)
我已经安装了memcached
sudo apt-get install memcached
Run Code Online (Sandbox Code Playgroud)
我尝试使用whereis memcached
..显示,检查memcached的位置
memcached: /usr/bin/memcached /etc/memcached.conf /usr/include/memcached /usr/share/memcached /usr/share/man/man1/memcached.1.gz
Run Code Online (Sandbox Code Playgroud)
谁能告诉我应该怎样做才能正确制作和安装这个库?
编辑:
根据@sarnold的建议,我用过
sudo apt-get install …Run Code Online (Sandbox Code Playgroud) 我安装了libmemcached 0,37和ln -s /usr/local/lib/libmemcached.so.2 /usr/lib/libmemcached.so.2
但是当我运行manage.py时它仍然返回
import _pylibmc RuntimeError:pylibmc需要> = libmemcached 0.32,用0.31编译
我尝试安装较新的libmemcached,但他们没有文件libmemcached.so.2
我正在尝试将大量数据加载到 memcachedb 中。我正在 MySQL 数据库上运行一些查询,我想将这些查询的结果存储在 memcachedb 中,以便以后轻松访问。
目前,我只是使用简单的 set 命令将结果存储在 memcachedb 中,但由于这些结果有数十亿个,将它们一一存储在循环中是非常低效且耗时的。所以,我想知道是否有更好的方法将数据加载到memcachedb中?就像传统RDMS中的数据导入向导
我正在使用 pylibmc 连接到 memcachedb。
我按照以下步骤在我的Centos Server中安装PECL memcached,总是出错.
第一.安装libmemcached
cd /opt
wget http://launchpad.net/libmemcached/1.0/0.40a/+download/libmemcached-0.40.tar.gz
tar -xzvf libmemcached-0.40.tar.gz
cd libmemcached-0.40
./configure
make
make install
Run Code Online (Sandbox Code Playgroud)
其次,安装PECL memcached
cd /opt
pecl download memcached-1.0.2
tar zxvf memcached-1.0.2.tgz
cd memcached-1.0.2
phpize
./configure --with-libmemcached-dir=/opt/libmemcached-0.40/libmemcached
Run Code Online (Sandbox Code Playgroud)
我总是有错误
checking for memcached igbinary support... disabled
configure: error: Can't find libmemcached headers under "/opt/libmemcached-0.40/libmemcached"
Run Code Online (Sandbox Code Playgroud)
实际上memcached.h档案是/opt/libmemcached-0.40/libmemcached擅自的.
请指教.
libmemcached ×10
memcached ×8
php ×4
python ×4
django ×2
ubuntu ×2
caching ×1
heroku ×1
memcachedb ×1
osx-lion ×1
pecl ×1
persistent ×1
pip ×1