概述

因为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库

redis常规命令记录的更多相关文章

  1. redis常用命令记录

    cd App/opt/redis/bin/ ./redis-cli 1.查看所有key值 keys 前缀* 2.删除指定key值 删除一条 del key全名 删除多条 exit ./redis-cl ...

  2. 【redis】redis常用命令及操作记录

    redis-cli是Redis命令行界面,可以向Redis发送命令,并直接从终端读取服务器发送的回复. 它有两种主要模式:一种交互模式,其中有一个REPL(read eval print loop), ...

  3. 转:redis常用命令

    一 Redis介绍 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发 ...

  4. Redis常用命令

    Redis常用命令Redis提供了丰富的命令对数据库和各种数据类型进行操作,这些命令可以再Linux终端使用.1.键值相关命令2.服务器相关命令 一.键值相关命令 1.get get 键值 当 key ...

  5. redis常用命令、常见错误、配置技巧等分享

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/117.html?1455860236 1. redis查看当前所有的key ...

  6. Redis常用命令速查 02_转

    一.Key Key命令速查: 命令 说明 DEL 删除给定的一个或多个 key,不存在的 key 会被忽略,返回值:被删除 key 的数量 DUMP 序列化给定 key,返回被序列化的值,使用 RES ...

  7. Redis监控工具,命令和调优

    Redis监控工具,命令和调优 1.图形化监控 因为要对Redis做性能测试,发现了GitHub上有个python写的RedisLive监控工具评价不错.结果鼓捣了半天,最后发现其主页中引用了Goog ...

  8. 监控 redis 执行命令

    监控 redis 执行命令 Intro 最近在用 redis 的时候想看看执行了哪些命令,于是发现了 redis-cli 提供的 Monitor 命令,直接使用这个就可以监控执行的大部分 redis ...

  9. redis list 清空记录小技巧

    redis list 清空记录小技巧   redis中的list操作命令中删除指定key中的所有记录命令: ltrim key 1 0 即 ltrim key start end 中的start要比e ...

随机推荐

  1. Linux日志中出现大量dhclient mesage浅析

    最近检查发现一台Linux服务器,发现其日志里面有大量下面信息,其中部分信息做了脱敏处理.其中一个地址A(192.168.AAA.AAA) 为DNS服务器地址,地址B(192.168.BBB.BBB) ...

  2. JVM GC算法 垃圾回收器

    JVM的垃圾回收算法有三种: 1.标记-清除(mark-sweep):啥都不说,直接上图 2.标记-整理(mark-compact) 3.复制(copy) 分代收集算法                 ...

  3. 算法设计与分析 1.2 不一样的fibonacci数列

    ★题目描述 fibonacci 数列的递推公式是F(n) = F(n-1) + F(n-2)(n >= 2 且 n 为整数). 将这个递推式改为F(n) = aF(n-1) + bF(n-2)( ...

  4. leetcode 752. 打开转盘锁

    地址 https://leetcode-cn.com/problems/open-the-lock/ 你有一个带有四个圆形拨轮的转盘锁.每个拨轮都有10个数字: '0', '1', '2', '3', ...

  5. C++(OI竞赛入门)学习指南一

    #include<cstdio>   头文件#include包含  <头文件名称> #include<iostream>     需要头文件里面的功能    cst ...

  6. angularjs中使用锚点,angular路由导致锚点失效的两种解决方案

     壹 ❀ 引 公司新项目开发中,首页要做个楼层导航效果(如下图),要求能点击图标对应跳到楼层即可,因为不需要跳转过度动画,也要求最好别用JQ,想着原生js操作dom计算top的兼容性,想着用锚点实现算 ...

  7. P3376 网络最大流模板(Dinic + dfs多路增广优化 + 炸点优化 + 当前弧优化)

    ### P3376 题目链接 ### 这里讲一下三种优化的实现以及正确性. 1.dfs多路增广优化 一般的Dinic算法中是这样的,bfs() 用于标记多条增广路,以至于能一次 bfs() 出多次 d ...

  8. 转载:点云上实时三维目标检测的欧拉区域方案 ----Complex-YOLO

    感觉是机器翻译,好多地方不通顺,凑合看看 原文名称:Complex-YOLO: An Euler-Region-Proposal for  Real-time 3D Object Detection ...

  9. java.lang.ClassNotFoundException: XXX (no security manager: RMI class loader disabled)

    在搞RMI远程发布,consumer去获取rmi远程服务的代理对象的时候出现了如下的错误 问题发现: 由于我发布的对象的包路径和获取的对象的包路径不一致,导致了这样的问题 解决方案: 包路径改为一致就 ...

  10. 最近的项目系之3——core3.0整合Senparc

    1.前言 既然是.net下微信开发,自然少不了Senparc,可以说这个框架的存在, 至少节省了微信相关工作量的80%.事实上,项目开始前,还纠结了下是Java还是core,之所以最终选择core,除 ...