zoukankan      html  css  js  c++  java
  • redis中的key的复制

    redis中Set集合SortSet有序集合的复制

    本文链接:https://blog.csdn.net/chwshuang/article/details/52850093

    redis中Set集合SortSet有序集合的复制

    redis集合类型中是没有复制命令的,我所说的复制,是通过redis
    的其他指令来实现

    需求:将key1的内容全部拷贝到key2中
    下面我们来看看在redis中怎么处理

    Set集合的复制

    首先,我们创建一个集合key1,这时key2还没有创建

    127.0.0.1:6380[1]> SADD key1 "a"
    (integer) 1
    127.0.0.1:6380[1]> SADD key1 "b"
    (integer) 1
    127.0.0.1:6380[1]> SADD key1 "c"
    (integer) 1
    127.0.0.1:6380[1]> smembers key1
    1) "b"
    2) "a"
    3) "c"
    然后将key1拷贝到key2中
    127.0.0.1:6380[1]> SUNIONSTORE key2 key1 temp
    (integer) 3
    127.0.0.1:6380[1]> smembers key1
    1) "b"
    2) "a"
    3) "c"
    127.0.0.1:6380[1]> smembers key2
    1) "a"
    2) "b"
    3) "c"
    127.0.0.1:6380[1]> smembers temp
    (empty list or set)
    
    
    上面例子中的temp是一个不存在的key

    如果key2是已经存在的key,也可以进行复制,不过这个时候,就是将key1中所有内容都移动key2中。

    127.0.0.1:6380[1]> SADD key1 "d"
    (integer) 1
    127.0.0.1:6380[1]> SADD key1 "e"
    (integer) 1
    127.0.0.1:6380[1]> smembers key1
    1) "d"
    2) "b"
    3) "a"
    4) "c"
    5) "e"
    127.0.0.1:6380[1]> SUNIONSTORE key2 key1 temp
    (integer) 5
    127.0.0.1:6380[1]> smembers key2
    1) "a"
    2) "b"
    3) "d"
    4) "c"
    5) "e"
    127.0.0.1:6380[1]> smembers temp
    (empty list or set)
     

    使用SUNIONSTORE命令可以很容易的实现Set的复制,下面我们看看SUNIONSTORE命令的使用方式:
    语法:

    SUNIONSTORE destination key [key ...]
    • destination:存放合并结果集的key。
    • key [key …]:一个或者多个集合

    注意:
    如果是已经存在的集合,会删除原来的数据,只会保留合并结果。
    下面创建了一个key3,在key3中有一个成员 “g” ,但是将key1和key2使用SUNIONSTORE命令合并后,结果中不会有 “g” 。

    127.0.0.1:6380[1]> sunionstore key3 key1 key2
    (integer) 5
    127.0.0.1:6380[1]> sadd key1 f h i
    (integer) 3
    127.0.0.1:6380[1]> sadd key3 g
    (integer) 1
    127.0.0.1:6380[1]> smembers key3
    1) "b"
    2) "a"
    3) "e"
    4) "d"
    5) "c"
    6) "g"
    127.0.0.1:6380[1]> smembers key1
    1) "a"
    2) "b"
    3) "e"
    4) "d"
    5) "i"
    6) "h"
    7) "c"
    8) "f"
    127.0.0.1:6380[1]> sunionstore key3 key1 key2
    (integer) 8
    127.0.0.1:6380[1]> smembers key3
    1) "b"
    2) "a"
    3) "i"
    4) "h"
    5) "e"
    6) "d"
    7) "c"
    8) "f"

    SortSet有序集合的复制

    首先也来创建一个有序集合zset1, 这时候没有zset2这个key

    127.0.0.1:6380[1]> zadd zset1 1 a 2 b 3 c 4 d 5 e
    (integer) 5
    127.0.0.1:6380[1]> zrange zset1 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
     

    然后将zset1拷贝到zset2中

    127.0.0.1:6380[1]> ZUNIONSTORE zset2 1 zset1
    (integer) 5
     

    提示有5条内容被处理,然后我们来看看zset2现在的内容:

    127.0.0.1:6380[1]> zrange zset2 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"

    太帅了!跟zset1的内容一模一样。
    这一切都是ZUNIONSTORE这个命令的功劳,下面我们讲讲这个ZUNIONSTORE命令怎么用吧:
    语法:

    ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [SUM|MIN|MAX]

    ZUNIONSTORE命令其实就是求并集的命令,他的参数说明如下:

    • destination: 存放合并结果集的key。如果是已经存在的集合,会删除原来的数据,只会保留合并结果。
    • numkeys:有几个集合的内容需要合并
    • key [key …]: 一个或者多个集合
    • [WEIGHTS weight]:分数乘积因子,默认是1.如果设置以后,在合并时,会将待合并的集合中的分数乘以乘积因子,然后将结果保存到合并结果集中。
    • [SUM|MIN|MAX]:结果集的聚合方式。默认是SUM,如果要合并的集合中都有同一个名称的元素,它们的分数以何种方式存储到新的结果集中。SUM:相加;MIN:取最小的值;MAX:取最大的值。
  • 相关阅读:
    聊一聊HTML <pre>标签
    [Effective JavaScript 笔记]第20条:使用call方法自定义接收者来调用方法
    数据库的权限管理
    完整性约束
    MYSQL
    Python并发编程之协程
    python并发编程之多线程
    python并发编程之多进程
    进程
    网络编程之socket的运用
  • 原文地址:https://www.cnblogs.com/yuanyongqiang/p/11363536.html
Copyright © 2011-2022 走看看