1. 下载http://www.oschina.net/p/redis
  2.  
  3. 解压后里面有:lib 源文件 examples 例子、test测试
  4.  
  5. lib目录拷贝到你的项目中,就可以开始你的predis操作了。
  6.  
  7. //使用autoload加载相关库,这边重点就是为了require $file;
  8. spl_autoload_register(function($class) {
  9. $file = __DIR__.’/lib/Predis/’.$class.’.php’;
  10. if (file_exists($file)) {
  11. require $file;
  12. return true;
  13. }
  14. });
  15.  
  16. //配置连接的IP、端口、以及相应的数据库
  17. $server = array(
  18. host => 127.0.0.1′,
  19. port => 6379,
  20. database => 15
  21. );
  22. $redis = new Client($server);
  23.  
  24. //普通set/get操作
  25. $redis->set(‘library’, predis’);
  26. $retval = $redis->get(‘library’);
  27. echo $retval; //显示 ‘predis’
  28.  
  29. //setex set一个存储时效
  30. $redis->setex(‘str’, 10, bar’); //表示存储有效期为10秒
  31.  
  32. //setnx/msetnx相当于add操作,不会覆盖已有值
  33. $redis->setnx(‘foo’,12); //true
  34. $redis->setnx(‘foo’,34); //false
  35.  
  36. //getset操作,set的变种,结果返回替换前的值
  37. $redis->getset(‘foo’,56);//返回34
  38.  
  39. // incrby/incr/decrby/decr 对值的递增和递减
  40. $redis->incr(‘foo’); //foo为57
  41. $redis->incrby(‘foo’,2); //foo为59
  42.  
  43. //exists检测是否存在某值
  44. $redis->exists(‘foo’);//true
  45.  
  46. //del 删除
  47. $redis->del(‘foo’);//true
  48.  
  49. //type 类型检测,字符串返回string,列表返回 list,set表返回set/zset,hash表返回hash
  50. $redis->type(‘foo’);//不存在,返回none
  51. $redis->set(‘str’,'test’);
  52. $redis->type(‘str’); //字符串,返回string
  53.  
  54. //append 连接到已存在字符串
  55. $redis->append(‘str’,'_123′); //返回累加后的字符串长度8,此进str为 ‘test_123′
  56.  
  57. //setrange 部分替换操作
  58. $redis->setrange(‘str’,0,’abc’); //返回3,参数2为0时等同于set操作
  59. $redis->setrange(‘str’,2,’cd’);//返回4,表示从第2个字符后替换,这时’str’为’abcd’
  60.  
  61. //substr 部分获取操作
  62. $redis->substr(‘str’,0,2);//表示从第0个起,取到第2个字符,共3个,返回’abc’
  63.  
  64. //strlen 获取字符串长度
  65. $redis->strlen(‘str’); //返回4
  66.  
  67. //setbit/getbit 位存储和获取
  68. $redis->setbit(‘binary’,31,1); //表示在第31位存入1,这边可能会有大小端问题?不过没关系,getbit 应该不会有问题
  69. $redis->getbit(‘binary’,31); //返回1
  70.  
  71. //keys 模糊查找功能,支持*号以及?号(匹配一个字符)
  72. $redis->set(‘foo1′,123);
  73. $redis->set(‘foo2′,456);
  74. $redis->keys(‘foo*’); //返回foo1和foo2的array
  75. $redis->keys(‘f?o?’); //同上
  76.  
  77. //randomkey 随机返回一个key
  78. $redis->randomkey(); //可能是返回 ‘foo1′或者是’foo2′及其它任何一存在redis的key
  79.  
  80. //rename/renamenx 对key进行改名,所不同的是renamenx不允许改成已存在的key
  81. $redis->rename(‘str’,'str2′); //把原先命名为’str’的key改成了’str2′
  82.  
  83. //expire 设置key-value的时效性,ttl 获取剩余有效期,persist 重新设置为永久存储
  84. $redis->expire(‘foo’, 1); //设置有效期为1秒
  85. $redis->ttl(‘foo’); //返回有效期值1s
  86. $redis->expire(‘foo’); //取消expire行为
  87.  
  88. //dbsize 返回redis当前数据库的记录总数
  89. $redis->dbsize();
  90.  
  91. /*
  92. 队列操作
  93. */
  94.  
  95. //rpush/rpushx 有序列表操作,从队列后插入元素
  96. //lpush/lpushx 和rpush/rpushx的区别是插入到队列的头部,同上,’x'含义是只对已存在的key进行操作
  97. $redis->rpush(‘fooList’, bar1′); //返回一个列表的长度1
  98. $redis->lpush(‘fooList’, bar0′); //返回一个列表的长度2
  99. $redis->rpushx(‘fooList’, bar2′); //返回3,rpushx只对已存在的队列做添加,否则返回0
  100. //llen返回当前列表长度
  101. $redis->llen(‘fooList’);//3
  102.  
  103. //lrange 返回队列中一个区间的元素
  104. $redis->lrange(‘fooList’,0,1); //返回数组包含第0个至第1个共2个元素
  105. $redis->lrange(‘fooList’,0,-1);//返回第0个至倒数第一个,相当于返回所有元素,注意redis中很多时候会用到负数,下同
  106.  
  107. //lindex 返回指定顺序位置的list元素
  108. $redis->lindex(‘fooList’,1); //返回’bar1′
  109.  
  110. //lset 修改队列中指定位置的value
  111. $redis->lset(‘fooList’,1,’123′);//修改位置1的元素,返回true
  112.  
  113. //lrem 删除队列中左起指定数量的字符
  114. $redis->lrem(‘fooList’,1,’_'); //删除队列中左起(右起使用-1)1个字符’_'(若有)
  115.  
  116. //lpop/rpop 类似栈结构地弹出(并删除)最左或最右的一个元素
  117. $redis->lpop(‘fooList’); //’bar0′
  118. $redis->rpop(‘fooList’); //’bar2′
  119.  
  120. //ltrim 队列修改,保留左边起若干元素,其余删除
  121. $redis->ltrim(‘fooList’, 0,1); //保留左边起第0个至第1个元素
  122.  
  123. //rpoplpush 从一个队列中pop出元素并push到另一个队列
  124. $redis->rpush(‘list1′,’ab0′);
  125. $redis->rpush(‘list1′,’ab1′);
  126. $redis->rpush(‘list2′,’ab2′);
  127. $redis->rpush(‘list2′,’ab3′);
  128. $redis->rpoplpush(‘list1′,’list2′);//结果list1 =>array(‘ab0′),list2 =>array(‘ab1′,’ab2′,’ab3′)
  129. $redis->rpoplpush(‘list2′,’list2′);//也适用于同一个队列,把最后一个元素移到头部list2 =>array(‘ab3′,’ab1′,’ab2′)
  130.  
  131. //linsert 在队列的中间指定元素前或后插入元素
  132. $redis->linsert(‘list2′, before’,'ab1′,’123′); //表示在元素’ab1′之前插入’123′
  133. $redis->linsert(‘list2′, ‘after’,'ab1′,’456′); //表示在元素’ab1′之后插入’456′
  134.  
  135. //blpop/brpop 阻塞并等待一个列队不为空时,再pop出最左或最右的一个元素(这个功能在php以外可以说非常好用)
  136. //brpoplpush 同样是阻塞并等待操作,结果同rpoplpush一样
  137. $redis->blpop(‘list3′,10); //如果list3为空则一直等待,直到不为空时将第一元素弹出,10秒后超时
  138.  
  139. /**
  140. set表操作
  141. */
  142.  
  143. //sadd 增加元素,返回true,重复返回false
  144. $redis->sadd(‘set1′,’ab’);
  145. $redis->sadd(‘set1′,’cd’);
  146. $redis->sadd(‘set1′,’ef’);
  147.  
  148. //srem 移除指定元素
  149. $redis->srem(‘set1′,’cd’); //删除’cd’元素
  150.  
  151. //spop 弹出首元素
  152. $redis->spop(‘set1′);
  153.  
  154. //smove 移动当前set表的指定元素到另一个set表
  155. $redis->sadd(‘set2′,’123′);
  156. $redis->smove(‘set1′,’set2′,’ab’);//移动’set1′中的’ab’到’set2′,返回true or false
  157.  
  158. //scard 返回当前set表元素个数
  159. $redis->scard(‘set2′);//2
  160.  
  161. //sismember 判断元素是否属于当前表
  162. $redis->sismember(‘set2′,’123′); //true or false
  163.  
  164. //smembers 返回当前表的所有元素
  165. $redis->smembers(‘set2′); //array(’123′,’ab’);
  166.  
  167. //sinter/sunion/sdiff 返回两个表中元素的交集/并集/补集
  168. $redis->sadd(‘set1′,’ab’);
  169. $redis->sinter(‘set2′,’set1′); //返回array(‘ab’)
  170.  
  171. //sinterstore/sunionstore/sdiffstore 将两个表交集/并集/补集元素copy到第三个表中
  172. $redis->set(‘foo’,0);
  173. $redis->sinterstore(‘foo’,'set1′); //这边等同于将’set1′的内容copy到’foo’中,并将’foo’转为set表
  174. $redis->sinterstore(‘foo’,array(‘set1′,’set2′)); //将’set1′和’set2′中相同的元素copy到’foo’表中,覆盖’foo’原有内容
  175.  
  176. //srandmember 返回表中一个随机元素
  177. $redis->srandmember(‘set1′);
  178.  
  179. /**
  180. 有序set表操作
  181. */
  182.  
  183. //sadd 增加元素,并设置序号,返回true,重复返回false
  184. $redis->zadd(‘zset1′,1,’ab’);
  185. $redis->zadd(‘zset1′,2,’cd’);
  186. $redis->zadd(‘zset1′,3,’ef’);
  187.  
  188. //zincrby 对指定元素索引值的增减,改变元素排列次序
  189. $redis->zincrby(‘zset1′,10,’ab’);//返回11
  190.  
  191. //zrem 移除指定元素
  192. $redis->zrem(‘zset1′,’ef’); //true or false
  193.  
  194. //zrange 按位置次序返回表中指定区间的元素
  195. $redis->zrange(‘zset1′,0,1); //返回位置0和1之间(两个)的元素
  196. $redis->zrange(‘zset1′,0,-1);//返回位置0和倒数第一个元素之间的元素(相当于所有元素)
  197.  
  198. //zrevrange 同上,返回表中指定区间的元素,按次序倒排
  199. $redis->zrevrange(‘zset1′,0,-1); //元素顺序和zrange相反
  200.  
  201. //zrangebyscore/zrevrangebyscore 按顺序/降序返回表中指定索引区间的元素
  202. $redis->zadd(‘zset1′,3,’ef’);
  203. $redis->zadd(‘zset1′,5,’gh’);
  204. $redis->zrangebyscore(‘zset1′,2,9); //返回索引值2-9之间的元素 array(‘ef’,'gh’)
  205. //参数形式
  206. $redis->zrangebyscore(‘zset1′,2,9,’withscores’); //返回索引值2-9之间的元素并包含索引值 array(array(‘ef’,3),array(‘gh’,5))
  207. $redis->zrangebyscore(‘zset1′,2,9,array(‘withscores =>true,’limit’=>array(1, 2))); //返回索引值2-9之间的元素,’withscores’ =>true表示包含索引值; ‘limit’=>array(1, 2),表示最多返回2条,结果为array(array(‘ef’,3),array(‘gh’,5))
  208.  
  209. //zunionstore/zinterstore 将多个表的并集/交集存入另一个表中
  210. $redis->zunionstore(‘zset3′,array(‘zset1′,’zset2′,’zset0′)); //将’zset1′,’zset2′,’zset0′的并集存入’zset3′
  211. //其它参数
  212. $redis->zunionstore(‘zset3′,array(‘zset1′,’zset2′),array(‘weights => array(5,0)));//weights参数表示权重,其中表示并集后值大于5的元素排在前,大于0的排在后
  213. $redis->zunionstore(‘zset3′,array(‘zset1′,’zset2′),array(‘aggregate => max’));//’aggregate’ => ‘max’或’min’表示并集后相同的元素是取大值或是取小值
  214.  
  215. //zcount 统计一个索引区间的元素个数
  216. $redis->zcount(‘zset1′,3,5);//
  217. $redis->zcount(‘zset1′,’(3′,5)); //’(3′表示索引值在3-5之间但不含3,同理也可以使用’(5′表示上限为5但不含5
  218.  
  219. //zcard 统计元素个数
  220. $redis->zcard(‘zset1′);//4
  221.  
  222. //zscore 查询元素的索引
  223. $redis->zscore(‘zset1′,’ef’);//3
  224.  
  225. //zremrangebyscore 删除一个索引区间的元素
  226. $redis->zremrangebyscore(‘zset1′,0,2); //删除索引在0-2之间的元素(‘ab’,'cd’),返回删除元素个数2
  227.  
  228. //zrank/zrevrank 返回元素所在表顺序/降序的位置(不是索引)
  229. $redis->zrank(‘zset1′,’ef’);//返回0,因为它是第一个元素;zrevrank则返回1(最后一个)
  230.  
  231. //zremrangebyrank 删除表中指定位置区间的元素
  232. $redis->zremrangebyrank(‘zset1′,0,10); //删除位置为0-10的元素,返回删除的元素个数2
  233.  
  234. /**
  235. hash表操作
  236. */
  237.  
  238. //hset/hget 存取hash表的数据
  239. $redis->hset(‘hash1′,’key1′,’v1′); //将key为’key1′ value为’v1′的元素存入hash1表
  240. $redis->hset(‘hash1′,’key2′,’v2′);
  241. $redis->hget(‘hash1′,’key1′); //取出表’hash1′中的key ‘key1′的值,返回’v1′
  242.  
  243. //hexists 返回hash表中的指定key是否存在
  244. $redis->hexists (‘hash1′,’key1′); //true or false
  245.  
  246. //hdel 删除hash表中指定key的元素
  247. $redis->hdel(‘hash1′,’key2′); //true or false
  248.  
  249. //hlen 返回hash表元素个数
  250. $redis->hlen(‘hash1′); //1
  251.  
  252. //hsetnx 增加一个元素,但不能重复
  253. $redis->hsetnx(‘hash1′,’key1′,’v2′); //false
  254. $redis->hsetnx(‘hash1′,’key2′,’v2′); //true
  255.  
  256. //hmset/hmget 存取多个元素到hash表
  257. $redis->hmset(‘hash1′,array(‘key3′=>’v3′,’key4′=>’v4′));
  258. $redis->hmget(‘hash1′,array(‘key3′,’key4′)); //返回相应的值 array(‘v3′,’v4′)
  259.  
  260. //hincrby 对指定key进行累加
  261. $redis->hincrby(‘hash1′,’key5′,3); //返回3
  262. $redis->hincrby(‘hash1′,’key5′,10); //返回13
  263.  
  264. //hkeys 返回hash表中的所有key
  265. $redis->hkeys(‘hash1′); //返回array(‘key1′,’key2′,’key3′,’key4′,’key5′)
  266.  
  267. //hvals 返回hash表中的所有value
  268. $redis->hvals(‘hash1′); //返回array(‘v1′,’v2′,’v3′,’v4′,13)
  269.  
  270. //hgetall 返回整个hash表元素
  271. $redis->hgetall(‘hash1′); //返回array(‘key1′=>’v1′,’key2′=>’v2′,’key3′=>’v3′,’key4′=>’v4′,’key5′=>13)
  272.  
  273. /**
  274. 排序操作
  275. */
  276.  
  277. //sort 排序
  278. $redis->rpush(‘tab’,3);
  279. $redis->rpush(‘tab’,2);
  280. $redis->rpush(‘tab’,17);
  281. $redis->sort(‘tab’); //返回array(2,3,17)
  282. //使用参数,可组合使用 array(‘sort’ => ‘desc’,'limit’ => array(1, 2))
  283. $redis->sort(‘tab’,array(‘sort => desc’)); //降序排列,返回array(17,3,2)
  284. $redis->sort(‘tab’,array(‘limit => array(1, 2))); //返回顺序位置中1的元素2个(这里的2是指个数,而不是位置),返回array(3,17)
  285. $redis->sort(‘tab’,array(‘limit => array(‘alpha => true))); //按首字符排序返回array(17,2,3),因为17的首字符是’1′所以排首位置
  286. $redis->sort(‘tab’,array(‘limit => array(‘store => ordered’))); //表示永久性排序,返回元素个数
  287. $redis->sort(‘tab’,array(‘limit => array(‘get => pre_*’))); //使用了通配符’*'过滤元素,表示只返回以’pre_’开头的元素
  288.  
  289. /**
  290. redis管理操作
  291. */
  292.  
  293. //select 指定要操作的数据库
  294. $redis->select(‘mydb’); //指定为mydb,不存在则创建
  295.  
  296. //flushdb 清空当前库
  297. $redis->flushdb();
  298.  
  299. //move 移动当库的元素到其它库
  300. $redis->set(‘foo’, bar’);
  301. $redis->move(‘foo’, mydb2′); //若’mydb2′库存在
  302.  
  303. //info 显示服务当状态信息
  304. $redis->info();
  305.  
  306. //slaveof 配置从服务器
  307. $redis->slaveof(’127.0.0.1′,80); //配置127.0.0.1端口80的服务器为从服务器
  308. $redis->slaveof(); //清除从服务器
  309.  
  310. //同步保存服务器数据到磁盘
  311. $redis->save();
  312. //异步保存服务器数据到磁盘
  313. $redis->bgsave();
  314. //??
  315. $redis->bgrewriteaof();
  316. //返回最后更新磁盘的时间
  317. $redis->lastsave();
  318.  
  319. //set/get多个key-value
  320. $mkv = array(
  321. usr:0001 => First user’,
  322. usr:0002 => Second user’,
  323. usr:0003 => Third user
  324. );
  325. $redis->mset($mkv); //存储多个key对应的value
  326. $retval = $redis->mget(array_keys($mkv)); //获取多个key对应的value
  327. print_r($retval);
  328.  
  329. //批量操作
  330. $replies = $redis->pipeline(function($pipe) {
  331. $pipe->ping();
  332. $pipe->flushdb();
  333. $pipe->incrby(‘counter’, 10); //增量操作
  334. $pipe->incrby(‘counter’, 30);
  335. $pipe->exists(‘counter’);
  336. $pipe->get(‘counter’);
  337. $pipe->mget(‘does_not_exist’, counter’);
  338. });
  339. print_r($replies);
  340.  
  341. //CAS,事务性操作
  342.  
  343. function zpop($client, $zsetKey) {
  344. $element = null;
  345. $options = array(
  346. cas => true, // Initialize with support for CAS operations
  347. watch => $zsetKey, // Key that needs to be WATCHed to detect changes
  348. retry => 3, // Number of retries on aborted transactions, after
  349. // which the client bails out with an exception.
  350. );
  351.  
  352. $txReply = $client->multiExec($options, function($tx)
  353. use ($zsetKey, &$element) {
  354. @list($element) = $tx->zrange($zsetKey, 0, 0);
  355. if (isset($element)) {
  356. $tx->multi(); // With CAS, MULTI *must* be explicitly invoked.
  357. $tx->zrem($zsetKey, $element);
  358. }
  359. });
  360. return $element;
  361. }
  362. $zpopped = zpop($redis, zset’);
  363. echo isset($zpopped) ? ZPOPed $zpopped : Nothing to ZPOP!”, \n”;
  364.  
  365. //对存取的key加前缀,如: ‘nrk:’
  366. $redis->getProfile()->setPreprocessor(new KeyPrefixPreprocessor(‘nrk:’));
  367.  
  368. //分布式存储的一些方法
  369. $multiple_servers = array(
  370. array(
  371. host => 127.0.0.1′,
  372. port => 6379,
  373. database => 15,
  374. alias => first’,
  375. ),
  376. array(
  377. host => 127.0.0.1′,
  378. port => 6380,
  379. database => 15,
  380. alias => second’,
  381. ),
  382. );
  383.  
  384. use Predis\Distribution\IDistributionStrategy;
  385.  
  386. class NaiveDistributionStrategy implements IDistributionStrategy {
  387. private $_nodes, $_nodesCount;
  388.  
  389. public function __constructor() {
  390. $this->_nodes = array();
  391. $this->_nodesCount = 0;
  392. }
  393.  
  394. public function add($node, $weight = null) {
  395. $this->_nodes[] = $node;
  396. $this->_nodesCount++;
  397. }
  398.  
  399. public function remove($node) {
  400. $this->_nodes = array_filter($this->_nodes, function($n) use($node) {
  401. return $n !== $node;
  402. });
  403. $this->_nodesCount = count($this->_nodes);
  404. }
  405.  
  406. public function get($key) {
  407. $count = $this->_nodesCount;
  408. if ($count === 0) {
  409. throw new RuntimeException(‘No connections’);
  410. }
  411. return $this->_nodes[$count > 1 ? abs(crc32($key) % $count) : 0];
  412. }
  413.  
  414. public function generateKey($value) {
  415. return crc32($value);
  416. }
  417. }
  418.  
  419. //配置键分布策略
  420. $options = array(
  421. key_distribution => new NaiveDistributionStrategy(),
  422. );
  423.  
  424. $redis = new Predis\Client($multiple_servers, $options);
  425.  
  426. for ($i = 0; $i set(“key:$i”, str_pad($i, 4, 0′, 0));
  427. $redis->get(“key:$i”);
  428. }
  429.  
  430. $server1 = $redis->getClientFor(‘first’)->info();
  431. $server2 = $redis->getClientFor(‘second’)->info();
  432.  
  433. printf(“Server ‘%s has %d keys while server ‘%s has %d keys.\n”,
  434. first’, $server1['db15']['keys'], second’, $server2['db15']['keys']

From:

redis在PHP中的基本使用案例

PHP-redis中文文档 - weafer - 博客园

Redis在PHP中的基本使用案例的更多相关文章

  1. redis在PHP中的基本使用案例(觉得比较实用)

    源地址  http://www.t086.com/article/4901

  2. NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例

    一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器 ...

  3. Redis作为消息队列服务场景应用案例

    NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例   一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更 ...

  4. 【转】NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例

    一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器 ...

  5. 使用Redis作为消息队列服务场景应用案例

    一.消息队列场景简介 "消息"是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,"消息队列&qu ...

  6. Redis在Linux中的运用

    Redis在Linux中的运用 一.Redis安装部署 下载: wget http://download.redis.io/releases/redis-3.2.12.tar.gz 解压: 上传至 / ...

  7. Redis设置认证密码 Redis使用认证密码登录 在Redis集群中使用认证密码

    Redis默认配置是不需要密码认证的,也就是说只要连接的Redis服务器的host和port正确,就可以连接使用.这在安全性上会有一定的问题,所以需要启用Redis的认证密码,增加Redis服务器的安 ...

  8. Redis 在新浪微博中的应用

    Redis 在新浪微博中的应用 Redis简介 1. 支持5种数据结构 支持strings, hashes, lists, sets, sorted setsstring是很好的存储方式,用来做计数存 ...

  9. 【Egret】中tree组件使用案例

    Egret中tree组件使用案例,包含(文本过多时,自动换行功能) 下面代码结合http://bbs.egret.com/forum.php?mod=viewthread&tid=19028& ...

随机推荐

  1. MVC-Model数据注解(一)-系统(DataAnnotations)

    要使用验证,首先,web.config要开户验证: <appSettings> <add key="ClientValidationEnabled" value= ...

  2. Unity3d Shader开发(三)Pass(Color, Material, Lighting )

    材质和灯光参数被用于控制内置顶点光照.顶点光照是Direct3D/OpenGL标准的按每顶点计算的光照模型.光照打开时,光照受材质块,颜色材质和平行高光命令的影响. 每像素光照常被实现为自定义顶点/片 ...

  3. struts2用了哪几种模式

    代理模式 责任连模式 ActionVacation 迭代模式

  4. 正则表达式的秘籍-b

    一. 正则表达式和其他方法的比较 1.我们一般将谓词和正则表达式配合使用,这是最常用的方法. - (BOOL)validateNumber:(NSString *) textString {     ...

  5. 【转载】Java 升级到jdk7后DbVisualizer 6 启动空指针的处理方案

    将JDK从6升级到了7(或从其他电脑移植DBV文件夹后),每当启动DbVisualizer 6的时候都会报空指针异常 在官网上找到了相关的方案,如下: In the DbVisualizer inst ...

  6. delphi xe5 android 控制蓝牙

    本文部分内容摘自: http://www.pclviewer.com/android/用以下代码中的接口实现控制蓝牙的开.关及详细信息 unit Androidapi.JNI.BluetoothAda ...

  7. [二分匹配]URAL1721Two Sides of the Same Coin

    题意:给n个人,每个人都有3个参数,分别是名字,能做的事(a:statements  b:testdate  a.b都可以:anything),Rank 要求:一个人只能做一个事件,要两个人Rank相 ...

  8. TC SRM 607 DIV2

    求拼接完成后的字符串包含的子回文串的数目,一开始还用暴力去做,想都不用想 肯定超时了. 复习了一下求最长子回文串的算法,发现可以类似解决. 给相邻字符之间添加一个'@'字符,这样所有的回文串都是奇数长 ...

  9. UVA 558 Wormholes

    要问是否存在一个总权重为负数的环,用dfs即可解决. time:33ms #include <cstdio> #include <cstring> #define N 3000 ...

  10. 10. 将摄像机对准物体,并显示整个对准过程,摄像机Zoom

    1. 如果把代码放到按钮事件中调用,达不到想要的效果 2. 可以不用委托,但是要在Update函数中写调用CameraZoonIn的代码 3. 有很多需要改进的地方,可以参考使用 iTween 插件达 ...