zoukankan      html  css  js  c++  java
  • [redis]基本数据类型

    string

    基本操作:

    127.0.0.1:6379> strlen "Extreme Pizza"  -- 字符的长度
    (integer) 24
    127.0.0.1:6379> strlen "Yummy Pizza"  -- 不存在字符的长度
    (integer) 0
    127.0.0.1:6379> append "Extreme Pizza" "001001" -- 在已有字符的后面添加内容
    (integer) 30
    127.0.0.1:6379> get "Extreme Pizza"  -- 再次查看
    "300 Broadway,New York,NY001001"
    127.0.0.1:6379> setrange "Extreme Pizza" 14 "Washton"   -- 覆盖指定范围的字符 (指定位置开始到字符串末尾)
    (integer) 30
    127.0.0.1:6379> get "Extreme Pizza" -- 再次查看
    "300 Broadway,NWashton,NY001001"

    更多细节:
    set 键已经存在时,值会被覆盖

    为此:setnx命令来了:存在键时返回0,不覆盖原来的值,不存在时才创建

    127.0.0.1:6379> setnx "Extreme Pizza" "Chicago 1L"
    (integer) 0
    127.0.0.1:6379> setnx "Yummy Pizza" "Chicago 1L"
    (integer) 1
    127.0.0.1:6379> get "Extreme Pizza"
    "300 Broadway,NWashton,NY001001"
    127.0.0.1:6379> get "Yummy Pizza"
    "Chicago 1L"

    批量设置:

    mset key value [key value] 
    mget key value [key value]

    Redis 的字符编码 : 1. int (64 位有符号的字符); 2. embstr(小于等于44字节,效率较高) ; 3. raw (大于44字节):

    object encoding key  -- 查看编码方式

    list

    基本操作:

    127.0.0.1:6379> lpush favorite "java" "redis" "mysql" "tomcat"  -- 存放系列数据 左端存放
    (integer) 4
    127.0.0.1:6379> lrange "favorite" 0 -1  -- 得到所有的数据
    1) "tomcat"
    2) "mysql"
    3) "redis"
    4) "java"
    127.0.0.1:6379> rpush favorite "spring" "hadoop" "network"  -- 从右端存放数据
    (integer) 7
    127.0.0.1:6379> lrange favorite 0 -1 --再查看
    1) "tomcat"
    2) "mysql"
    3) "redis"
    4) "java"
    5) "spring"
    6) "hadoop"
    7) "network"
    127.0.0.1:6379> linsert  favorite  before "java" "hbase"  -- 指定位置插入
    (integer) 8
    127.0.0.1:6379> lrange favorite 0 -1 -- 在查看
    1) "tomcat"
    2) "mysql"
    3) "redis"
    4) "hbase"
    5) "java"
    6) "spring"
    7) "hadoop"
    8) "network"
    127.0.0.1:6379> lindex "favorite" 5  -- 根据索引访问数据
    "spring"
    127.0.0.1:6379> lpop "favorite"  --左删除一个元素
    "tomcat"
    127.0.0.1:6379> lpop "no-content"  -- 删除一个不存在的元素
    (nil)
    127.0.0.1:6379> rpop "favorite"  -- 右删除一个元素
    "network"

     Redis中列表的索引怎么定义的?假设列表中有N个元素,列表的索引从左到右 0 ~ n - 1; 从右到左-1 ~ -n,因此0 ~-1就是整个列表

    更多细节:

    lpop 和rpop都有其对应的blpop和brpop 阻塞版本,类似的可以弹出数据,但是在数据为空时,后者将使客户端阻塞。并设置阻塞时间,为0 标识永久等待。应用场景就是任务调度。

    hash

    127.0.0.1:6379> hmset "kyoto" "addr" "mission 8001" "phone" "1008611" "rating" 50 -- 设置hash值
    OK
    127.0.0.1:6379> hmget "kyoto" "addr" "phone" "rating" -- 得到hash值
    1) "mission 8001"
    2) "1008611"
    3) "50"
    127.0.0.1:6379> hexists "kyoto" "phone"  -- 判断属性是否存在
    (integer) 1
    127.0.0.1:6379> hexists "kyoto" "hou"
    (integer) 0
    127.0.0.1:6379> hgetall "kyoto"  -- 取出所有hash值
    1) "addr"
    2) "mission 8001"
    3) "phone"
    4) "1008611"
    5) "rating"
    6) "50"
    
    127.0.0.1:6379> hset "kyoto" "phone" "1001011"  -- 修改属性的值
    (integer) 0
    127.0.0.1:6379> hget "kyoto" "phone"
    "1001011"
     
    127.0.0.1:6379> hdel "kyoto" "rating"  -- 删除属性
    (integer) 1
    127.0.0.1:6379> hgetall "kyoto"
    1) "addr"
    2) "mission 8001"
    3) "phone"
    4) "1001011"

    同string,hash也有 hsetnx 命令用于只是覆盖不存在的字段

    更多细节:

    一个hash最多能容纳 2^32  -  1 个字段,字段过多时,执行hgetall 会阻塞redis服务器,此时我们可以使用 hscan命令

    hscan key cursor [match pattern] [count number]

    hash的编码方式:

    ziplist:长度小于  hash-max-ziplist-entries 配置的值,且所有元素都小于 hash-max-ziplist-value的值大hash,采用此编码,对于较小的hash而言可以节省空间;

    hashtable:默认的编码方式

    set

    基本操作:

    127.0.0.1:6379> sadd "ytuan" "handsome" "humores"  -- 添加元素
    (integer) 2
    127.0.0.1:6379> sismember "ytuan" "handsome"  -- 判断元素是否在集合中
    (integer) 1
    127.0.0.1:6379> sismember "ytuan" "costl"        -- 不再集合返回0
    (integer) 0 
    127.0.0.1:6379> srem "ytuan" "humores"        -- 删除元素
    (integer) 1
    127.0.0.1:6379> scard "ytuan"                  -- 获取元素中集合的数量
    (integer) 1

    与list和hash类似,set在执行sadd时,如果键不存在就会为我们创建一个空集合,同时,redis也会删除空集合中对于的 键

    更多细节:

    set中最多容纳 2^23 - 1个成员

    smembers 返回集合中所有元素,当元素太多时会造成阻塞,建议使用 sscan替代,用法同hscan

    计算相关的命令:

    sunion,sunionstore 计算并集, sinter 和 sinterstore计算交集,sdiff 和sdiffstore 计算差集,带store表示将结果存储到一个指定的集合中,否则只是返回结果,不做存储。

    Redis集合内部编码:

    intset:对于元素都是整数,且个数小于配置中 set-max-intset-entries 选项(默认512),采用此编码,对于较小的集合比较节约空间。

    hashtable:intset不适用时采用的编码

    sortedset

    127.0.0.1:6379> zadd ranking:restrants 100 "Olive" 23 "Chang's" 34 "Steakhouse" 45 "Lobster" 88 "Longhorn" -- 放入元素到有序集合中
    (integer) 5
    127.0.0.1:6379> zrevrange ranking:restrants  0 -1  withscores   -- 得到所有元素及其权重
     1) "Olive"
     2) "100"
     3) "Longhorn"
     4) "88"
     5) "Lobster"
     6) "45"
     7) "Steakhouse"
     8) "34"
     9) "Chang's"
    10) "23"
    127.0.0.1:6379> zincrby ranking:restrants 1 Lonster   -- 增加指定元素的权重
    "1"
    127.0.0.1:6379> zscore ranking:restrants "Lonster"   -- 查看某个元素的权重
    "1"
    127.0.0.1:6379> zscore ranking:restrants "Chang's"
    "23"

    zunionstore 合并两个有序集合

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

    zinterstore 差集

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

    更多细节

    redis sortedset 内部编码

    ziplist:

    skiplist:

    HyperLogLog 优化集合类型

    Geo 地理信息数据

    Redis中所有的数据类型都是键值类型保存的,那么键的管理自然是十分重要的:

    127.0.0.1:6379> dbsize   -- 服务器中键个数
    (integer) 6
    127.0.0.1:6379> keys *   -- 服务器中所有键
    1) "favorite"
    2) "kyoto"
    3) "ytuan"
    4) "Extreme Pizza"
    5) "ranking:restrants"
    6) "Yummy Pizza"
    127.0.0.1:6379> scan 0   -- 扫描键
    1) "0"
    2) 1) "favorite"
       2) "kyoto"
       3) "Extreme Pizza"
       4) "ytuan"
       5) "ranking:restrants"
       6) "Yummy Pizza"
    127.0.0.1:6379> del "kyoto"  -- 删除键
    (integer) 1
    127.0.0.1:6379> 
    127.0.0.1:6379> 
    127.0.0.1:6379> 
    127.0.0.1:6379> scan 0
    1) "0"
    2) 1) "favorite"
       2) "Extreme Pizza"
       3) "ytuan"
       4) "ranking:restrants"
       5) "Yummy Pizza"
    127.0.0.1:6379> exists "tuany"  -- 判断键是否存在
    (integer) 0
    127.0.0.1:6379> exists "ytuan"
    (integer) 1
    127.0.0.1:6379> type "ytuan"    -- 键的类型
    set
    127.0.0.1:6379> rename "ytuan" "yangtuan"   -- 重命名键
    OK
    127.0.0.1:6379> exists "yangtuan"
    (integer) 1
    127.0.0.1:6379> exists "ytuan"
    (integer) 0
  • 相关阅读:
    矩阵快速幂模板
    Kuangbin带你飞 AC自动机
    Kuangbin 带你飞 KMP扩展KMP Manacher
    Kuangbin 带你飞 数位DP题解
    kuangbin 带你飞 数学基础
    Kuangbin 带你飞-基础计算几何专题 题解
    最大团问题
    头文件
    Codeforces 362E Petya and Pipes 费用流建图
    kuangbin带你飞 匹配问题 二分匹配 + 二分图多重匹配 + 二分图最大权匹配 + 一般图匹配带花树
  • 原文地址:https://www.cnblogs.com/ytuan996/p/10648064.html
Copyright © 2011-2022 走看看