zoukankan      html  css  js  c++  java
  • 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使用场景

    大型在线游戏积分排行榜

    构建索引数据

     

     

     

     

     

     

  • 相关阅读:
    TLPI读书笔记第32章:线程取消
    TLPI读书笔记第30章:线程同步
    Javascript事件:this.value()和this.select()
    Unknown tag (s:property)的原因
    maven web项目中运行stucts2报404的解决方案
    maven web项目的web.xml报错The markup in the document following the root element must be well-formed.
    JAVA实现 springMVC方式的微信接入、实现消息自动回复
    jquery easyui datagrid使用参考
    SQL两个字段排序
    windows下 zookeeper dubbo 安装+配置+demo 详细图文教程
  • 原文地址:https://www.cnblogs.com/zhaojiatao/p/7686053.html
Copyright © 2011-2022 走看看