• Redis的数据结构


    五种数据类型:

    字符串(String)

    字符串列表(list)

    有序字符串集合(sorted set)

    哈希(hash)

    字符串集合(set)

     

    Key定义的注意点:

    不要过长,

    不要过短,

    统一的命名规范

     


     

    存储String

    二进制安全的,存入和获取的数据相同

    Value最多可以容纳的数据长度是512M

     

    存储String常用命令

    赋值

    取值

    删除

    数值增减

    扩展命令

     

    [root@localhost redis]# ./bin/redis-cli

    赋值

    127.0.0.1:6379> set name java1234

    OK

     

    取值

    127.0.0.1:6379> get name

    "java1234"

     

    获取并设置值

    127.0.0.1:6379> getset name open1111

    "java1234"

    127.0.0.1:6379> get name

    "open1111"

     

    删除

    127.0.0.1:6379> del name

    (integer) 1

    127.0.0.1:6379> get name

    (nil)

     

    incr 自增 

    假如没有定义 则默认0

    假如非数值类型 则报错

    127.0.0.1:6379> incr n

    (integer) 1

    127.0.0.1:6379> get n

    "1"

     

    127.0.0.1:6379> set nn 2

    OK

    127.0.0.1:6379> incr nn

    (integer) 3

    127.0.0.1:6379> get nn

    "3"

    127.0.0.1:6379> 

     

    127.0.0.1:6379> set n2 java1234

    OK

    127.0.0.1:6379> incr n2

    (error) ERR value is not an integer or out of range

    127.0.0.1:6379> 

     

    自减 decr 同上

    127.0.0.1:6379> decr nn

    (integer) 2

    127.0.0.1:6379> decr n3

    (integer) -1

     

    扩展 

    incrby 指定增量值

    127.0.0.1:6379> incrby n3 8

    (integer) 7

     

    decrby 指定减量值

    127.0.0.1:6379> decrby n3 5

    (integer) 2

     

    append 追加字符串

    假如没定义 直接赋值

    127.0.0.1:6379> append s1 jj

    (integer) 2

    127.0.0.1:6379> get s1

    "jj"

    127.0.0.1:6379> append s1 bb

    (integer) 4

    127.0.0.1:6379> get s1

    "jjbb"


     

     

    存储Hash

     String key和String Value的Map容器

     

    每一个Hash可以存储4294967295个键值对

     

    存储Hash常用命令:

    赋值  

    取值

    删除

    增加数字

    判断字段是否存在

    获取hash属性个数

    获取hash所有属性名称

     

    定义h1 以及username和password字段 值分别是java1234 123456

     

    hget单个字段设置

     

    127.0.0.1:6379> hset h1 username java1234

    (integer) 1

    127.0.0.1:6379> hset h1 password 123456

    (integer) 1

    127.0.0.1:6379> hget h1 username

    "java1234"

    127.0.0.1:6379> hget h1 password

    "123456"

     

    hmset 多个字段一起设置

    127.0.0.1:6379> hmset h2 username open1111 password 23456

    OK

    127.0.0.1:6379> hmget h2 username

    1) "open1111"

    127.0.0.1:6379> hmget h2 password

    1) "23456"

    127.0.0.1:6379> hmget h2 username password

    1) "open1111"

    2) "23456"

     

    127.0.0.1:6379> hgetall h2

    1) "username"

    2) "open1111"

    3) "password"

    4) "23456"

     

    hdel删除属性

    可以一次删除一个或者多个

    127.0.0.1:6379> hdel h2 username password

    (integer) 2

    127.0.0.1:6379> hgetall h2

    (empty list or set)

     

    hincrby增加数字

    127.0.0.1:6379> hset h1 age 20

    (integer) 1

    127.0.0.1:6379> hincrby h1 age 5

    (integer) 25

     

    hexists判断字段是否存在 1表示存在 0表示不存在

    127.0.0.1:6379> hexists h1 age

    (integer) 1

    127.0.0.1:6379> hexists h1 age2

    (integer) 0

     

    hlen获取hash属性个数

    127.0.0.1:6379> hlen h1

    (integer) 3

    127.0.0.1:6379> hlen h2

    (integer) 0

     

    hkeys获取所有属性名称

    127.0.0.1:6379> hkeys h1

    1) "username"

    2) "password"

    3) "age"

    127.0.0.1:6379> hkeys h2

    (empty list or set)

     

    hvals获取所有属性值

    127.0.0.1:6379> hvals h1

    1) "java1234"

    2) "123456"

    3) "25"

    127.0.0.1:6379> hvals h2

    (empty list or set)

    127.0.0.1:6379>

     


    存储list:

    ArrayList使用数组方式

    LinkedList使用双向链接方式

     

    双向链接表中增加数据

    双向链接表中删除数据

     

    存储list常用命令

    两端添加

    两端弹出

    扩展命令

     

    lpush 方式添加

    从左边开始添加

    127.0.0.1:6379> lpush l1 a b c d

    (integer) 4

    127.0.0.1:6379> lpush l1 1 2 3 4

    (integer) 8

     

    lrange 获取指定方位的集合元素

     

    从第1个开始 到倒数第一个 也就是最后一个 也就是 所有数据

    127.0.0.1:6379> lrange l1 0 -1

    1) "4"

    2) "3"

    3) "2"

    4) "1"

    5) "d"

    6) "c"

    7) "b"

    8) "a"

     

    获取从第1个到第6个集合元素

    127.0.0.1:6379> lrange l1 0 6

    1) "4"

    2) "3"

    3) "2"

    4) "1"

    5) "d"

    6) "c"

    7) "b"

     

    rpush 从右端开始添加(一般人比较习惯这种方式)

    127.0.0.1:6379> rpush l2 a b c d

    (integer) 4

    127.0.0.1:6379> rpush l2 1 2 3 4

    (integer) 8

    127.0.0.1:6379> lrange l2 0 -1

    1) "a"

    2) "b"

    3) "c"

    4) "d"

    5) "1"

    6) "2"

    7) "3"

    8) "4"

    127.0.0.1:6379> lrange l2 0 6

    1) "a"

    2) "b"

    3) "c"

    4) "d"

    5) "1"

    6) "2"

    7) "3"

     

    lpop 左侧弹出集合元素

    rpop 右侧弹出集合元素

    127.0.0.1:6379> lrange l2 0 -1

    1) "b"

    2) "c"

    3) "d"

    4) "1"

    5) "2"

    6) "3"

    7) "4"

    127.0.0.1:6379> rpop l2

    "4"

    127.0.0.1:6379> lrange l2 0 -1

    1) "b"

    2) "c"

    3) "d"

    4) "1"

    5) "2"

    6) "3"

     

    llen查看元素个数

    127.0.0.1:6379> llen l2

    (integer) 6

     

    lpushx 集合头部插入元素

    127.0.0.1:6379> lpushx l2 xx

    (integer) 7

    127.0.0.1:6379> lrange l2 0 -1

    1) "xx"

    2) "b"

    3) "c"

    4) "d"

    5) "1"

    6) "2"

    7) "3"

     

     

     

    rpushx 集合尾部插入元素

    127.0.0.1:6379> rpushx l2 yy

    (integer) 8

    127.0.0.1:6379> lrange l2 0 -1

    1) "xx"

    2) "b"

    3) "c"

    4) "d"

    5) "1"

    6) "2"

    7) "3"

    8) "yy"

     

    lpush集合头部插入多个元素

    127.0.0.1:6379> lpush l2 a1 a2 

    (integer) 10

    127.0.0.1:6379> lrange l2 0 -1

     1) "a2"

     2) "a1"

     3) "xx"

     4) "b"

     5) "c"

     6) "d"

     7) "1"

     8) "2"

     9) "3"

    10) "yy"

     

    127.0.0.1:6379> rpush l2 a3 a4

    (integer) 12

    127.0.0.1:6379> lrange l2 0 -1

     1) "a2"

     2) "a1"

     3) "xx"

     4) "b"

     5) "c"

     6) "d"

     7) "1"

     8) "2"

     9) "3"

    10) "yy"

    11) "a3"

    12) "a4"

     

    lrem 从指定方向删除指定个数的指定元素

    先加点数据搞个新集合l3

    127.0.0.1:6379> lpush l3 1 3 2 3 2 1 2 1 3

    (integer) 9

    127.0.0.1:6379> lrange l3 0 -1

    1) "3"

    2) "1"

    3) "2"

    4) "1"

    5) "2"

    6) "3"

    7) "2"

    8) "3"

    9) "1"

     

    从左边开始删除2个1

    127.0.0.1:6379> lrem l3 2 1

    (integer) 2

    127.0.0.1:6379> lrange l3 0 -1

    1) "3"

    2) "2"

    3) "2"

    4) "3"

    5) "2"

    6) "3"

    7) "1"

     

    从右边开始删除2个3

    127.0.0.1:6379> lrem l3 -2 3

    (integer) 2

    127.0.0.1:6379> lrange l3 0 -1

    1) "3"

    2) "2"

    3) "2"

    4) "2"

    5) "1"

     

    删除所有2

    127.0.0.1:6379> lrem l3 0 2

    (integer) 3

    127.0.0.1:6379> lrange l3 0 -1

    1) "3"

    2) "1"

     

    lset 设置集合指定索引的值

    127.0.0.1:6379> lrange l1 0 -1

    1) "4"

    2) "3"

    3) "2"

    4) "1"

    5) "d"

    6) "c"

    7) "b"

    8) "a"

     

    索引从0开始

    127.0.0.1:6379> lset l1 3 xxxx

    OK

    127.0.0.1:6379> lrange l1 0 -1

    1) "4"

    2) "3"

    3) "2"

    4) "xxxx"

    5) "d"

    6) "c"

    7) "b"

    8) "a"

     

    linsert 在集合里插入指定元素

    在xxxx元素之前插入aa

    127.0.0.1:6379> linsert l1 before xxxx aa

    (integer) 9

    127.0.0.1:6379> lrange l1 0 -1

    1) "4"

    2) "3"

    3) "2"

    4) "aa"

    5) "xxxx"

    6) "d"

    7) "c"

    8) "b"

    9) "a"

     

    在xxxx元素之后插入bb

    127.0.0.1:6379> linsert l1 after xxxx bb

    (integer) 10

    127.0.0.1:6379> lrange l1 0 -1

     1) "4"

     2) "3"

     3) "2"

     4) "aa"

     5) "xxxx"

     6) "bb"

     7) "d"

     8) "c"

     9) "b"

    10) "a"

     

    rpoplpush 把A集合尾部元素弹出并插入到B集合头部

    127.0.0.1:6379> rpush l4 a b c

    (integer) 3

    127.0.0.1:6379> rpush l5 1 2 3

    (integer) 3

    127.0.0.1:6379> lrange l4 0 -1

    1) "a"

    2) "b"

    3) "c"

    127.0.0.1:6379> lrange l5 0 -1

    1) "1"

    2) "2"

    3) "3"

    127.0.0.1:6379> rpoplpush l4 l5

    "c"

    127.0.0.1:6379> lrange l4 0 -1

    1) "a"

    2) "b"

    127.0.0.1:6379> lrange l5 0 -1

    1) "c"

    2) "1"

    3) "2"

    4) "3"

     


     

     

    存储Set

     和List类型不同的是,Set集合中不允许出现重复的元素

     Set可包含的最大元素数量是4294967295

    存储set常用命令:

    添加/删除元素

    获取集合中的元素

    集合中的差集运算

    集合中的交集运算

    集合中的并集元算

    扩展命令

     

    sadd key member [member ...]

    添加set元素

    127.0.0.1:6379> sadd set1  a b c

    (integer) 3

    添加三个元素

    smembers key

    查看指定key集合元素

    127.0.0.1:6379> smembers set1

    1) "c"

    2) "b"

    3) "a"

     

    127.0.0.1:6379> sadd set1 a d e

    (integer) 2

    127.0.0.1:6379> smembers set1

    1) "c"

    2) "d"

    3) "b"

    4) "a"

    5) "e"

    继续添加元素 发现 重复元素不再添加

     

    srem key member [member ...]

    删除元素

    127.0.0.1:6379> srem set1 a d

    (integer) 2

    127.0.0.1:6379> smembers set1

    1) "b"

    2) "c"

    3) "e"

    删除两个元素

     

    sismember key member

    判断某个元素是否存在 返回1 表示存在 返回0表示不存在

    127.0.0.1:6379> sismember set1 a

    (integer) 0

    127.0.0.1:6379> sismember set1 b

    (integer) 1

     

    sdiff计算差集

    127.0.0.1:6379> sadd set2 a b c

    (integer) 3

    127.0.0.1:6379> sadd set3 b c d e

    (integer) 4

    127.0.0.1:6379> sdiff set2 set3

    1) "a"

    127.0.0.1:6379> sdiff set3 set2

    1) "d"

    2) "e"

    我们发现 集合的顺序不同 结果不一样 根据前者参考

     

    sinter计算交集

    127.0.0.1:6379> sinter set2 set3

    1) "c"

    2) "b"

     

    sunion计算并集

    127.0.0.1:6379> sunion set2 set3

    1) "e"

    2) "a"

    3) "b"

    4) "c"

    5) "d"

     

    scard计算元素总数

    127.0.0.1:6379> smembers set1

    1) "b"

    2) "c"

    3) "e"

    127.0.0.1:6379> scard set1

    (integer) 3

     

    srandmember 随机取一个元素

    127.0.0.1:6379> srandmember set1

    "c"

    127.0.0.1:6379> srandmember set1

    "e"

     

    sdiffstore 把差集结果存储到新集合中

    127.0.0.1:6379> smembers set2

    1) "c"

    2) "b"

    3) "a"

    127.0.0.1:6379> smembers set3

    1) "c"

    2) "e"

    3) "d"

    4) "b"

    127.0.0.1:6379> sdiffstore r1 set2 set3

    (integer) 1

    127.0.0.1:6379> smembers r1

    1) "a"

     

    sinterstore 把交集结果存储到新集合中

    127.0.0.1:6379> sinterstore r2 set2 set3

    (integer) 2

    127.0.0.1:6379> smembers r2

    1) "c"

    2) "b"

     

    sunionstore把并集结果存储到新集合中

    127.0.0.1:6379> sunionstore r3 set2 set3

    (integer) 5

    127.0.0.1:6379> smembers r3

    1) "e"

    2) "a"

    3) "b"

    4) "c"

    5) "d"

     

    存储Set使用场景

     跟踪一些唯一性数据

     用于维护数据对象之间的关联关系


     

    存储Sorted-Set

    Sorted-Set和Set的区别

     

    Sorted-Set中的成员在集合中的位置是有序的

     

    存储Sorted-set常用命令

    添加元素

    获得元素

    删除元素

    范围查询

    扩展命令

     

    zadd 添加元素 里面包括评分和值

    127.0.0.1:6379> zadd sort1 5 a 4 b 6 c

    (integer) 3

    我们添加集合sort1 元素是a,b,c 评分分别是5,4,6

    集合里的排序是根据评分从小到大排序的;

     

    zrange是查找元素 -1代表是最后一个

    127.0.0.1:6379> zrange sort1 0 -1

    1) "b"

    2) "a"

    3) "c"

     

    假如我们继续添加元素

    这里分两种情况

    假如次元素集合里面已经有了,则覆盖

    我们继续添加b 此时评分改成7 

    127.0.0.1:6379> zadd sort1 7 b

    (integer) 0

    通过zscore 获取b的评分

    127.0.0.1:6379> zscore sort1 b

    "7"

    发现已经修改了;

    127.0.0.1:6379> zrange sort1 0 -1

    1) "a"

    2) "c"

    3) "b"

    假如添加的元素不在集合里,则添加进去

    127.0.0.1:6379> zadd sort1 9 d

    (integer) 1

    127.0.0.1:6379> zrange sort1 0 -1

    1) "a"

    2) "c"

    3) "b"

    4) "d"

     

    删除元素zrem

    127.0.0.1:6379> zrem sort1 b

    (integer) 1

    127.0.0.1:6379> zrange sort1 0 -1

    1) "a"

    2) "c"

    3) "d"

     

    zcard 查看集合里的元素个数

    127.0.0.1:6379> zcard sort1

    (integer) 3

     

    withscores  把评分也显示出来

    127.0.0.1:6379> zrange sort1 0 -1 withscores 

    1) "a"

    2) "5"

    3) "c"

    4) "6"

    5) "d"

    6) "9"

     

    zrevrange 降序排列

    127.0.0.1:6379> zrevrange sort1 0 -1 withscores

    1) "d"

    2) "9"

    3) "c"

    4) "6"

    5) "a"

    6) "5"

     

    我们再加两个元素

    127.0.0.1:6379> zadd sort1 10 e  5 f

    (integer) 2

     

    zremrangebyrank 根据排名来删除元素  删除3个

    127.0.0.1:6379> zremrangebyrank sort1 0 2

    (integer) 3

    127.0.0.1:6379> zrange sort1 0 -1 withscores

    1) "d"

    2) "9"

    3) "e"

    4) "10"

     

    再添加元素

    127.0.0.1:6379> zadd sort1 11 f 16 g 18 h

    (integer) 3

    127.0.0.1:6379> zrange sort1 0 -1 withscores

     1) "d"

     2) "9"

     3) "e"

     4) "10"

     5) "f"

     6) "11"

     7) "g"

     8) "16"

     9) "h"

    10) "18"

     

    zremrangebyscore 根据具体评分范围来删除元素

    127.0.0.1:6379> zremrangebyscore sort1 10 16

    (integer) 3

    127.0.0.1:6379> zrange sort1 0 -1 withscores

    1) "d"

    2) "9"

    3) "h"

    4) "18"

     

    再添加元素

    127.0.0.1:6379> zadd sort1 20 i 23 j 30 k

    (integer) 3

    127.0.0.1:6379> zrange sort1 0 -1 withscores

     1) "d"

     2) "9"

     3) "h"

     4) "18"

     5) "i"

     6) "20"

     7) "j"

     8) "23"

     9) "k"

    10) "30"

     

    zrangebyscore 根据评分范围来查找元素

    127.0.0.1:6379> zrangebyscore sort1 18 23 withscores 

    1) "h"

    2) "18"

    3) "i"

    4) "20"

    5) "j"

    6) "23"

     

    limit 限定查找起始 类似分页

    127.0.0.1:6379> zrangebyscore sort1 18 23 withscores limit 0 2

    1) "h"

    2) "18"

    3) "i"

    4) "20"

     

    zincrby 给指定元素加分

    127.0.0.1:6379> zincrby sort1 5 h

    "23"

     

    127.0.0.1:6379> zrange sort1 0 -1 withscores

     1) "d"

     2) "9"

     3) "i"

     4) "20"

     5) "h"

     6) "23"

     7) "j"

     8) "23"

     9) "k"

    10) "30"

     

    zcount 查找指定评分范围的元素个数

    127.0.0.1:6379> zcount sort1 20 23

    (integer) 3

     

    Sorted-Set使用场景

    大型在线游戏积分排行榜

    构建索引数据

     

     

     

     

     

     

  • 相关阅读:
    WCF 第四章 绑定 在多个绑定上暴露一个服务契约
    WCF 第五章 行为 事务跨操作事务流
    WCF 第五章 导出并发布元数据(服务行为)
    WCF 第五章 行为 通过配置文件暴露一个服务行为
    WCF 第五章 不支持会话的绑定的默认并发和实例
    WCF 第五章 并发和实例(服务行为)
    WCF 第五章 行为 总结
    WCF 第四章 绑定 绑定元素
    WCF 第五章 行为 事务之选择一个事务协议OleTx 或者WSAT
    WCF 第四章 绑定 比较各种绑定的性能和可扩展性
  • 原文地址:https://www.cnblogs.com/zhaojiatao/p/7686053.html
Copyright © 2020-2023  润新知