zoukankan      html  css  js  c++  java
  • redis之api学习

    学习redis api的方法:

    1:理解redis的一些机制,会发现这些命令有很强的通用性。

    2:redis不是万金油,有些数据结构和命令必须在特定场景下使用。

    keys * :查询当前数据库中中的所有键

    dbsize:数据库键的数量

    rpush :插入一个列表数据

    exists:判断键是否存在

    del:    支持删除多个键 del key1 key2

    设置键过期:expire key second 到期后会自动删除键

    通过ttl 命令可以观察距离键的过期时间

    type :查看键的类型

    object encoding:查看键的内部编码实现

    字符类型命令: 字符串类型内部编码:int emnstr(小于等于39字节字符串) raw

    设置值:

    set key value nx (nx代表键必须不存在,才能将该键向数据库添加成功。相当于向数据库添加一个新键)

    set key value xx(键必须存在才能向数据库添加该建,相当于修改的情况)这里简单的介绍一下一下,setnx可以作为分布式锁的一种实现方案。

    获取值:
    get key

    批量的设置与获取值 mset key1 value1 key2 value2 key3 value3

    mget key1 key2,key3

    推荐使用批量操作:
    如果使用get,执行n次命令所需时间:n次get时间=n次网络时间+n次命令时间

    使用mget:n次get时间:1次网络时间+n次get时间

    这里n次时间是指客户端的时间,因为redis客户端与服务器通过网络套接字通信。

    追加值命令:
    append key value

    字符串长度:

    strlen key

    设置并返回原来的值
    设置指定位置的字符:
    setrange key offset value (offset 代表值的偏移位置) 如果value大于当前字符长度会进行覆盖后面的值。

    getrange key start end(必须有start 与end不然会报错)

    哈希命令:hash类型内部编码:ziplist hashtable
    hset key field value

    hget key field

    批量添加field value

    hmset key field1 value1 field2 value2

    批量获得field1 field2

    hmget key field1 field2

    判断field是否存在:
    hexists key field

    获取key的所有field

    hkeys key

    获取key所具有的filed的所有的value:
    hvals key

    获取所有的field-value

    hgetall key

    计算字符串的长度:
    hstrlen key

    列表命令:内部编码:linkedlist ziplist 列表可以用来存储多个有序的字符串,记住列表是有序的,列表中的元素可以是重复的
    rpush key value

    范围查找:
    lrange key start end

    lrange key 0 -1 可以从左到右获取列表的所有元素

    从左边插入元素:
    lpush key value

    向某个元素前/后插入元素:
    linsert key before |after pivot(具体元素的值) value

    获取列表指定索引下标的元素:
    lindex key index (index为-1代表最右边第一个元素,-1之后没有了)

    获取列表长度:
    llen key

    删除:
    从列表左侧弹出元素:
    lpop key

    从列表右侧弹出元素:
    rpop key

    删除指定元素:
    lrem key count value

    因为列表可以具有重复元素:所以当count>0 代表从左到右开始删除 count个值等于value的元素

    当count<0 代表从右到左开始删除 count个值等于value的元素

    当count==0时,代表删除所有值等于value的元素

    按照索引范围修剪列表:
    ltrim listkey  1 3

    只保留listkey的第二个和第四个元素

    修改指定索引下标的元素:
    lset key index newvalue

    brpop 阻塞式的获得列表尾部的元素,如果列表尾部有元素则返回,否则就阻塞。

    集合命令:内部编码:intset (为什么用intset还是无序,根据书上说的intset底层数组难道不是有序的吗?)hashtable

    问题解答:intset编码的集合里面的元素是有序的(按照整数从小到大排列),hashtable编码的集合是无序的

    集合类型也是用来保存多个hash的字符串元素,但和列表类型不一样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引下标获取元素

    添加元素:
    sadd key element1 element2...

    删除元素:
    srem key element1 element2

    计算元素个数:

    scard key

    判断元素是否在集合中:
    sismember  key element

    随机从集合返回指定个数元素:
    srandmember key count (count可选,默认为1)

    从集合中随机弹出元素:
    spop key

    获取所有元素:
    smembers key

    求交集:
    sinter key1 key2

    求并集:
    sunion key1 key2

    求差集:
    sdiff key1 key2  需要注意key1 key2的顺序

    将交,并,差集合结果进行保存:
    sinterstore destination key1 key2...

    sunionstore destination key1 key2...

    sdiffstore destination key1 key2....

    有序集合:内部编码:压缩列表,跳跃表

    压缩列表每个集合元素使用两个相邻的压裂列表节点表示,第一个节点保存元素的值,第二个节点保存元素的分值。

    跳跃表由哈希表与跳跃表组成。哈希表使得获取成员的时间复杂度降低,而跳跃表可以使得获取排名,执行范围查找时间复杂度降低。

    有序集合中的元素可以排序是因为它给每个元素都设置了一个分数。

    添加元素:
    zadd key  score member score mmber2

    计算成员个数

    zcard key

    计算某个成员的分数:和有序集合底层实现有关,所以执行此命令较快。
    zscore key member

    计算某个成员的排名:
    zrank key  member 计算正向排名

    zrerank key member 计算逆向排名

    删除成员:
    zrem key member (删除成员)

    增加成员的分数:
    zincrby key 分数 member(分数代表增加的分数)

    返回指定下标的元素:
    zrange key start end (按照得分从小到大排序) (withscores)可选参数,带上也返回得分

    zrevrange key start end(按照得分从大到小排序)(withscores)

    返回指定分数范围的成员:
    zrangebyscore key min max (withscore) 从小到大返回

    zrevrangebyscore key min max(withscore) 从小到大返回

    返回指定分数范围成员个数:
    zcount key min max(min 与max都包含)

    范围删除:
    删除指定排名范围内的升序元素:
    zremrangebyrank key start end

    删除指定分数范围内的元素:
    zremrangebyscore key min max

    集合间的操作:
    交集:
    zinterstore destination numkeys key1 key2...    weights weights...     aggregate sum|min|max

    zinterstore key3 2 key1 key2 1 0.5 aggregate sum

    key1的成员变量member权重为1,key2的member权重为0.5 计算所得交集 分值按照sum进行汇总

    numkeys:需指定参与交集的key的个数,必须指定,上面就是两个,所以指定为2

    键的管理

    键的通用命令:
    type del object exists expire

    键重命名

    rename key newkey

    方式newkey与已经存在在数据库中的键重复,采用

    renamenx 只有在newkey不存在时,才可以使用rename key newkey

    随机返回一个键:
    randomkey

    键过期:
    expire key seconds(秒级)

    expire key timestamp(时间戳)

    毫秒级过期时间设置

    pexpire key milliseconds

    pexpire key milliseconds-timestamp

    过期时间为-1,代表不会失效

    使用expire key的键不存在,返回结果为0

    如果过期时间为副值,键会立即被删除 example:
    expire key -2

    persist:命令可以将键的过期时间删除

    小提示:对于字符串类型键,执行set命令会去掉过期时间

    迁移键:实现在不同实例之间进行数据迁移过程功能
    (1)dump key:在源主机上执行,dump命令会将键值序列化,格式采用rdb格式

    restore key ttl value(ttl=0则代表没有过期时间)

    (2)migrate:命令也是在redis实例之间进行数据迁移的,migrate命令的执行是原子性的,不同于dump在多个redis实例上开启客户端,migrate命令传输直接在源reids和目标redis上

    完成,目标redis完成restore后会发送ok给源redis

    渐进式遍历:
    scan:它能有效的解决keys命令存在的问题。和keys命令执行时会遍历所有键不同,scan采用渐进式遍历的方法来解决keys命令可能带来的阻塞问题,每次scan命令的时间复杂度是o(1)
    要实现keys所提供的的功能,需要多次进行scan

    scan cursor match_pattern count number

    match_pattern:可选 代表支持正则表达式匹配;

    count_number:可选 代表每次需要遍历的个数

    cursor 必须要有,每一执行完scan 都会返回下一个cursor,拿到下一个cursor即可继续向下遍历,直到cursor返回0,代表全部遍历。

    select db 选择数据库

    flushdb 清楚当前数据库

    flushall 清楚所有数据库

  • 相关阅读:
    jquery 图片播放器插件(支持自己设定时间,自己设定是否自动播放)
    ie6下bug集合(二)li之间空隙bug
    大小不固定的图片和多行文字的垂直水平居中
    解决IE6下 position的fixed定位问题
    C# 编写不安全代码
    委托和事件的使用
    如何删除win7桌面的库和家庭组图标
    gcc g++ 区别
    Java 访问注册表
    C# 通过反射类动态调用DLL方法
  • 原文地址:https://www.cnblogs.com/foreverlearnxzw/p/13861337.html
Copyright © 2011-2022 走看看