├── composer.json ├── README.md └── redis └── Redis.php /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | "name": "xcjiu/php-redis", 4 | "type": "library", 5 | "description": "application Redis extension for PHP class", 6 | "require": { 7 | "php": ">=5.4.0" 8 | }, 9 | "authors": [ 10 | { 11 | "name": "xcjiu", 12 | "email": "3483552276@qq.com" 13 | } 14 | ], 15 | "autoload": { 16 | "psr-4": {"Redis\\": "redis"} 17 | }, 18 | "license": "Apache-2.0" 19 | 20 | } 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PHP-Redis 扩展应用类 2 | **(开始在 PHP 中使用 Redis 前, 请确保已经安装了 redis 服务及 PHP redis 驱动)** 3 | ### 这是一个Redis应用类,所有方法均使用静态调用(包含字符串方法,哈希表,列表,集合,有序集合常用方法封装) 4 | #### 实例化类配置参数说明:$redis = new redis\Redis($config); 5 | ``` 6 | $config = [ 7 | 'host' => '127.0.0.1', //服务器连接地址。默认='127.0.0.1' 8 | 'port' => '6379', //端口号。默认='6379' 9 | 'expire' => 3600, // 默认全局过期时间,单位秒。不填默认3600 10 | 'password' => '', // 连接密码,如果有设置密码的话 11 | 'db' => 0, //缓存库选择。默认0 12 | 'timeout' => 10 // 连接超时时间(秒)。默认10 13 | ]; 14 | 15 | /*不用配置所有的参数,只需要配置和默认配置不同的参数即可,如: 16 | $config = [ 17 | 'password' => '123456', 18 | 'expire' => 7200 19 | ];*/ 20 | 21 | ``` 22 | 如果不需要更改默认参数值的话,不需要传入任何参数:$redis = new redis\Redis(); 23 | 24 | 如果你放在框架里用(或有自动加载机制),直接命名空间引入即可用,不需要实例化类! 25 | 26 | use redis\Redis; 就可直接静态调用了 27 | 28 | 如thinkphp框架,把文件夹redis放入extend目录下,在控制器中使用如: 29 | ``` 30 | set($key, $value); 58 | - ### $redis::selectdb($db); 59 | ### 切换到指定的数据库, 数据库索引号用数字值指定 60 | 61 | 参数说明: 62 | 63 | $db int [指定的库] 64 | # 65 | 66 | 67 | - ### $redis::savedb(); 68 | ### 创建当前数据库的备份(该命令将在 redis 安装目录中创建dump.rdb文件) 69 | return bool 成功true否则false (如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可) 70 | # 71 | 72 | 73 | - ### $redis::set($key, $value, $expire=0); 74 | ### 存储一个键值 (支持数组、对象) 75 | 76 | 参数说明:(参数名,类型,[中文说明]) 77 | 78 | $key string | int [ 键名] 79 | 80 | $value mix [要存储的值,支持数组、对象] 81 | 82 | $expire int [过期时间(秒),如果使用全局过期时间配置,可以不填] 83 | 84 | return bool [返回布尔值,成功true, 否则false] 85 | # 86 | 87 | 88 | 89 | - ### $redis::expire($key, $expire=0); 90 | ### 设置过期时间(秒) 91 | 92 | 参数说明:(参数名,类型,[中文说明]) 93 | 94 | $key string | int [ 键名] 95 | 96 | $expire int [过期时间(秒),如果使用全局过期时间配置,可以不填] 97 | 98 | return bool [返回布尔值,成功true, 否则false] 99 | # 100 | 101 | 102 | 103 | - ### $redis::get($key); 104 | ### 获取一个键值 105 | 106 | 参数说明: 107 | 108 | $key string | int [键名] 109 | 110 | return mix [返回键值,如果键不存在则返回false] 111 | # 112 | 113 | 114 | 115 | - ### $redis::del($key); 116 | 117 | ### 删除一个键值 118 | 119 | 参数说明: 120 | 121 | $key string | int [键名] 122 | 123 | return mix [删除成功返回 1,删除失败或键不存在返回 0] 124 | # 125 | 126 | 127 | 128 | - ### $redis::substr($key, $start, $end=0); 129 | 130 | ### 截取缓存字符串值(支持汉字) 131 | 132 | 参数说明: 133 | 134 | $key string | int [键名] 135 | 136 | $start int [起始位置,从0开始记] 137 | 138 | $end int [截取长度,默认值0表示截取从起始位置到最后一个字符] 139 | 140 | return string [返回字符串,如果键不存在或取值不是字符串类型则返回 false] 141 | # 142 | 143 | 144 | 145 | - ### $redis::replace($key, $value, $expire=0); 146 | 147 | ### 设置指定 key 的值,并返回 key 的旧值(支持数组) 148 | 149 | 参数说明: 150 | 151 | $key string | int [键名] 152 | 153 | $value mix [要指定的键值] 154 | 155 | $expire int [过期时间,如果不设置则用全局过期配置] 156 | 157 | return mix [返回旧值,如果旧值不存在则返回false,并新创建key的键值] 158 | # 159 | 160 | 161 | 162 | - ### $redis::mset($arr); 163 | 164 | ### 同时设置一个或多个键值对。(支持键值为数组) 165 | 166 | 参数说明: 167 | 168 | $arr array [要设置的键值对数组] 169 | 170 | return bool [返回布尔值,成功true否则false] 171 | # 172 | 173 | 174 | 175 | - ### $redis::mget($args) 176 | 177 | ### 返回所有(一个或多个)给定 key 的值 178 | 179 | 参数说明: 180 | 181 | 可传入一个或多个键名参数,键名字符串类型,如 $values = $redis::mget('one','two','three', ...); 182 | 183 | 返回包含所有指定键值的数组,如果值不存在则返回false 184 | # 185 | 186 | 187 | 188 | - ### $redis::expiretime($key); 189 | ### 查询剩余过期时间(秒) 190 | 191 | 参数说明: 192 | 193 | $key string | int [键名] 194 | 195 | return int [返回剩余的存活时间(秒),如果已过期则返回负数] 196 | # 197 | 198 | 199 | 200 | - ### $redis::setnx($key, $value, $expire=0); 201 | ### 指定的 key 不存在时,为 key 设置指定的值(SET if Not eXists) 202 | 203 | 参数说明: 204 | 205 | $key string | int [键名] 206 | 207 | $value mix [要指定的键值] 208 | 209 | $expire int [过期时间,如果不设置则用全局过期配置] 210 | 211 | return bool [设置成功返回true否则false] 212 | # 213 | 214 | 215 | 216 | - ### $redis::valuelen($key); 217 | ### 返回字符串的长度,如果键值是数组则返回数组元素的个数 218 | 219 | 参数说明: 220 | 221 | $key string | int [键名] 222 | 223 | return int [返回长度值,如果键值不存在则返回0] 224 | # 225 | 226 | 227 | 228 | - ### $redis::inc($key, $int=0); 229 | ### 将 key 中储存的数字值自增 230 | 231 | 参数说明: 232 | 233 | $key string | int [键名] 234 | 235 | $int int [$int 自增量,如果不填则默认是自增量为 1] 236 | 237 | return int | bool [返回自增后的值,如果键不存在则新创建值为0并返回自增后的数值.如果键值不是可转换的整数,则返回false] 238 | # 239 | 240 | 241 | 242 | - ### $redis::dec($key, $int=0); 243 | ### 将 key 中储存的数字值自减 244 | 245 | 参数说明: 246 | 247 | $key string | int [键名] 248 | 249 | $int int [$int 自减量,如果不填则默认是自减量为 1] 250 | 251 | return int | bool [返回自减后的值,如果键不存在则新创建值为0并返回自减后的数值.如果键值不是可转换的整数,则返回false] 252 | # 253 | 254 | 255 | 256 | - ### $redis::append($key, $value, $pos=false, $expire=0); 257 | ### 为指定的 key 追加值(追加至末尾或开头位置,支持数组值追加) 258 | 259 | 参数说明: 260 | 261 | $key string | int [键名] 262 | 263 | $value string | array [要指定的键值] 264 | 265 | $pos bool [追加的位置,默认false为末尾,true为向开头位置追加] 266 | 267 | $expire int [过期时间,如果不设置则用全局过期配置] 268 | 269 | return bool [设置成功返回true否则false,向字符串值追加时加入的值必须为字符串类型。如果键不存在则创建新的键值对] 270 | # 271 | 272 | 273 | 274 | - ### $redis::hset($table, $column, $value, $expire=0); 275 | ### 为哈希表中的字段赋值 276 | 277 | 参数说明: 278 | 279 | $table string [哈希表名] 280 | 281 | $column string [字段名] 282 | 283 | $value string | array [字段值,如果传入的是数组则自动转换为json字符串] 284 | 285 | $expire int [过期时间,如果不填,默认0为不设置过期时间] 286 | 287 | return int 如果成功返回 1,否则返回 0.当字段值已存在时覆盖旧值并且返回 0 288 | # 289 | 290 | 291 | 292 | - ### $redis::hget($table, $column); 293 | ### 获取哈希表字段值 294 | 295 | 参数说明: 296 | 297 | $table string [哈希表名] 298 | 299 | $column string [字段名] 300 | 301 | return string 返回字段值,如果字段值是数组保存的返回json格式字符串,转换成数组json_encode($value),如果字段不存在返回false 302 | # 303 | 304 | 305 | - ### $redis::hdel($table, $column1, $column2, ....); 306 | ### 删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略(删除整个哈希表用$redis::del($table)) 307 | 308 | 参数说明: 309 | 310 | $table string [哈希表名] 311 | 312 | $column string [字段名] 313 | 314 | return int 返回被成功删除字段的数量,不包括被忽略的字段,(删除哈希表用$redis::del($table)) 315 | # 316 | 317 | 318 | 319 | - ### $redis::hexists($table, $column); 320 | ### 查看哈希表的指定字段是否存在 321 | 322 | 参数说明: 323 | 324 | $table string [哈希表名] 325 | 326 | $column string [字段名] 327 | 328 | return bool 存在返回true,否则false 329 | # 330 | 331 | 332 | - ### $redis::hgetall($table); 333 | ### 返回哈希表中,所有的字段和值(键值对数组) 334 | 335 | 参数说明: 336 | 337 | $table string [哈希表名] 338 | 339 | return array 返回键值对数组 340 | # 341 | 342 | 343 | - ### $redis::hinc($table, $column, $num=1); 344 | ### 为哈希表中的字段值加上指定增量值(支持整数和浮点数) 345 | 346 | 参数说明: 347 | 348 | $table string [哈希表名] 349 | 350 | $column string [字段名] 351 | 352 | $num int [增量值,默认1,也可以填入负数值,相当于对指定字段进行减法操作] 353 | 354 | return int|float|bool 返回计算后的字段值,如果字段值不是数字值则返回false,如果哈希表不存在或字段不存在返回false 355 | # 356 | 357 | 358 | - ### $redis::hkeys($table); 359 | ### 获取哈希表中的所有字段 360 | 361 | 参数说明: 362 | 363 | $table string [哈希表名] 364 | 365 | return array 返回包含所有字段的数组 366 | # 367 | 368 | 369 | - ### $redis::hvals($table); 370 | ### 获取哈希表中的所有字段值 371 | 372 | 参数说明: 373 | 374 | $table string [哈希表名] 375 | 376 | return array 返回包含所有字段值的数组,数字索引 377 | # 378 | 379 | 380 | 381 | - ### $redis::hlen($table); 382 | ### 获取哈希表中字段的数量 383 | 384 | 参数说明: 385 | 386 | $table string [哈希表名] 387 | 388 | return int 返回字段数量,如果哈希表不存在则返回0 389 | # 390 | 391 | 392 | - ### $redis::hmget($table, $column1, $column2, ....); 393 | ### 获取哈希表中,一个或多个给定字段的值 394 | 395 | 参数说明: 396 | 397 | $table string [哈希表名] 398 | 399 | $columns string [字段名,可传多个] 400 | 401 | return array 返回键值对数组,如果字段不存在则字段值为null, 如果哈希表不存在返回空数组 402 | # 403 | 404 | 405 | - ### $redis::hmset($table, array $data, $expire=0); 406 | ### 同时将多个 field-value (字段-值)对设置到哈希表中 407 | 408 | 参数说明: 409 | 410 | $table string [哈希表名] 411 | 412 | $data array [要添加的键值对] 413 | 414 | $expire int [过期时间,默认值0或不填则不设置过期时间] 415 | 416 | return bool 成功返回true,否则false 417 | # 418 | 419 | 420 | - ### $redis::hsetnx($table, $column, $value, $expire=0); 421 | ### 为哈希表中不存在的的字段赋值 422 | 423 | 参数说明: 424 | 425 | $table string [哈希表名] 426 | 427 | $column string [字段名] 428 | 429 | $value mix [字段值] 430 | 431 | $expire int [过期时间,默认值0或不填则不设置过期时间] 432 | 433 | return bool 成功返回true,否则false 434 | # 435 | 436 | 437 | - ### $redis::lpush($list, $value, $pop='first', $expire=0); 438 | ### 将一个或多个值插入到列表头部(值可重复)或列表尾部。如果列表不存在,则创建新列表并插入值将一个或多个值插入到列表头部。如果列表不存在,则创建新列表并插入值 439 | 440 | 参数说明: 441 | 442 | $list string [列表名] 443 | 444 | $value string|array [要插入的值,如果要插入多个值请传入多个值的数组] 445 | 446 | $pop string [要插入的位置,默认first头部,last表示尾部] 447 | 448 | $expire int [过期时间,默认值0或不填则不设置过期时间] 449 | 450 | return int 返回列表的长度 451 | # 452 | 453 | 454 | - ### $redis::lindex($list, $index=0); 455 | ### 通过索引获取列表中的元素 456 | 457 | 参数说明: 458 | 459 | $list string [列表名] 460 | 461 | $index int 索引位置,从0开始计,默认0表示第一个元素,-1表示最后一个元素索引 462 | 463 | return string 返回指定索引位置的元素 464 | # 465 | 466 | 467 | - ### $redis::lset($list, $index, $value); 468 | ### 通过索引来设置元素的值 469 | 470 | 参数说明: 471 | 472 | $list string [列表名] 473 | 474 | $index int [索引位置] 475 | 476 | $value string [要设置的值] 477 | 478 | return bool 成功返回true,否则false.当索引参数超出范围,或列表不存在返回false。 479 | # 480 | 481 | 482 | - ### $redis::lrange($list, $start=0, $end=-1); 483 | ### 返回列表中指定区间内的元素 484 | 485 | 参数说明: 486 | 487 | $list string [列表名] 488 | 489 | $start int 起始位置,从0开始计,默认0 490 | 491 | $end int 结束位置,-1表示最后一个元素,默认-1 492 | 493 | return array 返回列表元素数组 494 | # 495 | 496 | 497 | - ### $redis::llen($list); 498 | ### 返回列表的长度 499 | 500 | 参数说明: 501 | 502 | $list string [列表名] 503 | 504 | return int 返回列表长度 505 | # 506 | 507 | 508 | - ### $redis::lpop($list, $pop='first'); 509 | ### 移出并获取列表的第一个元素或最后一个元素(默认第一个元素) 510 | 511 | 参数说明: 512 | 513 | $list string [列表名] 514 | 515 | $pop string [移出并获取的位置,默认first第一个元素,设为last则为最后一个元素] 516 | 517 | return string|bool 移出并返回列表第一个元素或最后一个元素,如果列表不存在则返回false 518 | # 519 | 520 | 521 | - ### $redis::lpoppush($list1, $list2); 522 | ### 从列表1中弹出最后一个值,将弹出的元素插入到另外一个列表2开头并返回这个元素 523 | 524 | 参数说明: 525 | 526 | $list1 string [要弹出元素的列表名] 527 | 528 | $list2 string [要接收元素的列表名] 529 | 530 | return string|bool 返回被弹出的元素,如果其中有一个列表不存在则返回false 531 | # 532 | 533 | 534 | - ### $redis::lisert($list, $element, $value, $pop='before'); 535 | ### 用于在指定的列表元素前或者后插入元素。如果元素有重复则选择第一个出现的位置。当指定元素不存在于列表中时,不执行任何操作 536 | 537 | 参数说明: 538 | 539 | $list string [列表名] 540 | 541 | $element string [指定的元素] 542 | 543 | $value string [要插入的元素] 544 | 545 | return int 返回列表的长度。 如果没有找到指定元素 ,返回 -1 。 如果列表不存在或为空列表,返回 0 。 546 | # 547 | 548 | 549 | - ### $redis::lrem($list, $element, $count=0); 550 | ### 移除列表中指定的元素 551 | 552 | 参数说明: 553 | 554 | $list string [列表名] 555 | 556 | $element string [指定的元素] 557 | 558 | $count int [要删除的个数,0表示删除所有指定元素,负整数表示从表尾搜索, 默认0] 559 | 560 | return int 返回被移除元素的数量。 列表不存在时返回 0 561 | # 562 | 563 | 564 | - ### $redis::ltrim($list, $start, $stop); 565 | ### 让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除 566 | 567 | 参数说明: 568 | 569 | $list string [列表名] 570 | 571 | $start int [起始位置,从0开始计] 572 | 573 | $stop int [结束位置,负数表示倒数第n个位置] 574 | 575 | return bool 成功返回true否则false 576 | # 577 | 578 | 579 | - ### $redis::sadd($set, $member); 580 | ### 将一个或多个成员加入到集合中,已经存在于集合的元素将被忽略.如果集合不存在,则创建。(无序集合) 581 | 582 | 参数说明: 583 | 584 | $set string [集合名称] 585 | 586 | $member string|array [要加入的值,如果要加入多个值请传入多个值的数组] 587 | 588 | return int 返回被添加元素的数量 589 | # 590 | 591 | 592 | - ### $redis::smembers($set); 593 | ### 返回无序集合中的所有的成员 594 | 595 | 参数说明: 596 | 597 | $set string [集合名称] 598 | 599 | return array 返回包含所有成员的数组 600 | # 601 | 602 | 603 | - ### $redis::scard($set); 604 | ### 获取集合中元素的数量。 605 | 606 | 参数说明: 607 | 608 | $set string [集合名称] 609 | 610 | return int 返回集合的成员数量 611 | # 612 | 613 | 614 | - ### $redis::spop($set); 615 | ### 移除并返回集合中的一个随机元素 616 | 617 | 参数说明: 618 | 619 | $set string [集合名称] 620 | 621 | return string|bool 返回移除的元素,如果集合为空则返回false 622 | # 623 | 624 | 625 | - ### $redis::srem($set, $member); 626 | ### 移除集合中的一个或多个成员元素,不存在的成员元素会被忽略 627 | 628 | 参数说明: 629 | 630 | $set string [集合名称] 631 | 632 | $member string|array [要移除的元素,如果要移除多个元素请传入多个元素的数组] 633 | 634 | return int 返回被移除元素的个数 635 | # 636 | 637 | 638 | - ### $redis::srand($set, $count=0); 639 | ### 返回集合中的一个或多个随机元素 640 | 641 | 参数说明: 642 | 643 | $set string [集合名称] 644 | 645 | $count int [要返回的元素个数,0表示返回单个元素,大于等于集合基数则返回整个元素数组。默认0] 646 | 647 | return string|array [返回随机元素,如果是返回多个则为数组返回] 648 | # 649 | 650 | 651 | - ### $redis::sdiff($set1, $set2); 652 | ### 返回给定集合之间的差集(集合1相对于集合2的差集)。不存在的集合将视为空集 653 | 654 | 参数说明: 655 | 656 | $set1 string [集合1名称] 657 | 658 | $set2 string [集合2名称] 659 | 660 | return array 返回差集数组(即筛选存在集合1中但不存在于集合2中的元素) 661 | # 662 | 663 | 664 | - ### $redis::sdiffstore($set, $set1, $set2); 665 | ### 将给定集合set1和set2之间的差集存储在指定的set集合中。如果指定的集合已存在,则会被覆盖。 666 | 667 | 参数说明: 668 | 669 | $set string [指定存储的集合] 670 | 671 | $set1 string [集合1] 672 | 673 | $set2 string [集合2] 674 | 675 | return int 返回指定存储集合元素的数量 676 | # 677 | 678 | 679 | - ### $redis::sinter($set1, $set2); 680 | ### 返回set1集合和set2集合的交集(即筛选同时存在集合1和集合2中的元素) 681 | 682 | 参数说明: 683 | 684 | $set1 string [集合1] 685 | 686 | $set2 string [集合2] 687 | 688 | return array 返回包含交集元素的数组 689 | # 690 | 691 | 692 | - ### $redis::sinterstore($set, $set1, $set2); 693 | ### 将给定集合set1和set2之间的交集存储在指定的set集合中。如果指定的集合已存在,则会被覆盖。 694 | 695 | 参数说明: 696 | 697 | $set string [指定存储的集合] 698 | 699 | $set1 string [集合1] 700 | 701 | $set2 string [集合2] 702 | 703 | return int 返回指定存储集合元素的数量 704 | # 705 | 706 | 707 | - ### $redis::sismember($set, $member); 708 | ### 判断成员元素是否是集合的成员 709 | 710 | 参数说明: 711 | 712 | $set string [集合名称] 713 | 714 | $member string [要判断的元素] 715 | 716 | return bool 如果成员元素是集合的成员返回true,否则false 717 | # 718 | 719 | 720 | - ### $redis::remove($set1, $set2, $member); 721 | ### 将元素从集合1中移动到集合2中 722 | 723 | 参数说明: 724 | 725 | $set1 string [集合1] 726 | 727 | $set2 string [集合2] 728 | 729 | $member string [要移动的元素] 730 | 731 | return bool 成功返回true,否则false 732 | # 733 | 734 | 735 | - ### $redis::sunion($set1, $set2); 736 | ### 返回集合1和集合2的并集(即两个集合合并后去重的结果)。不存在的集合被视为空集。 737 | 738 | 参数说明: 739 | 740 | $set1 string [集合1] 741 | 742 | $set2 string [集合2] 743 | 744 | return array 返回并集数组 745 | # 746 | 747 | 748 | - ### $redis::sunionstore($set, $set1, $set2); 749 | ### 将给定集合set1和set2之间的交集存储在指定的set集合中。如果指定的集合已存在,则会被覆盖。 750 | 751 | 参数说明: 752 | 753 | $set string [指定存储的集合] 754 | 755 | $set1 string [集合1] 756 | 757 | $set2 string [集合2] 758 | 759 | return int 返回指定存储集合元素的数量 760 | # 761 | 762 | 763 | - ### $redis::zadd($set, $arr); 764 | ### 将一个或多个成员元素及其分数值加入到有序集当中,如果成员已存在则更新它的分数值,如果集合不存在则创建 765 | 766 | 参数说明: 767 | 768 | $set string [集合名称] 769 | 770 | $arr array [成员元素与其分数值的键值对数组(键是唯一的),如 $arr=['one'=>2.5]] 771 | 772 | return int 返回添加成功的成员数量 773 | # 774 | 775 | 776 | - ### $redis::zrange($set, $start=0, $stop=-1, $desc=false); 777 | ### 返回有序集中,指定区间内的成员。默认返回所有成员(默认升序排列) 778 | 779 | 参数说明: 780 | 781 | $set string [集合名称] 782 | 783 | $start int [起始位置,从0开始计,默认0] 784 | 785 | $stop int [结束位置,-1表示最后一位,默认-1] 786 | 787 | $desc bool [false默认升序排序,true为倒序] 788 | 789 | return array 返回有序集合中指定区间内的成员数组(默认返回所有) 790 | # 791 | 792 | 793 | - ### $redis::acard($set); 794 | ### 返回有序集合中成员数量 795 | 796 | 参数说明: 797 | 798 | $set string [集合名称] 799 | 800 | return int [返回有序集合的成员数量] 801 | # 802 | 803 | 804 | - ### $redis::zcount($set, $min, $max); 805 | ### 计算有序集合中指定分数区间的成员数量 806 | 807 | 参数说明: 808 | 809 | $set string [集合名称] 810 | 811 | $min int|float [最小分数值] 812 | 813 | $max int|float [最大分数值] 814 | 815 | return int 返回指定区间的成员数量 816 | # 817 | 818 | 819 | - ### $redis::zinc($set, $member, $num=1); 820 | ### 对有序集合中指定成员的分数加上增量 821 | 822 | 参数说明: 823 | 824 | $set string [集合名称] 825 | 826 | $member string [指定的元素] 827 | 828 | $num int|float [增量,负数值表示减法运算] 829 | 830 | return float 返回运算后的分数值(浮点型) 831 | # 832 | 833 | 834 | - ### $redis::zinterstore($set, $set1, $set2); 835 | ### 计算set1和set2有序集的交集,并将该交集(结果集)储存到新集合set中。 836 | 837 | 参数说明: 838 | 839 | $set string [要存储的集合名称] 840 | 841 | $set1 string [集合1] 842 | 843 | $set2 string [集合2] 844 | 845 | return int 返回保存到目标结果集的成员数量 846 | # 847 | 848 | 849 | - ### $redis::zunionstore($set, $set1, $set2); 850 | ### 计算set1和set2有序集的并集,并将该并集(结果集)储存到新集合set中。 851 | 852 | 参数说明: 853 | 854 | $set string [要存储的集合名称] 855 | 856 | $set1 string [集合1] 857 | 858 | $set2 string [集合2] 859 | 860 | return int 返回保存到目标结果集的成员数量 861 | # 862 | 863 | 864 | - ### $redis::zrangebyscore($set, $min, $max, $withscores=true); 865 | ### 返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列 866 | 867 | 参数说明: 868 | 869 | $set string [集合名称] 870 | 871 | $min string [最小分数值字符串表示,如:'1'表示>=1,'(1'表示>1] 872 | 873 | $max string [最大分数值字符串表示,如:'100'表示<=1,'(100'表示<100] 874 | 875 | $withscores bool 返回的数组是否包含分数值,默认true, false不包含 876 | 877 | return array 返回指定区间的成员,默认是元素=>分数值的键值对数组。如果只要返回包含元素的数组请设置$withscores=false 878 | # 879 | 880 | 881 | - ### $redis::zrank($set, $member); 882 | ### 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列 883 | 884 | 参数说明: 885 | 886 | $set string [集合名称] 887 | 888 | $member string [要排名的成员] 889 | 890 | return int|bool 返回 member 的排名, 如果member不存在返回false 891 | # 892 | 893 | 894 | - ### $redis::zrem($set, $members); 895 | ### 移除有序集中的一个或多个成员,不存在的成员将被忽略 896 | 897 | 参数说明: 898 | 899 | $set string [集合名称] 900 | 901 | $members string|array [要移除的成员,如果要移除多个请传入多个成员的数组] 902 | 903 | return int 返回被移除的成员数量,不存在的成员将被忽略 904 | # 905 | 906 | 907 | - ### $redis::zrembyscore($set, $min, $max); 908 | ### 移除有序集中,指定分数(score)区间内的所有成员。 909 | 910 | 参数说明: 911 | 912 | $set string [集合名称] 913 | 914 | $min int|float [最小分数值] 915 | 916 | $max int|float [最大分数值] 917 | 918 | return int 返回被移除的成员数量 919 | # 920 | 921 | 922 | - ### $redis::zrembyrank($set, $min, $max); 923 | ### 移除有序集中,指定排名(rank)区间内的所有成员(这个排名数字越大排名越高,最低排名0开始) 924 | 925 | 参数说明: 926 | 927 | $set string [集合名称] 928 | 929 | $min int [最小排名,从0开始计] 930 | 931 | $max int [最大排名] 932 | 933 | return int 返回被移除的成员数量 934 | # 935 | 936 | 937 | - ### $redis::zscore($set, $member); 938 | ### 返回有序集中,成员的分数值。 939 | 940 | 参数说明: 941 | 942 | $set string [集合名称] 943 | 944 | $members string [成员] 945 | 946 | return float|bool 返回分数值(浮点型),如果成员不存在返回false 947 | # 948 | 949 | 950 | 951 | 952 | 953 | 954 | 955 | 956 | 957 | 958 | 959 | 960 | 961 | 962 | 963 | 964 | 965 | 966 | 967 | 968 | 969 | 970 | 971 | 972 | 973 | 974 | 975 | 976 | 977 | 978 | 979 | 980 | 981 | 982 | 983 | -------------------------------------------------------------------------------- /redis/Redis.php: -------------------------------------------------------------------------------- 1 | connect(self::$host,self::$port,self::$timeout) or die('Redis 连接失败!'); 33 | if(!empty(self::$password)){ 34 | self::$redis->auth(self::$password); //如果有设置密码,则需要连接密码 35 | } 36 | if((int)self::$db){ 37 | self::$redis->select(self::$db); //选择缓存库 38 | } 39 | } 40 | 41 | //构造函数可能不起作用,则用这个初始化类 Redis::_initialize($config=[]) 42 | public static function _initialize($config=[]) 43 | { 44 | if($config && is_array($config)){ 45 | self::config($config); 46 | } 47 | if(self::$redis==null){ 48 | self::$redis = new RedisBase(); 49 | } 50 | self::$redis->connect(self::$host,self::$port,self::$timeout) or die('Redis 连接失败!'); 51 | if(!empty(self::$password)){ 52 | self::$redis->auth(self::$password); //如果有设置密码,则需要连接密码 53 | } 54 | if((int)self::$db){ 55 | self::$redis->select(self::$db); //选择缓存库 56 | } 57 | } 58 | 59 | /** 60 | * 加载配置参数 61 | * @param array $config 配置数组 62 | */ 63 | private static function config(array $config=[]) 64 | { 65 | self::$host = isset($config['host']) ? $config['host'] : '127.0.0.1'; 66 | self::$port = isset($config['port']) ? $config['port'] : '6379'; 67 | self::$password = isset($config['password']) ? $config['password'] : ''; 68 | self::$db = isset($config['db']) ? $config['db'] : ''; 69 | self::$expire = isset($config['expire']) ? $config['expire'] : 3600; 70 | self::$timeout = isset($config['timeout']) ? $config['timeout'] : 10; 71 | } 72 | 73 | /** 74 | * 切换到指定的数据库, 数据库索引号用数字值指定 75 | * @param int $db 存储库 76 | * @return 77 | */ 78 | public static function selectdb($db) 79 | { 80 | self::$redis->select((int)$db); 81 | } 82 | 83 | /** 84 | * 创建当前数据库的备份(该命令将在 redis 安装目录中创建dump.rdb文件) 85 | * @return bool 成功true否则false (如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可) 86 | */ 87 | public static function savedb() 88 | { 89 | return self::$redis->save(); 90 | } 91 | 92 | /** 93 | * 存储一个键值 94 | * @param string or int $key 键名 95 | * @param mix $value 键值,支持数组、对象 96 | * @param int $expire 过期时间(秒) 97 | * @return bool 返回布尔值 98 | */ 99 | public static function set($key, $value, $expire='') 100 | { 101 | if(is_int($key) || is_string($key)){ 102 | //如果是int类型的数字就不要序列化,否则用自增自减功能会失败, 103 | //如果不序列化,set()方法只能保存字符串和数字类型, 104 | //如果不序列化,浮点型数字会有失误,如13.6保存,获取时是13.59999999999 105 | $value = is_int($value) ? $value : serialize($value); 106 | $expire = (int)$expire ? $expire : self::$expire; 107 | if(self::$redis->set($key, $value) && self::$redis->expire($key, $expire)){ 108 | return true; 109 | } 110 | return false; 111 | } 112 | return false; 113 | } 114 | 115 | /** 116 | * 设置过期时间 117 | * @param string or int $key 键名 118 | * @param int $expire 过期时间(秒) 119 | * @return bool 返回布尔值 [如果成功返回true,如果键不存在或已过期则返回false] 120 | */ 121 | public static function expire($key, $expire=0) 122 | { 123 | $expire = (int)$expire ? $expire : self::$expire; 124 | if(self::$redis->expire($key, $expire)){ 125 | return true; 126 | } 127 | return false; 128 | } 129 | 130 | /** 131 | * 获取键值 132 | * @param string or int $key 键名 133 | * @return mix 返回值 134 | */ 135 | public static function get($key) 136 | { 137 | $value = self::$redis->get($key); 138 | if(is_object($value)){ 139 | return $value; 140 | } 141 | return is_numeric($value) ? $value : unserialize($value); 142 | } 143 | 144 | /** 145 | * 删除一个键值 146 | * @param string or int $key 键名 147 | * @return int 成功返回1 ,失败或不存在键返回0 148 | */ 149 | public static function del($key) 150 | { 151 | return self::$redis->del($key); 152 | } 153 | 154 | /** 155 | * 截取字符串,支持汉字 156 | * @param string or int $key 键名 157 | * @param int $start 起始位,从0开始 158 | * @param int $end 截取长度 159 | * @return string 返回字符串,如果键不存在或值不是字符串类型则返回false 160 | */ 161 | public static function substr($key,$start,$end=0) 162 | { 163 | $value = self::get($key); 164 | if($value && is_string($value)){ 165 | if($end){ 166 | return mb_substr($value,$start,$end); 167 | } 168 | return mb_substr($value,$start); 169 | } 170 | return false; 171 | } 172 | 173 | /** 174 | * 设置指定 key 的值,并返回 key 的旧值 175 | * @param string or int $key 键名 176 | * @param mix $value 要指定的健值,支持数组 177 | * @param int $expire 过期时间,如果不填则用全局配置 178 | * @return mix 返回旧值,如果旧值不存在则返回false,并新创建key的键值 179 | */ 180 | public static function replace($key, $value, $expire=0) 181 | { 182 | $value = self::$redis->getSet($key, $value); 183 | $expire = (int)$expire ? $expire : self::$expire; 184 | self::$redis->expire($key, $expire); 185 | return is_numeric($value) ? $value : unserialize($value); 186 | } 187 | 188 | /** 189 | * 同时设置一个或多个键值对。(支持数组值) 190 | * @param array $arr [要设置的键值对数组] 191 | * @return bool 返回布尔值,成功true否则false 192 | */ 193 | public static function mset($arr) 194 | { 195 | if($arr && is_array($arr)){ 196 | foreach ($arr as &$value) { 197 | $value = is_int($value) ? $value : serialize($value); 198 | } 199 | if(self::$redis->mset($arr)){ 200 | return true; 201 | } 202 | return false; 203 | } 204 | return false; 205 | } 206 | 207 | /** 208 | * 返回所有(一个或多个)给定 key 的值 209 | * 可传入一个或多个键名参数,键名字符串类型,如 $values = $redis::mget('one','two','three', ...); 210 | * @return 返回包含所有指定键值数组,如果不存在则返回false 211 | */ 212 | public static function mget() 213 | { 214 | $keys = func_get_args(); 215 | if($keys){ 216 | $values = self::$redis->mget($keys); 217 | if($values){ 218 | foreach ($values as &$value) { 219 | $value = is_numeric($value) ? $value : unserialize($value); 220 | } 221 | return $values; 222 | } 223 | } 224 | return false; 225 | } 226 | 227 | /** 228 | * 查询剩余过期时间(秒) 229 | * @param string or int $key 键名 230 | * @return int 返回剩余的时间,如果已过期则返回负数 231 | */ 232 | public static function expiretime($key) 233 | { 234 | return self::$redis->ttl($key); 235 | } 236 | 237 | /** 238 | * 指定的 key 不存在时,为 key 设置指定的值(SET if Not eXists) 239 | * @param string or int $key 键名 240 | * @param mix $value 要指定的健值,支持数组 241 | * @param int $expire 过期时间,如果不填则用全局配置 242 | * @return bool 设置成功返回true 否则false 243 | */ 244 | public static function setnx($key, $value, $expire=0) 245 | { 246 | $value = is_int($value) ? $value : serialize($value); 247 | $res = self::$redis->setnx($key, $value); 248 | if($res){ 249 | $expire = (int)$expire ? $expire : self::$expire; 250 | self::$redis->expire($key, $expire); 251 | } 252 | return $res; 253 | } 254 | 255 | /** 256 | * 返回对应键值的长度 257 | * @param string or int $key 键名 258 | * @return int 返回字符串的长度,如果键值是数组则返回数组元素的个数,如果键值不存在则返回0 259 | */ 260 | public static function valuelen($key) 261 | { 262 | $value = self::get($key); 263 | $lenth = 0; 264 | if($value){ 265 | if(is_array($value)){ 266 | $lenth = count($value); 267 | }else{ 268 | $lenth = strlen($value); 269 | } 270 | } 271 | return $lenth; 272 | } 273 | 274 | /** 275 | * 将 key 中储存的数字值自增 276 | * @param string or int $key 键名 277 | * @param int $int 自增量,如果不填则默认是自增量为 1 278 | * @return int 返回自增后的值,如果键不存在则新创建一个值为0,并在此基础上自增,返回自增后的数值.如果键值不是可转换的整数,则返回false 279 | */ 280 | public static function inc($key, $int=0) 281 | { 282 | if((int)$int){ 283 | return self::$redis->incrby($key,$int); 284 | }else{ 285 | return self::$redis->incr($key); 286 | } 287 | } 288 | 289 | /** 290 | * 将 key 中储存的数字值自减 291 | * @param string or int $key 键名 292 | * @param int $int 自减量,如果不填则默认是自减量为 1 293 | * @return int 返回自减后的值,如果键不存在则新创建一个值为0,并在此基础上自减,返回自减后的数值.如果键值不是可转换的整数,则返回false 294 | */ 295 | public static function dec($key, $int=0) 296 | { 297 | if((int)$int){ 298 | return self::$redis->decrby($key,$int); 299 | }else{ 300 | return self::$redis->decr($key); 301 | } 302 | } 303 | 304 | /** 305 | * 为指定的 key 追加值 306 | * @param string or int $key 键名 307 | * @param mix $value 要指定的健值,支持数组 308 | * @param bool $pos 要追加的位置,默认false为追加至末尾,true则追加到开头 309 | * @param int $expire 过期时间,如果不填则用全局配置 310 | * @return bool 设置成功返回true 否则false,支付向字符串或者数组追加内容,向字符串追加时加入的值必须为字符串类型,如果健不存在则创建新的键值对 311 | */ 312 | public static function append($key, $value, $pos=false, $expire=0) 313 | { 314 | $cache = self::get($key); 315 | if($cache){ 316 | if(is_array($cache)){ 317 | if($pos===true){ 318 | $value = array_unshift($cache, $value); 319 | }else{ 320 | $value = array_push($cache, $value); 321 | } 322 | }else{ 323 | if(!is_string($value)){ 324 | return false; 325 | } 326 | if($pos===true){ 327 | $value .= $cache; 328 | }else{ 329 | $value = $cache . $value; 330 | } 331 | } 332 | } 333 | return self::set($key, $value, $expire); 334 | } 335 | 336 | 337 | // +-------------------------------------------------- 338 | // | 以上方法均为字符串常用方法,并且把数组也兼容了 339 | // | 以下为哈希表处理方法 340 | // +-------------------------------------------------- 341 | 342 | 343 | /** 344 | * 为哈希表中的字段赋值 345 | * @param string $table 哈希表名 346 | * @param string $column 字段名 347 | * @param string|array $value 字段值 348 | * @param int $expire 过期时间, 如果不填则不设置过期时间 349 | * @return int 如果成功返回 1,否则返回 0.当字段值已存在时覆盖旧值并且返回 0 350 | */ 351 | public static function hset($table, $column, $value, $expire=0) 352 | { 353 | $value = is_array($value) ? json_encode($value) : $value; 354 | $res = self::$redis->hset($table, $column, $value); 355 | if((int)$expire){ 356 | self::$redis->expire($table, $expire); 357 | } 358 | return $res; 359 | } 360 | 361 | /** 362 | * 获取哈希表字段值 363 | * @param string $table 表名 364 | * @param string $column 字段名 365 | * @return mix 返回字段值,如果字段值是数组保存的返回json格式字符串,转换成数组json_encode($value),如果字段不存在返回false; 366 | */ 367 | public static function hget($table, $column) 368 | { 369 | return self::$redis->hget($table, $column); 370 | } 371 | 372 | /** 373 | * 删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略 374 | * @param string $table 表名 375 | * @param string $column 字段名 376 | * @return int 返回被成功删除字段的数量,不包括被忽略的字段,(删除哈希表用self::del($table)) 377 | */ 378 | public static function hdel($table, $columns) 379 | { 380 | $columns = func_get_args(); 381 | $table = $columns[0]; 382 | $count = count($columns); 383 | $num = 0; 384 | for ($i=1; $i < $count; $i++) { 385 | $num += self::$redis->hdel($table, $columns[$i]); 386 | } 387 | return $num; 388 | } 389 | 390 | /** 391 | * 查看哈希表的指定字段是否存在 392 | * @param string $table 表名 393 | * @param string $column 字段名 394 | * @return bool 存在返回true,否则false 395 | */ 396 | public static function hexists($table, $column) 397 | { 398 | if((int)self::$redis->hexists($table, $column)){ 399 | return true; 400 | } 401 | return false; 402 | } 403 | 404 | /** 405 | * 返回哈希表中,所有的字段和值 406 | * @param string $table 表名 407 | * @return array 返回键值对数组 408 | */ 409 | public static function hgetall($table) 410 | { 411 | return self::$redis->hgetall($table); 412 | } 413 | 414 | /** 415 | * 为哈希表中的字段值加上指定增量值(支持整数和浮点数) 416 | * @param string $table 表名 417 | * @param string $column 字段名 418 | * @param int $num 增量值,默认1, 也可以是负数值,相当于对指定字段进行减法操作 419 | * @return int|float|bool 返回计算后的字段值,如果字段值不是数字值则返回false,如果哈希表不存在或字段不存在返回false 420 | */ 421 | public static function hinc($table, $column, $num=1) 422 | { 423 | $value = self::hget($table, $column); 424 | if(is_numeric($value)){ //数字类型,包括整数和浮点数 425 | $value += $num; 426 | self::hset($table, $column, $value); 427 | return $value; 428 | }else{ 429 | return false; 430 | } 431 | } 432 | 433 | /** 434 | * 获取哈希表中的所有字段 435 | * @param string $table 表名 436 | * @return array 返回包含所有字段的数组 437 | */ 438 | public static function hkeys($table) 439 | { 440 | return self::$redis->hkeys($table); 441 | } 442 | 443 | /** 444 | * 返回哈希表所有域(field)的值 445 | * @param string $table 表名 446 | * @return array 返回包含所有字段值的数组,数字索引 447 | */ 448 | public static function hvals($table) 449 | { 450 | return self::$redis->hvals($table); 451 | } 452 | 453 | /** 454 | * 获取哈希表中字段的数量 455 | * @param string $table 表名 456 | * @return int 如果哈希表不存在则返回0 457 | */ 458 | public static function hlen($table) 459 | { 460 | return self::$redis->hlen($table); 461 | } 462 | 463 | /** 464 | * 获取哈希表中,一个或多个给定字段的值 465 | * @param string $table 表名 466 | * @param string $columns 字段名 467 | * @return array 返回键值对数组,如果字段不存在则字段值为null, 如果哈希表不存在返回空数组 468 | */ 469 | public static function hmget($table, $columns) 470 | { 471 | $data = self::hgetall($table); 472 | $result = []; 473 | if($data){ 474 | $columns = func_get_args(); 475 | unset($columns[0]); 476 | foreach ($columns as $value) { 477 | $result[$value] = isset($data[$value]) ? $data[$value] : null; 478 | } 479 | } 480 | return $result; 481 | } 482 | 483 | /** 484 | * 同时将多个 field-value (字段-值)对设置到哈希表中 485 | * @param string $table 表名 486 | * @param array $data 要添加的键值对 487 | * @param int $expire 过期时间,不填则不设置过期时间 488 | * @return bool 成功返回true,否则false 489 | */ 490 | public static function hmset($table, array $data, $expire=0) 491 | { 492 | $result = self::$redis->hmset($table, $data); 493 | if((int)$expire){ 494 | self::expire($table, $expire); 495 | } 496 | return $result; 497 | } 498 | 499 | /** 500 | * 为哈希表中不存在的的字段赋值 501 | * @param string $table 哈希表名 502 | * @param string $column 字段名 503 | * @param string|array $value 字段值 504 | * @param int $expire 过期时间, 如果不填则不设置过期时间 505 | * @return bool 如果成功返回true,否则返回 false. 506 | */ 507 | public static function hsetnx($table, $column, $value, $expire=0) 508 | { 509 | if(is_array($value)){ 510 | $value = json_encode($value); 511 | } 512 | $result = self::$redis->hsetnx($table, $column, $value); 513 | if((int)$expire){ 514 | self::expire($table, $expire); 515 | } 516 | return $result; 517 | } 518 | 519 | 520 | 521 | // +-------------------------------------------------- 522 | // | 以上方法均为哈希表常用方法 523 | // | 以下为列表处理方法 524 | // +-------------------------------------------------- 525 | 526 | 527 | /** 528 | * 将一个或多个值插入到列表头部(值可重复)或列表尾部。如果列表不存在,则创建新列表并插入值 529 | * @param string $list 列表名 530 | * @param string|array $value 要插入的值,如果是多个值请放入数组传入 531 | * @param string $pop 要插入的位置,默认first头部,last表示尾部 532 | * @param int $expire 过期时间, 如果不填则不设置过期时间 533 | * @return int 返回列表的长度 534 | */ 535 | public static function lpush($list, $value, $pop='first', $expire=0) 536 | { 537 | if(is_array($value)){ 538 | foreach ($value as $v) { 539 | $result = ($pop=='last') ? self::$redis->rpush($list,$v) : self::$redis->lpush($list, $v); 540 | } 541 | }else{ 542 | $result = ($pop=='last') ? self::$redis->rpush($list,$value) : self::$redis->lpush($list, $value); 543 | } 544 | if((int)$expire){ 545 | self::expire($list, $expire); 546 | } 547 | return $result; 548 | } 549 | 550 | /** 551 | * 通过索引获取列表中的元素 552 | * @param string $list 列表名 553 | * @param int $index 索引位置,从0开始计,默认0表示第一个元素,-1表示最后一个元素索引 554 | * @return string 返回指定索引位置的元素 555 | */ 556 | public static function lindex($list, $index=0) 557 | { 558 | return self::$redis->lindex($list, $index); 559 | } 560 | 561 | /** 562 | * 通过索引来设置元素的值 563 | * @param string $list 列表名 564 | * @param string $value 元素值 565 | * @param int $index 索引值 566 | * @return bool 成功返回true,否则false.当索引参数超出范围,或列表不存在返回false。 567 | */ 568 | public static function lset($list, $index, $value) 569 | { 570 | return self::$redis->lset($list, $index, $value); 571 | } 572 | 573 | /** 574 | * 返回列表中指定区间内的元素 575 | * @param string $list 列表名 576 | * @param int $start 起始位置,从0开始计,默认0 577 | * @param int $end 结束位置,-1表示最后一个元素,默认-1 578 | * @return array 返回列表元素数组 579 | */ 580 | public static function lrange($list, $start=0, $end=-1) 581 | { 582 | return self::$redis->lrange($list, $start, $end); 583 | } 584 | 585 | /** 586 | * 返回列表的长度 587 | * @param string $list 列表名 588 | * @return int 列表长度 589 | */ 590 | public static function llen($list) 591 | { 592 | return self::$redis->llen($list); 593 | } 594 | 595 | /** 596 | * 移出并获取列表的第一个元素或最后一个元素 597 | * @param string $list 列表名 598 | * @param string $pop 移出并获取的位置,默认first为第一个元素 599 | * @return string|bool 列表第一个元素或最后一个元素,如果列表不存在则返回false 600 | */ 601 | public static function lpop($list, $pop='first') 602 | { 603 | if($pop=='last'){ 604 | return self::$redis->rpop($list); 605 | } 606 | return self::$redis->lpop($list); 607 | } 608 | 609 | /** 610 | * 从列表中弹出最后一个值,将弹出的元素插入到另外一个列表开头并返回这个元素 611 | * @param string $list1 要弹出元素的列表名 612 | * @param string $list2 要接收元素的列表名 613 | * @return string|bool 返回被弹出的元素,如果其中有一个列表不存在则返回false 614 | */ 615 | public static function lpoppush($list1,$list2) 616 | { 617 | if(self::lrange($list1) && self::lrange($list2)){ 618 | return self::$redis->brpoplpush($list1, $list2, 500); 619 | } 620 | return false; 621 | } 622 | 623 | /** 624 | * 用于在指定的列表元素前或者后插入元素。如果元素有重复则选择第一个出现的。当指定元素不存在于列表中时,不执行任何操作 625 | * @param string $list 列表名 626 | * @param string $element 指定的元素 627 | * @param string $value 要插入的元素 628 | * @param string $pop 要插入的位置,before前,after后。默认before 629 | * @return int 返回列表的长度。 如果没有找到指定元素 ,返回 -1 。 如果列表不存在或为空列表,返回 0 。 630 | */ 631 | public static function linsert($list, $element, $value, $pop='before') 632 | { 633 | return self::$redis->linsert($list, $pop, $element, $value); 634 | } 635 | 636 | /** 637 | * 移除列表中指定的元素 638 | * @param string $list 列表名 639 | * @param string $element 指定的元素 640 | * @param int $count 要删除的个数,0表示删除所有指定元素,负整数表示从表尾搜索, 默认0 641 | * @return int 被移除元素的数量。 列表不存在时返回 0 642 | */ 643 | public static function lrem($list, $element, $count=0) 644 | { 645 | return self::$redis->lrem($list, $count, $element); 646 | } 647 | 648 | /** 649 | * 让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除 650 | * @param string $list 列表名 651 | * @param int $start 起始位置,从0开始 652 | * @param int $stop 结束位置,负数表示倒数第n个 653 | * @return bool 成功返回true否则false 654 | */ 655 | public static function ltrim($list, $start, $stop) 656 | { 657 | return self::$redis->ltrim($list, $start, $stop); 658 | } 659 | 660 | 661 | 662 | // +-------------------------------------------------- 663 | // | 以上方法均为列表常用方法 664 | // | 以下为集合处理方法(集合分为有序和无序集合) 665 | // +-------------------------------------------------- 666 | 667 | 668 | 669 | /** 670 | * 将一个或多个元素加入到无序集合中,已经存在于集合的元素将被忽略.如果集合不存在,则创建一个只包含添加的元素作成员的集合。 671 | * @param string $set 集合名称 672 | * @param string|array $value 元素值(唯一),如果要加入多个元素请传入多个元素的数组 673 | * @return int 返回被添加元素的数量.如果$set不是集合类型时返回0 674 | */ 675 | public static function sadd($set, $value) 676 | { 677 | $num = 0; 678 | if(is_array($value)){ 679 | foreach ($value as $key =>$v) { 680 | $num += self::$redis->sadd($set, $v); 681 | } 682 | }else{ 683 | $num += self::$redis->sadd($set, $value); 684 | } 685 | return $num; 686 | } 687 | 688 | /** 689 | * 返回无序集合中的所有的成员 690 | * @param string $set 集合名称 691 | * @return array 返回包含所有成员的数组 692 | */ 693 | public static function smembers($set) 694 | { 695 | return self::$redis->smembers($set); 696 | } 697 | 698 | /** 699 | * 获取集合中元素的数量。 700 | * @param string $set 集合名称 701 | * @return int 返回集合的成员数量 702 | */ 703 | public static function scard($set) 704 | { 705 | return self::$redis->scard($set); 706 | } 707 | 708 | /** 709 | * 移除并返回集合中的一个随机元素 710 | * @param string $set 集合名称 711 | * @return string|bool 返回移除的元素,如果集合为空则返回false 712 | */ 713 | public static function spop($set) 714 | { 715 | return self::$redis->spop($set); 716 | } 717 | 718 | /** 719 | * 移除集合中的一个或多个成员元素,不存在的成员元素会被忽略 720 | * @param string $set 集合名称 721 | * @param string|array $member 要移除的元素,如果要移除多个请传入多个元素的数组 722 | * @return int 返回被移除元素的个数 723 | */ 724 | public static function srem($set, $member) 725 | { 726 | $num = 0; 727 | if(is_array($member)){ 728 | foreach ($member as $value) { 729 | $num += self::$redis->srem($set, $value); 730 | } 731 | }else{ 732 | $num += self::$redis->srem($set, $member); 733 | } 734 | return $num; 735 | } 736 | 737 | /** 738 | * 返回集合中的一个或多个随机元素 739 | * @param string $set 集合名称 740 | * @param int $count 要返回的元素个数,0表示返回单个元素,大于等于集合基数则返回整个元素数组。默认0 741 | * @return string|array 返回随机元素,如果是返回多个则为数组返回 742 | */ 743 | public static function srand($set, $count=0) 744 | { 745 | return ((int)$count==0) ? self::$redis->srandmember($set) : self::$redis->srandmember($set, $count); 746 | } 747 | 748 | /** 749 | * 返回给定集合之间的差集(集合1对于集合2的差集)。不存在的集合将视为空集 750 | * @param string $set1 集合1名称 751 | * @param string $set2 集合2名称 752 | * @return array 返回差集(即筛选存在集合1中但不存在于集合2中的元素) 753 | */ 754 | public static function sdiff($set1, $set2) 755 | { 756 | return self::$redis->sdiff($set1, $set2); 757 | } 758 | 759 | /** 760 | * 将给定集合set1和set2之间的差集存储在指定的set集合中。如果指定的集合已存在,则会被覆盖。 761 | * @param string $set 指定存储的集合 762 | * @param string $set1 集合1 763 | * @param string $set2 集合2 764 | * @return int 返回指定存储集合元素的数量 765 | */ 766 | public static function sdiffstore($set, $set1, $set2) 767 | { 768 | return self::$redis->sdiffstore($set, $set1, $set2); 769 | } 770 | 771 | /** 772 | * 返回set1集合和set2集合的交集(即筛选同时存在集合1和集合2中的元素) 773 | * @param string $set1 集合1 774 | * @param string $set2 集合2 775 | * @return array 返回包含交集元素的数组 776 | */ 777 | public static function sinter($set1, $set2) 778 | { 779 | return self::$redis->sinter($set1, $set2); 780 | } 781 | 782 | /** 783 | * 将给定集合set1和set2之间的交集存储在指定的set集合中。如果指定的集合已存在,则会被覆盖。 784 | * @param string $set 指定存储的集合 785 | * @param string $set1 集合1 786 | * @param string $set2 集合2 787 | * @return int 返回指定存储集合元素的数量 788 | */ 789 | public static function sinterstore($set, $set1, $set2) 790 | { 791 | return self::$redis->sinterstore($set, $set1, $set2); 792 | } 793 | 794 | /** 795 | * 判断成员元素是否是集合的成员 796 | * @param string $set 集合名称 797 | * @param string $member 要判断的元素 798 | * @return bool 如果成员元素是集合的成员返回true,否则false 799 | */ 800 | public static function sismember($set, $member) 801 | { 802 | return self::$redis->sismember($set, $member); 803 | } 804 | 805 | /** 806 | * 将元素从集合1中移动到集合2中 807 | * @param string $set1 集合1 808 | * @param string $set2 集合2 809 | * @param string $member 要移动的元素成员 810 | * @return bool 成功返回true,否则false 811 | */ 812 | public static function smove($set1, $set2, $member) 813 | { 814 | return self::$redis->smove($set1, $set2, $member); 815 | } 816 | 817 | /** 818 | * 返回集合1和集合2的并集(即两个集合合并后去重的结果)。不存在的集合被视为空集。 819 | * @param string $set1 集合1 820 | * @param string $set2 集合2 821 | * @return array 返回并集数组 822 | */ 823 | public static function sunion($set1, $set2) 824 | { 825 | return self::$redis->sunion($set1, $set2); 826 | } 827 | 828 | /** 829 | * 将给定集合set1和set2之间的并集存储在指定的set集合中。如果指定的集合已存在,则会被覆盖。 830 | * @param string $set 指定存储的集合 831 | * @param string $set1 集合1 832 | * @param string $set2 集合2 833 | * @return int 返回指定存储集合元素的数量 834 | */ 835 | public static function sunionstore($set, $set1, $set2) 836 | { 837 | return self::$redis->sunionstore($set, $set1, $set2); 838 | } 839 | 840 | 841 | /* ----------------------以下有序集合----------------------- */ 842 | 843 | /** 844 | * 将一个或多个成员元素及其分数值加入到有序集当中,如果成员已存在则更新它的分数值,如果集合不存在则创建 845 | * @param string $set 集合名称 846 | * @param array $arr 元素(唯一)与其分数值(分数值可以是整数值或双精度浮点数)组成的数组 847 | * @return int 返回添加成功的成员数量 848 | */ 849 | public static function zadd($set, $arr) 850 | { 851 | $num = 0; 852 | if($arr && is_array($arr)){ 853 | foreach ($arr as $key => $value) { 854 | if(is_numeric($value)){ 855 | $num += self::$redis->zadd($set, $value, $key); 856 | } 857 | } 858 | } 859 | return $num; 860 | } 861 | 862 | /** 863 | * 返回有序集中,指定区间内的成员。默认返回所有成员(默认升序排列) 864 | * @param string $set 集合名称 865 | * @param int $start 起始位置,从0开始计,默认0 866 | * @param int $stop 结束位置,-1表示最后一位,默认-1 867 | * @param bool $desc 排序,false默认升序,true为倒序 868 | * @return array 返回有序集合中指定区间内的成员数组(默认返回所有) 869 | */ 870 | public static function zrange($set, $start=0, $stop=-1, $desc=false) 871 | { 872 | if($desc===true){ 873 | return self::$redis->ZREVRANGE($set, $start, $stop, 'WITHSCORES'); 874 | } 875 | return self::$redis->zrange($set, $start, $stop, 'WITHSCORES'); 876 | } 877 | 878 | /** 879 | * 返回有序集合中成员数量 880 | * @param string $set 集合名称 881 | * @return int 返回成员的数量 882 | */ 883 | public static function zcard($set) 884 | { 885 | return self::$redis->zcard($set); 886 | } 887 | 888 | /** 889 | * 计算有序集合中指定分数区间的成员数量 890 | * @param string $set 集合名称 891 | * @param int|float $min 最小分数值 892 | * @param int|float $max 最大分数值 893 | * @return int 返回指定区间的成员数量 894 | */ 895 | public static function zcount($set, $min, $max) 896 | { 897 | return self::$redis->zcount($set, $min, $max); 898 | } 899 | 900 | /** 901 | * 对有序集合中指定成员的分数加上增量 902 | * @param string $set 集合名称 903 | * @param string $member 指定元素 904 | * @param int $num 增量值,负数表示进行减法运算,默认1 905 | * @return float 返回运算后的分数值(浮点型) 906 | */ 907 | public static function zinc($set, $member, $num=1) 908 | { 909 | return self::$redis->zincrby($set, $num, $member); 910 | } 911 | 912 | /** 913 | * 计算set1和set2有序集的交集,并将该交集(结果集)储存到新集合set中。 914 | * @param string $set 指定存储的集合名称 915 | * @param string $set1 集合1 916 | * @param string $set2 集合2 917 | * @return int 返回保存到目标结果集的的成员数量 918 | */ 919 | public static function zinterstore($set, $set1, $set2) 920 | { 921 | return self::$redis->zinterstore($set, 2, $set1, $set2); 922 | } 923 | 924 | 925 | /** 926 | * 计算set1和set2有序集的并集,并将该并集(结果集)储存到新集合set中。 927 | * @param string $set 指定存储的集合名称 928 | * @param string $set1 集合1 929 | * @param string $set2 集合2 930 | * @return int 返回保存到目标结果集的的成员数量 931 | */ 932 | public static function zunionstore($set, $set1, $set2) 933 | { 934 | return self::$redis->zunionstore($set, 2, $set1, $set2); 935 | } 936 | 937 | /** 938 | * 返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列 939 | * @param string $set 集合名称 940 | * @param string $min 最小分数值字符串表示,'1'表示>=1,(1'表示>1 941 | * @param string $max 最大分数值字符串表示,'100'表示<=1,(100'表示<100 942 | * @param bool $withscores 返回的数组是否包含分数值,默认true, false不包含 943 | * @return array 返回指定区间的成员,默认是元素=>分数值的键值对数组。如果只要返回包含元素的数组请设置$withscores=false 944 | */ 945 | public static function zrangebyscore($set, $min, $max, $withscores=true) 946 | { 947 | if($withscores===true){ 948 | return self::$redis->zrangebyscore($set, $min, $max, ['withscores'=>'-inf']); 949 | } 950 | return self::$redis->zrangebyscore($set, $min, $max); 951 | } 952 | 953 | /** 954 | * 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。 955 | * @param string $set 集合名称 956 | * @param string $member 成员名称(元素) 957 | * @return int|bool 返回 member 的排名, 如果member不存在返回false 958 | */ 959 | public static function zrank($set, $member) 960 | { 961 | return self::$redis->zrank($set, $member); 962 | } 963 | 964 | /** 965 | * 移除有序集中的一个或多个成员,不存在的成员将被忽略。 966 | * @param string $set 有序集合名称 967 | * @param string|array $members 要移除的成员,如果要移除多个请传入多个成员的数组 968 | * @return int 返回被移除的成员数量,不存在的成员将被忽略 969 | */ 970 | public static function zrem($set, $members) 971 | { 972 | $num = 0; 973 | if(is_array($members)){ 974 | foreach ($members as $value) { 975 | $num += self::$redis->zrem($set, $value); 976 | } 977 | }else{ 978 | $num += self::$redis->zrem($set, $members); 979 | } 980 | return $num; 981 | } 982 | 983 | /** 984 | * 移除有序集中,指定分数(score)区间内的所有成员。 985 | * @param string $set 集合名称 986 | * @param int $min 最小分数值 987 | * @param int $max 最大分数值 988 | * @return int 返回被移除的成员数量 989 | */ 990 | public static function zrembyscore($set, $min, $max) 991 | { 992 | return self::$redis->zremrangebyscore($set, $min, $max); 993 | } 994 | 995 | /** 996 | * 移除有序集中,指定排名(rank)区间内的所有成员(这个排名数字越大排名越高,最低排名0开始) 997 | * @param string $set 集合名称 998 | * @param int $min 最小排名,从0开始计 999 | * @param int $max 最大排名 1000 | * @return int 返回被移除的成员数量,如移除排名为倒数5名的成员:$redis::zremrank($set,0,4); 1001 | */ 1002 | public static function zrembyrank($set, $min, $max) 1003 | { 1004 | return self::$redis->zremrangebyrank($set, $min, $max); 1005 | } 1006 | 1007 | /** 1008 | * 返回有序集中,成员的分数值。 1009 | * @param string $set 集合名称 1010 | * @param string $member 成员 1011 | * @return float|bool 返回分数值(浮点型),如果成员不存在返回false 1012 | */ 1013 | public static function zscore($set, $member) 1014 | { 1015 | return self::$redis->zscore($set, $member); 1016 | } 1017 | 1018 | /** 1019 | * 开启事务 1020 | */ 1021 | public static function transation() 1022 | { 1023 | self::$redis->multi(); 1024 | } 1025 | 1026 | /** 1027 | * 提交事务 1028 | */ 1029 | public static function commit() 1030 | { 1031 | self::$redis->exec(); 1032 | } 1033 | 1034 | /** 1035 | * 取消事务 1036 | */ 1037 | public static function discard() 1038 | { 1039 | self::$redis->discard(); 1040 | } 1041 | 1042 | 1043 | 1044 | 1045 | 1046 | 1047 | 1048 | 1049 | 1050 | 1051 | public static function myself() 1052 | { 1053 | return self::$redis; 1054 | } 1055 | } 1056 | --------------------------------------------------------------------------------