zoukankan      html  css  js  c++  java
  • redis常规命令记录

     

    概述

    因为redis是单线程执行,所以不用关心并发问题。

    简单记录一下redis的操作命令,留作查阅,回头再整理一下事物等操作。

    reids中存储的是kev-value形式, 其中的value有几种:

    1. 字符串: 就是简单的string

    2. 字符串列表: 有序可重的列表

    3. 字符串集合: 无序去重的

    4. 字符串有序集合: 有序去重的

    5. 哈希: 存储一张哈希表

    6. HyperLogLog: 基数操作,即获取去重集合中的元素个数

    各类型存储命令介绍

    字符串

    简单的字符串存储了

    字符串操作

    新建

    • set key value: 设置value

    • setex key 2 value: 设置value,并设置过期时间为2s

    • psetex key 2000 value: 设置value,并设置过期时间为2000ms

    • setnx key value: 设置value,当key存在时不设置

    • append key value: 若key存在,将将value拼到原值后边,否则直接设置

    更新

    • getset key value: 设置value并返回旧的value

    • setrange key 2 value: 更新,将value拼到原值偏移量2的后边

    查询

    • get key: 获取value

    • getrange key 2 3: 获取value的2-3的字串, 下标从0开始, 负数表示从后往前

    • strlen key: 获取字符串长度

    字符串批量操作

    • mset key1 value1 [key2 value2 ...]: 批量设置

    • msetnx key1 value1 [key2 value2 ...]: 批量设置,当key存在时不覆盖

    • mget key1 [key2 ...]: 批量获取

    字符串位操作

    比如设置一篇文章的是否阅读, 可以将用户的id作为偏移量, 1表示阅读过, 0表示没有阅读

    • getbit key offset: 返回偏移量上的值,0或1

    • setbit key offset 1: 设置偏移量上的值

    计数操作

    简单理解就是存个数字,因为redis是单线程,所以也可以用它来防并发

    • incr key: +1,不存在时为0+1

    • incrby key 2: +2

    • incrbyfloat key 2.4: +2.4

    • decr key: -1

    • decrby key 2.4: -2.4

    列表

    列表是一个有序可重复的集合,可以参考java中的 List

    插入

    • linsert key before(after) value1 value: 在value1的前边(后边)插入value,若成功,返回列表的新长度,若失败返回-1,若列表为空,返回0

    • lpush key value1 [value2 ...]: 将值插入到列表头部

    • rpush key value1 [value2 ...]: 将值插入到列表尾部

    • lpushx key value: 将值插入列表的头部,若列表不存在,操作无效

    • rpushx key value: 将值插入列表的尾部,若列表不存在,操作无效

    • lset key 2 value: 设置列表下标为2的值

    删除

    • lrem key count value: 删除列表中的value

      • count:删除的个数,整数从前往后,负数从后往前,0删除所有

    • ltrim key 2 3: 列表只保留2-3的元素,删除其余元素

    查询

    • blpop key1 [key2 ...] timeout: 获取并移除列表的第一个元素,阻塞timeout秒,若没有拿到,返回nil

    • brpop key1 [key2 ...] timeout: 获取并移除列表的最后一个元素,阻塞

    • brpoplpush key1 key2 timeout: 从key1中弹出(删除)最后一个值插入到key2中,若timeout秒没有拿到,返回nil

    • lpop key: 弹出列表的第一个元素

    • rpop key: 弹出列表的最后一个元素

    • rpoplpush key1 key2: 从key1中弹出最后一个元素插入到key2中

    • lindex key 2: 获取列表下标为2的元素

    • llen key: 获取列表长度

    • lrange key 2 3: 获取列表2-3的元素,负数从后往前

    集合

    集合是一个无序去重的,可参考java中的HashSet

    更新

    • sadd key value1 [value2 ...]: 插入元素

    • smove key1 key2 value: 将value从key1移到key2,若key1中value不存在,则不执行操作

    • srem key value1 [value2 ...]: 将元素从集合中删除

    查询

    多个集合操作

    • sdiff key1 [key2 ...]: 返回所有集合的差集(值在key1中,不在其他集合中0)

    • sdiffstore newKey key1[key2 ...]: 返回所有集合的差集,将结果存储到newKey中

    • sinter key1 [key2 ...]: 返回所有集合的交集(值再每一个集合中都存在)

    • sinterstore newKey key1 [key2 ...]: 返回所有集合的交集,将结果存储到newKey中

    • sunion key1 [key2 ...]: 返回所有集合的并集

    • sunionstrore newKey key1 [key2 ...]: 返回所有集合的并集,将结果存储到newKey中

    获取元素

    • spop key [count]: 从集合中随机弹出一个元素, 若指定count,则弹出count个元素

    • srandmember key [count]: 从集合中随机获取一个元素,若指定count,则获取count个元素,与 spop 不同,此命令不会删除元素

    • scard key: 获取集合元素数

    • sismember key value: 查看value是否在集合中

    • smembers key: 获取集合所有元素

    • sscan key cursor [match h*] [count count]: 迭代集合中的元素

      • cursor:游标,使用命令返回的新游标作为下一次迭代的游标,当返回为0时,迭代完成

      • count:指定返回的元素数量,默认为10,每次迭代获取的数量可以不相同

      • match:对返回的元素进行筛选,因为是在返回结果后进行筛选,所以可能返回空

    有序集合

    有序集合是去重有序,可参考java中的LindedHashSet

    redis中的有序集合通过给每个元素设置一个关联的分数,通过分数进行排序,当分数相同时,通过自然排序,即abcd

    更新

    • zadd key score1 value1 [score2 value2 ...]: 添加元素,若存在更新分数

    • zincrby key 2.3 value: value的分数+2.3,若value不存在等同于add

    删除

    • zrem key value1 [value2 ...]: 删除集合中的元素

    • zremrangebylex key min max: 删除集合中指定范围的元素,(min max 参考 zlexcount)

    • zremrangebyrank key 2 3: 删除集合排名2-3的元素

    • zremrangebyscore key min max: 删除集合中指定范围分数的元素,(min max 参考 zlexcount)

     

    查询

    获取个数

    • zcard key: 获取集合大小

    • zcount key 2 3: 获取集合中分数在2-3的元素数量

    • zlexcount key min max: 获取集合中成员在min-max之间的成员数量

      • min:-(负无穷), [a(最小值为a元素,闭区间), (a(开区间)

      • max: +(正无穷), [a, (a 同上

    多个集合操作

    • zinterstore newKey num key1 [key2 ...]: 计算多个集合的交集,将结果存储到newKey中,结果集元素的分数为各集合元素分数和,num指定后边跟了几个集合

    • zunionstore newKey num key1 [key2 ...]: 计算多个集合的并集,将结果存储到newKey中,结果集元素的分数为各集合元素分数和,num指定后边跟了几个集合

    获取范围元素

    • zrange key 2 3 [withscores]: 获取集合中排序为2-3的元素,负数从后往前,按分数从小到大排序

      • withscores:返回分数值

    • zrevrange key 2 3 [withscores]: 类似 zrange, 分数从大到小排序

    • zrangebylex key min max [limit offset count]: 返回集合中指定范围的元素,(min max 参考 zlexcount)

      • limit offset count: 可参考sql

    • zrangebyscore key min max: 返回集合中指定分数范围的元素,(min max 参考 zlexcount)

    • zrevrangebyscore key max min [withscores]: 类似 zrangebyscore, 分数从大到小

    获取元素信息

    • zrank key value: 返回value的排名

    • zrevrank key value: 返回value的排名,分数从大到小

    • zscore key value: 返回value的分数

    • zscan key cursor [match h*] [count count]: 迭代集合,参数参考 sscan

    哈希

    存储一张哈希表,简单说就是多个kay-value对,可以用来存储对象属性等

    更新

    • hmset key field1 value1 [field2 value2 ...]: 批量设置键值对

    • hset key field value: 设置键值对

    • hsetnx key field value: 设置键值对,若已存在则不设置

    • hincrby key field 2: 给字段+2

    • hincrbyfloat key field 2.4: 给字段+2.4

    删除

    • hdel key field1 [field2 ...]: 删除哈希表的字段

    查询

    • hlen key: 获取字段数量

    • hexists key field: 查看哈希表中field字段是否存在

    • hget key field: 获取哈希表中字段的值

    • hkeys key: 获取所有字段

    • hvals key: 获取所有值

    • hgetall key: 获取哈希表的所有字段和值

    • hmget key field1 [field2 ...]: 获取所有给定字段的值

    • hscan key cursor [match h*] [count count]: 迭代,参数参考 sscan

    HyperLogLog

    HyperLogLog(什么鬼名字)是用来做基数统计的,也就是统计一个去重的集合中元素的个数,那直接使用集合不就好了?

    使用集合的话,每个元素都进行存储,若需要做大量统计,则十分耗费内存,HyperLogLog并不直接存储元素,不管有多少元素(2^64)都只需要12KB内存空间,也正因如此,并不能通过这个结构直接返回元素,只能计算其中元素的个数,但只是估算,可以理解。

    • pfadd key value1 [value2 ...]: 将元素添加

    • pfcount key1 [key2 ...]: 返回基数估算值,若多个则返回估算值得和

    • pfmerge newKey key1 [key2 ...]: 将多个合并为一个,存到newKey中

    通用命令

    更新

    • del key: 删除键

    • expire key 2: 为key设置2s过期时间

    • pexpire key 2000: 为key设置2000ms过期时间

    • expireat key timestamp: 为key设置过期时间,指定时间戳过期

    • pexpireat key millseconds-timestamp: 为key设置过期时间,毫秒级时间戳(没用过)

    • persist key: 移除key过期时间

    • ttl key: 获取key的剩余过期时间

    • pttl key: 获取key的毫秒级剩余过期时间

    • move key 2: 将key移动到2库中

    • rename key newKey: 重命名

    • renamenx key newKey: 重命名,若newKey存在则不操作

    查询

    • dump key: 返回序列化的值

    • exists key: 查看key是否存在

    • keys pattern: 获取所有符合匹配的key

      • pattern:* 表示所有, h* h开头, 等等

    • randomkey: 从当前库随机返回一个key

    • type key: 返回存储的数据类型

      • select 1: 选择1库

  • 相关阅读:
    Java 多线程同步的五种方法
    MySQL中的内连接、左连接、右连接、全连接、交叉连接
    java中线程安全和非线程安全的集合
    hashCode和equal
    MySQL中char、varchar和nvarchar的区别
    MySQL存储引擎
    String在内存中如何存储(Java)
    String、StringBuffer、StringBuilder区别
    MySQL中的事务
    gbk、utf-8、utf8mb4区别
  • 原文地址:https://www.cnblogs.com/hujingnb/p/11279961.html
Copyright © 2011-2022 走看看