草庐IT

Redis基础命令

Login_X's Blogs 2023-03-28 原文

Redis基础命令

Redis数据结构介绍

redis是一个key-value的数据库,key一般是String类型,但是value的类型多种多样

前五种是基本类型:

  • String:Hello World
  • Hash:
  • List:[A->B->C]
  • Set:
  • SortedSet:
  • GEO:
  • BitMap:0100011101001010101
  • HyperLog:0100011101001010101

Redis通用命令

添加或修改键值对

set age 21

获取key对应的value

get age

查询所有key

KEYS *

删除key

DELETE key1 key2 ...

判断key是否存在

EXISTS age

给key设置有效期20秒,有效期到自动删除

EXPIRE age 20

查看一个key的剩余有效期,返回值为正数表示秒,-2表示已删除,-1表示永久有效

TTL age

String类型

批量添加

MSET k1 v1 k2 v2 k3 v3

批量获取

MGET k1 k2 k3

自增

INCR age

指定步长自增自减

INCRBY age -2

浮点型数字指定步长自增

set score 10.1
INCRBYFLOAT score 0.5

添加一个键值对,不存在才添加

set age 21
SETNX age 21

添加一个键值对,并设置有效期

SETEX name1 10 Jack

key的层级结构

redis的key允许多个单词形成层级结构,多个单词之间用':'隔开,如下是xust公司id为1和2的user,xust公司id为1和2的狗

set xust:user:1 '{"id":1,"name":"Jack","age":21}'
set xust:user:2 '{"id":2,"name":"Jhon","age":13}'
set xust:dog:1 '{"id":1,"name":"AHuang","age":2}'
set xust:dog:2 '{"id":2,"name":"ABai","age":5}'

Hash类型

String类型将对象序列化为Json字符串后存储,修改某个字段时不方便

xust:user:1				{"id":1,"name":"Jack","age":21}

Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD

			field	  value
xust:user:1		name	  Jack
			age	  21

添加或修改hash类型key的field的值

HSET xust:user:3 name Lucy
HSET xust:user:3 age 12

获取一个hash类型key的field的值

HGET xust:user:3 age

批量添加多个hash类型key的field的值

HMSET xust:user:4 name Tim age 14 sex man

批量获取多个hash类型key的field的值

HMGET xust:user:4 name age sex

获取一个hash类型key中所有field和value

HGETALL xust:user:4

获取一个hash类型key中所有field

HKEYS xust:user:4

获取一个hash类型key中所有value

HVALS xust:user:4

让一个hash类型key的字段值自增并指定步长

HINCRBY xust:user:4 age 2

添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

HSETNX xust:user:4 age 21

List类型

类似Java中的LinkedList,可以看作是一个双向链表,既支持正向检索也支持反向检索

特征也与LinkedList类似:

  • 有序、
  • 元素可以重复‘
  • 插入删除块
  • 查询速度一般

常用来存储有序数据,如朋友圈点赞列表


向列表左侧插入一个或多个元素

LPUSH users 1 2 3

移除并返回列表左侧第一个元素,没有则返回nil

LPOP users 1

向列表右侧插入一个或多个元素

RPUSH users 4 5 6

移除并返回列表右侧第一个元素

RPOP users 1

返回一段角标范围内所有元素

LRANGE users 1 3

BLPOP和BRPOP与LPOP和RPOP类似,只是没有元素时等待指定时间,不是直接返回nil

等待20秒
BLPOP users 20

使用LPUSH+LPOP或RPUSH+RPOP可模拟栈

使用LPUSH+RPOP或RPUSH+LPOP可模拟队列

Set类型

类似Java中的HashSet,可看作一个value为null的HashMap

具备与HashSet类似的特征:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集等功能

向set中添加一个或多个元素

SADD s1 a b c

移除set中指定元素

SREM s1 a

返回set中元素个数

SCARD s1

判断一个元素是否存在于set中

SISMEMBER s1 b

获取set中所有元素

SMEMBERS s1

求两个集合的交集

SINTER s1 s2

求两个集合的差集

SDIFF s1 s2

求两个集合并集

SUNION s1 s2

SortedSet类型

一个可排序的set集合,类似Java中的TreeSet,但底层数据结构差别很大。SortedSet每一个元素都带有一个score属性,可基于score排序,低层实现是一个跳表(SkipList)加hash表

SortedSet具备下列特性:

  • 可排序
  • 元素不重复
  • 查询速度快

经常被用于实现排行榜


添加一个或多个元素到sorted set,若已经存在则更新score值

ZADD students 85 Jack 89 Lucy 82 Rose 95 Tom 78 Jerry 92 Amy 76 Miles

删除sorted set中一个指定元素

ZREM students Tom

获取sorted set中指定元素的score值

ZSCORE students Jack

获取sorted set中指定元素的排名,从0开始

ZRANK students Rose

获取sorted set中元素个数

ZCARD students

统计score值在给定范围内的元素个数

ZCOUNT students 0 80

让sorted set中指定元素指定步长自增

ZINCRBY students 2 Jack

按照score排名后获取指定排名范围内的元素

ZRANGE students 0 2

按照score排名后获取指定score范围内的元素

ZRANGEBYSCORE students 0 80

求差集,交集,并集与之前类似

排名默认都是升序,Z后添加REV为倒序,如ZRANGE-->ZREVRANGE

有关Redis基础命令的更多相关文章

  1. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  2. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  3. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  4. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  5. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  6. ruby - 从 Ruby : capturing the output while displaying the output? 运行 shell 命令 - 2

    我有一个问题。我想从另一个ruby​​脚本运行一个ruby​​脚本并捕获它的输出信息,同时让它也输出到屏幕。亚军#!/usr/bin/envrubyprint"Enteryourpassword:"password=gets.chompputs"Hereisyourpassword:#{password}"我运行的脚本文件:开始.rboutput=`runner`putsoutput.match(/Hereisyour(password:.*)/).captures[0].to_s正如您在此处看到的那样,存在问题。在start.rb的第一行,屏幕是空的。我在运行程序中看不到“输入您的密

  7. ruby - 是否有将图像文件转换为 ASCII 艺术的命令行程序或库? - 2

    有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/

  8. ruby - 在 Ruby 的 if 语句中检查 bash 命令 - 2

    如何在Ruby的if语句中检查bash命令的返回值(true/false)。我想要这样的东西,if("/usr/bin/fswscell>/dev/null2>&1")has_afs="true"elsehas_afs="false"end它会提示以下错误含义,它总是返回true。(irb):5:warning:stringliteralincondition正确的语法是什么?更新:/usr/bin/fswscell寻找afs安装和运行状态。它会抛出这样的字符串,Thisworkstationbelongstocell如果afs没有运行,命令以状态1退出 最

  9. ruby - 可以正常中断的来自 Rake 的长时间运行的 shell 命令? - 2

    在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa

  10. ruby - Capistrano 中的执行、测试和捕获命令有什么区别? - 2

    关于SSHkit-Github它说:Allbackendssupporttheexecute(*args),test(*args)&capture(*args)来自SSHkit-Rubydoc,我明白execute实际上是test的别名?test之间有什么区别?,execute,capture在Capistrano/SSHKit中我应该什么时候使用? 最佳答案 执行只是执行命令。使用非0退出引发错误。测试方法的行为与execute完全相同,但是它返回bool值(true如果命令以0退出,而false否则)。它通常用于控制任务中的流程

随机推荐