概述

因为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. Day12- Python基础12 线程、GIL、Lock锁、RLock锁、Semaphore锁、同步条件event

    http://www.cnblogs.com/yuanchenqi/articles/6248025.html  博客地址 本节内容: 1:进程和线程的说明 2:线程的两种调用方式 3:threadi ...

  2. LeetCode 5271. 访问所有点的最小时间 Minimum Time Visiting All Points

    地址 https://leetcode-cn.com/problems/minimum-time-visiting-all-points/submissions/ 题目描述平面上有 n 个点,点的位置 ...

  3. IDEA2019 Maven项目出现Unable to import maven project: See logs for details解决办法

    问题1:Unable to import maven project: See logs for details 网上说,原因是IDEA2019和Maven3.6.2不兼容导致的,需要把Maven降级 ...

  4. Filter 原理

    二.Filter 原理 2.1 Filter 概述 Filter(过滤器)是 DirectShow 中最基本的概念.DirectShow 是通过 Filter Graph 来管理 Filter 的.F ...

  5. Pytorch的tensor数据类型

    基本类型 torch.Tensor是一种包含单一数据类型元素的多维矩阵. Torch定义了七种CPU tensor类型和八种GPU tensor类型: Data tyoe CPU tensor GPU ...

  6. 用keras构建自己的网络层 TensorFlow2.0教程

    1.构建一个简单的网络层 from __future__ import absolute_import, division, print_function import tensorflow as t ...

  7. Nginx之负载均衡 :两台服务器均衡(填坑)

    第一步,两台服务器都要安装好Nginx和Tomcat,我这边的安装的是Nginx 1.16.1 Tomcat9: 第二步,安装完成之后,选择你要做均衡的那台服务器,,打开其Nginx 配置文件,在se ...

  8. IT兄弟连 Java语法教程 数组 使用foreach循环遍历数组元素

    从JDK5之后,Java提供了一种更简单的循环:foreach循环,也叫作增强for循环,这种循环遍历数组和集合更加简洁.使用foreach循环遍历数组和集合元素时,无需获得数组或集合的长度,无需根据 ...

  9. IT兄弟连 Java语法教程 流程控制语句 循环结构语句4

    do-while循环 Java还有一种循环是do-while.与for.while这些在循环顶部判断条件表达式的语句不同,do-while是在循环底部进行条件表达式的检查.这意味着do-while循环 ...

  10. css/js 超出部分显示省略号

    1.js方法 function cutString(str, len) { //length属性读出来的汉字长度为1 if (str.length * 2 <= len) { return st ...