• redis01


    redis特点

    1.速度快

    高qps

    将数据存储在内存中

    由C语言编写

    线程模型为单线程

     

    2.持久化

    Redis将所有数据保持在内存中,并异步更新到磁盘上

     

    3.支持多种数据结构

    String

    Hash

    List

    Set

    ZSet

    BitMap(位图)

    HyperLogLog(超小的内存唯一值计数器)

    GEO(地理信息定位)

    4.支持多种语言

    Java

    Python

    Ruby

    Lua

    NodeJS

    5.功能丰富

    支持类MQ的发布订阅功能

    支持Lua脚本

    支持事务

    支持pipeline

    6.支持主从复制

    7.高可用分布式

    启动方式

    1  cd redis/bin
    2  ./redis-server  redis.conf
    3  ./redis-cli -h host -p port -a password     
           ./redis-cli -p 6379 -a redis
            redis-cli --raw 防中文乱码

    通用命令

    keys   key* 遍历所有的key  keys[pattern]   时间复杂度O(n) ,不建议使用

    dbsizes  计算key的总数

    exists key   检查key是否存在

    del key[key ...]    在key存在时删除key

    expire key seconds   为给定key设置过期时间,单位为秒

      ttl key 查看key的过期时间

      persist key 去掉key的过期时间

    type key    返回key的类型

      string hash list set zset none

    内部编码

    string

    raw , int , embstr

    int的范围相当于Java中的long,为8个字节长整型

    字符长度少于等于39个长度时为embstr

    字符长度超过39个长度时为raw,比起embstr,是不连续的

    hash

    hashtable(哈希表) , ziplist(压缩列表)

    hash-max-ziplist-entries 512

    hash-max-ziplist-value 64

    当hash结构的field数量小于等于512并且每个field与value的长度小于等于64时,hash会采用ziplist

     

    list 

    linkedlist(双向循环链表) , ziplist(压缩列表)

    list-max-ziplist-entries 512

    list-max-ziplist-value 64

    当list结构的元素数量小于等于512并且每个item的长度小于等于64时,list会采用ziplist

     

    set 

    hashtable(哈希表) , intset(整数集合)

    set-max-intset-entries 512

    当set结构的元素数量小于等于512时候,set将采用intset

     

    zset 

    skiplist(跳跃列表) , ziplist(压缩列表)

    zset-max-ziplist-entries 512

    zset-max-ziplist-value 64

    当zset结构的元素数量小于等于512并且每个member的长度小于等于64时,zset会采用ziplist

    当key的数量比较少时,Redis采取以时间换空间的策略

    当key的数量增多时,Redis采取以空间换时间的策略

    查看内部编码的方式 object encoding ${key}

    ziplist的特点

    连续内存,读写有指针位移,最坏O(n2),新增删除有内存重分配

    单线程,高速

    1.纯内存

    2.epoll 非阻塞io

    3.避免线程切换

    一次只运行一条命令

    拒绝长命令  keys,flushall,flushdb,slow lua script,mutil/exec,operate

    String

    结构:key-value对  value可以是字符串,数字,二进制数组

    String 常用命令

     1 get  key   获取指定key的值
     2 
     3 set key value  设置指定key的值
     4 
     5 incr key  将key中存储的数字值增一
     6 
     7 incrby key incremen   将key所存储的数字值加上给定的增量
     8 
     9 decr key   将key中存储的数字值减一
    10 
    11 decrby key decrement  将key所存储的数字值减去给定的减量
    12 
    13 setnx key value  只有当key不存在时才设置key的值
    14 
    15 set key value nx    只有当key不存在时才设置key的值
    16 
    17 setex key second value  设置指定key的值,同时设置该key的过期时间,单位为秒
    18 
    19 set key second value ex   设置指定key的值,同时设置该key的过期时间,单位为秒
    20 
    21 set key value xx     只有key存在时才设置key的值
    22 
    23 mget key1 [key2...]    获取所有(一个或多个)指定key的值
    24 
    25 mset key1 value1 [key2 value2...]    同时设置一个或多个key-value对
    26 
    27 其他命令
    28 
    29 getset key newvalue    将给定key的值设置为value,并返回key的旧值
    30 
    31 append key value   将value追加到旧值的末尾
    32 
    33 strlen key
    34 
    35 返回key所存储的字符串值的长度
    36 
    37 ​    当key不存在时,返回0
    38 
    39 ​    一个中文占2个字节
    40 
    41 ​    时间复杂度为O(1),strlen在redis内部不需要查询整个字符串来得到长度
    42 
    43 incrbyfloat key increment    将key所存储的值加上给定的浮点值
    44 
    45 getrange key start end    返回key中字符串区间为[start,end]的子串,索引从0开始
    46 
    47 setrange key offset value
    48 
    49 ​    用value擦书覆盖指定key所存储的字符串值,从偏移量offset开始,索引从0开始
    50 
    51 ​    key = content的时候,执行setrange key 1 haha 之后,key=chahant

    Hash

     1  hget key field
     2 
     3 获取存储在哈希表中指定field的值
     4 
     5 hset key field value
     6 
     7 将哈希表中指定field的值设置为value
     8 
     9 hdel key field1 [field2...]
    10 
    11 删除哈希表中一个或多个field
    12 
    13 hexists key field
    14 
    15 判断哈希表中,指定field是否存在
    16 
    17 hlen key
    18 
    19 获取哈希表中字段的数量
    20 
    21 hmget key field1 [field2...]
    22 
    23 获取哈希表中所有给定field的值
    24 
    25 hmset key field1 value1 [field2 value2...]
    26 
    27 同时将一个或多个field-value对设置到哈希表中
    28 
    29 hincrby key fiel increment
    30 
    31 为哈希表中指定field的值加上一个整型增量
    32 
    33 hgetall key
    34 
    35 获取哈希表中所有字段和值
    36 - 时间复杂度为O(n),不建议使用
    37 
    38 hkeys key
    39 
    40 获取哈希表中的所有字段
    41 - 时间复杂度为O(n),不建议使用
    42 
    43 hvals key
    44 
    45 获取哈希表中的所有值
    46 - 时间复杂度为O(n),不建议使用
    47 
    48 hsetnx key field value
    49 
    50 只有当哈希表中field不存在时,才设置该field的值
    51 
    52 hincrbyfloat key field increment
    53 
    54 为哈希表中指定field的值加上一个浮点数增量

    list

    List-结构

    列表:有序、可以有重复元素


    索引从左往右,从0开始逐个增大 0 1 2 3 4 5
    索引从右往左,从-1开始逐个减小 -6 -5 -4 -3 -2 -1

     1 rpush key value1 [value2...]
     2 
     3 在列表后侧添加一个或多个值
     4 
     5 lpush key value1 [value2...]
     6 
     7 在列表左侧添加一个或多个值
     8 
     9 linsert key before/after value newValue
    10 
    11 在列表指定的value前/后插入newValue,时间复杂度为O(n)
    12 
    13 lpop key
    14 
    15 从列表左侧弹出一个值
    16 
    17 rpop key
    18 
    19 从列表右侧弹出一个值
    20 
    21 lrem key count value
    22 
    23 - 含义:根据count值,从列表中删除值为value的项,时间复杂度为O(n)
    24   - count > 0 时,从左往右遍历,删除最多count个与value相等的值
    25   - count < 0 时,从右往左遍历,删除最多Math.abs(count)个与value相等的值
    26   - count = 0 时,删除所有与value相等的值
    27 时间复杂度是On
    28 
    29 ltrim key start end
    30 
    31 对一个列表进行修剪,只保留指定区间内的元素,不在区间内的元素都将被删除,时间复杂度为O(n)
    32 
    33 lrange key start end
    34 
    35 获取列表指定索引范围的所有元素,时间复杂度为O(n)
    36 
    37 lindex key index
    38 
    39 获取列表指定索引的元素,时间复杂度为O(n)
    40 
    41 llen key
    42 
    43 获取列表长度,时间复杂度为O(1)
    44 
    45 lset key index newValue
    46 
    47 设置列表指定索引的值为newValue,时间复杂度为O(n)
    48 - 注意:
    49   - 必须存在这个值才能设置成功,否则会报错
    50 
    51 blpop key timeout
    52 
    53 移除并获取列表左边第一个元素,如果列表没有元素会阻塞直到等待超时或可弹出元素为止
    54   - timeout单位为秒,timeout=0时不阻塞
    55 
    56 brpop key timeout
    57 
    58  移除并获取列表右边第一个元素,如果列表没有元素会阻塞直到等待超时或可弹出元素为止
    59   - timeout单位为秒,timeout=0时不阻塞

    set

    结构

    集合:无序,不可重复

     Set-集合内操作

     1 sadd key memebr1 [member2...]
     2 
     3 向集合中添加一个或多个成员
     4 
     5 srem key member1 [member2...]
     6 
     7 从集合中删除一个或多个成员
     8 
     9 scard key
    10 
    11 获取集合中的元素个数
    12 
    13 sismember key member
    14 
    15 判断member元素是不是集合的成员
    16 
    17 srandmember key count
    18 
    19 随机从集合中取出count个成员
    20 
    21 spop key
    22 
    23 随机移除并返回集合中的一个成员
    24 
    25 smembers key
    26 
    27 获取集合中的所有成员
    28 - 时间复杂度为O(n),不建议使用,类似的操作可以使用SSCAN

     Set-集合间操作

     1 sdiff key1 [key2...]
     2 
     3 返回给定所有集合的差集
     4 
     5 sdiffstore destKey key1 [key2...]
     6 
     7 计算给定所有集合的差集,并存入destKey
     8 
     9 sinter key1 [key2...]
    10 
    11 返回给定所有集合的交集
    12 
    13 sinterstore destKey key1 [key2...]
    14 
    15 计算给定所有集合的交集,并存入destKey
    16 
    17 sunion key1 [key2...]
    18 
    19 返回给定所有集合的并集
    20 
    21 sunionstore destKey key1 [key2...]
    22 
    23 计算给定所有集合的并集,并存入destKey

    集合与有序集合

    集合:无重复元素,无序,element

    有序集合:无重复元素,有序,element+score

    与列表的关系

    列表:有重复元素,有序,element

    zset

    有序集合:有序、不能包含重复元素
    每个节点包含:score和value两个属性,根据score进行排序

     1 zadd key score1 member1 [score2 member2...]
     2 
     3 向有序集合添加一个或多个成员,或者更新已存在成员的分数
     4 
     5 zrem key member1 [member2...]
     6 
     7 从有序集合中删除一个或多个成员
     8 
     9 zscore key member
    10 
    11 获取有序集合中成员的分数m
    12 
    13 zincrby key increment member
    14 
    15 对有序集合中指定成员的分数加上增量increment
    16 
    17 zcard key
    18 
    19 返回有序集合中元素的总个数
    20 
    21 zrange key start end [withscores]
    22 
    23 通过索引返回有序集合中指定区间的成员信息
    24 - withscores 参数,加上代表一并将score数据返回
    25 - 时间复杂度:O(log(n) + m) , n=有序集合中的元素个数,m=返回的总个数
    26 
    27 zrangebyscore key min max [withscores][limit]
    28 
    29 通过score返回有序集合中指定分数区间的成员信息
    30   - withscores 参数,加上代表一并将score数据返回
    31   - limit参数,加上代表限制返回多少条数据
    32 - 时间复杂度:O(log(n) + m) , n=有序集合中的元素个数,m=返回的总个数
    33 
    34 zscore key min max
    35 
    36 返回有序集合中指定分数范围内的元素个数
    37 - 时间复杂度:O(log(n) + m) , n=有序集合中的元素个数,m=指定分数范围内的元素个数
    38 
    39 zremrangebyscore key min max
    40 
    41 删除有序集合中指定分数区间的所有成员
    42 - 时间复杂度:O(log(n) + m) , n=有序集合中的元素个数,m=指定分数范围内的元素个数
    43 
    44 zremrangebyrank key start end
    45 
    46 删除有序集合中给定索引区间的所有成员
    47 - 时间复杂度:O(log(n) + m) , n=有序集合中的元素个数,m=指定索引范围内的元素个数

  • 相关阅读:
    Address already in use: JVM_Bind:80 异常的解决办法
    Spring(转载二)
    Spring(转载一)
    mybatis(二)
    mybatis(一)
    存储过程(二)
    存储过程(一)
    web过滤器
    请求转发和请求重定向
    JavaWeb(二)
  • 原文地址:https://www.cnblogs.com/quyangyang/p/11356348.html
Copyright © 2020-2023  润新知