Redis 集合(Set)

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

操作方法

方法列表

方法名称参数说明备注
sAdd$key, …$data向集合添加一个或多个成员
sCard$key获取集合的成员数
sDiff$key1, …$keys返回给定所有集合的差集
sMembers$destination, …$keys返回集合中的所有成员
sDiffStore$key1, …$keys返回给定所有集合的差集并存储在 destination 中
sInter$destination, …$keys返回给定所有集合的交集
sInterStore$key, $member返回给定所有集合的交集并存储在 destination 中
sIsMember$key判断 member 元素是否是集合 key 的成员
sMove$source, $destination, $member将 member 元素从 source 集合移动到 destination 集合
sPop$key移除并返回集合中的一个随机元素
sRandMemBer$key, $count = null返回集合中一个或多个随机数
sRem$key, $member1, …$members移除集合中一个或多个成员
sUnion$key1, …$keys返回所有给定集合的并集
sUnIonStore$destination, $key1, …$keys所有给定集合的并集存储在 destination 集合中
sScan$key,&$cursor, $pattern=null, $count=null迭代集合中的元素

在集群模式中,sDiff,sDiffStore,sInter,sMove,sUnion,sUnIonStore等方法不能使用

基本使用

  1. go(function () {
  2. $redis = new \EasySwoole\Redis\Redis(new \EasySwoole\Redis\Config\RedisConfig([
  3. 'host' => '127.0.0.1',
  4. 'port' => '6379',
  5. 'auth' => 'easyswoole',
  6. 'serialize' => \EasySwoole\Redis\Config\RedisConfig::SERIALIZE_NONE
  7. ]));
  8. $key = [
  9. 'muster1',
  10. 'muster2',
  11. 'muster3',
  12. 'muster4',
  13. 'muster5',
  14. ];
  15. $value = [
  16. '1',
  17. '2',
  18. '3',
  19. '4',
  20. ];
  21. $redis->del($key[0]);
  22. $redis->del($key[1]);
  23. $data = $redis->sAdd($key[0], $value[0], $value[1]);
  24. var_dump($data);
  25. $data = $redis->sCard($key[0]);
  26. var_dump($data);
  27. $redis->sAdd($key[1], $value[0], $value[2]);
  28. $data = $redis->sDiff($key[0], $key[1]);
  29. var_dump($data);
  30. $data = $redis->sDiff($key[1], $key[0]);
  31. var_dump($data);
  32. $data = $redis->sMembers($key[0]);
  33. var_dump($data);
  34. $data = $redis->sMembers($key[1]);
  35. var_dump($data);
  36. $data = $redis->sDiffStore($key[2], $key[0], $key[1]);
  37. var_dump($data);
  38. $data = $redis->sInter($key[0], $key[1]);
  39. var_dump($data);
  40. $data = $redis->sInterStore($key[3], $key[0], $key[1]);
  41. var_dump($data);
  42. $data = $redis->sIsMember($key[0], $value[0]);
  43. var_dump($data);
  44. $data = $redis->sMove($key[0], $key[1], $value[1]);
  45. var_dump($data);
  46. $data = $redis->sPop($key[0]);
  47. var_dump($data);
  48. $redis->del($key[3]);
  49. $redis->sAdd($key[3], $value[0], $value[1], $value[2], $value[3]);
  50. $data = $redis->sRandMemBer($key[3], 4);
  51. var_dump($data);
  52. $data = $redis->sRem($key[3], $value[0], $value[1], $value[2], $value[3]);
  53. var_dump($data);
  54. $data = $redis->sUnion($key[0], $key[1]);
  55. var_dump($data);
  56. $redis->del($key[1]);
  57. $redis->del($key[2]);
  58. $redis->del($key[3]);
  59. $redis->del($key[4]);
  60. $redis->sAdd($key[1], 1, 2, 3, 4);
  61. $redis->sAdd($key[2], 5);
  62. $redis->sAdd($key[3], 6, 7);
  63. $data = $redis->sUnIonStore($key[4], $key[1], $key[2], $key[3]);
  64. var_dump($data);
  65. $cursor = 0;
  66. $redis->del('a');
  67. $redis->sAdd('a','a1','a2','a3','a4','a5');
  68. $data= [];
  69. do {
  70. $keys = $redis->sScan('a',$cursor,'*',1);
  71. $data = array_merge($data,$keys);
  72. } while ($cursor);
  73. var_dump($data);
  74. });