第二课补充01——redis-cli命令行详解、string类型、list类型、hash类型命令操作详解

一、 redis-cli命令行参数

1、-x参数:从标准输入读取一个参数:

【问题】

【解决】

因为echo命令是默认带有回车\n的,不带回车需要echo –n命令:

echo -n "haha"|redis-cli -x set name,从标准输入读入一个参数到redis,就不会有回车符;

2、-r参数:重复执行一个命令指定的次数; -i参数:设置命令执行的间隔;

例子:每隔1秒执行一次,一共执行3次info命令

3、-rdb文件:获取指定redis实例的rdb文件,保存到本地

可以利用这个办法,将远程其他redis服务器的rdb文件,集中保存到一个地方

4、--scan和pattern参数:用scan命令扫描redis中的key,pattern选择指定扫描的key的pattern,相比key pattern模式,scan命令不会长时间阻塞redis而导致其他客户端的命名请求一直处于阻塞状态;

(1)scan命令:SCAN   c u r s o r   [MATCH p a t t e r n]   [COUNT c o u n t]

即用法:

scan <游标值> ##遍历,默认返回key个数

scan <游标值>  <match [pattern]>  ##匹配模式

scan <游标值>   <count [count]>##自定义返回key个数

scan <游标值>  <match [pattern]> <count [count]>##匹配模式,自定义返回key个数

SCAN命令是一个基于游标的迭代器。这意味着命令每次被调用都需要使用上一次这个调用返回的游标作为该次调用的游标参数,以此来延续之前的迭代过程

当SCAN命令的游标参数被设置为 0 时, 服务器将开始一次新的迭代, 而当服务器向用户返回值为 0 的游标时, 表示迭代已结束;

SCAN命令的返回值 是一个包含两个元素的数组, 第一个数组元素是用于进行下一次迭代的新游标, 而第二个数组元素则是一个数组, 这个数组中包含了所有被迭代的元素。

在第二次调用 SCAN 命令时, 命令返回了游标 0 , 这表示迭代已经结束, 整个数据集已经被完整遍历过了;

(2)scan <pattern>命令和keys <pattern>命令功能一样,都是查看key的,但是scan命令相比keys命令,不会长时间阻塞;

或者

5、-s参数:客户端和服务器端在同一个机器,可以通过socket方式连接;

Socket方式连接,不用出网卡,类似于进程间通信,性能更高;

 

6、--stat参数:获取redis的诊断数据

 

7、-pipe参数:发送原始的redis protoc格式数据到服务器端执行,要对redis的传输协议了解

(1)

【总结】

*3\r\n$3\r\nset\r\n$3\r\nkey\r\n$5\r\nvalue\r\n  这串字符,就是键值key:value在redis的rdb文件里存储的格式

(2)以redis protoc格式数据,将键值name:chenjing保存到redis里

*3\r\n$3\r\nset\r\n$4\r\nname\r\n$8\r\nchenjing\r\n

set name chenjing

*3表示一共3个参数;

\r\n表示空格;

$3表示参数的字节数,例如set是3个字母,set命令前先标记$3;

8、--bigkeys参数:对redis中key采样(调用scan命令),寻找较大的keys,给出数据统计

9、--latency参数:可以获取到命令的请求时间,包括min max  avg

二、数据结构基础

1、

(1)redis本身实现叫做字典,实质也是hash;

(2)string类型,包括文本字符串、数值(整数、浮点数)有符号的64位、二进制格式的数据等三种;

(3)list类型,就是链表;

(4)set类型,和java的set类型一样;

(5)hash类型,和java里的hash table类型;

(6)zset类型,有序的集合;

 

2、string类型相关命令:

(1)set命令

(2)get命令:返回键值;

(3)mget命令:

(4)mset命令:

(5)msetnx命令:

(6)append命令:实现字符串的拼接

(7)incr命令:对数字自增1

(8)decr命令:自减1命令

(9)incrby命令:自定义,自增的数值

(10)decrby命令:自定义,自减的数值

(11)incrbyfloat命令:对浮点数的自增

###需要注意,redis里对浮点数计算的命令,就一个incrbyfloat命令,没有decrbyfloat命令,浮点数的自减操作,可以通过incrbyfloat 一个负数来实现

 

(12)getset命令:设置新值的同时,把旧值返回给调用者

(13)strlen命令:返回key对应的value的长度

(14)getrange命令:返回字符串类型值的子串

###注释信息有误!getrange <key> start end,其中start从0开始

(15)getbit命令:获取字符串类型指定位置的二进制位的值

(16)setbit命令:设置字符串类型指定位置的二进制的值,返回值是该位置的旧值

(17)bitcount命令:获得字符串类型中值是1的二进制位个数

2、LIST类型相关命令

使用场景:微博评论、秒杀功能

(1)lpush命令: 向list插入元素

(2)lpop命令:

###lpop命令,left,是从左边移除;如果是lpush+lpop,这样的操作就是堆栈(先进后出)

 

(3)blpop命令:

###b是block,阻塞的意思

(4)llen命令:返回对应key的list中值的数量

(5)rpoplpush命令:

(5.1) name列表有元素:name2 name1;

number列表有元素:number2 number1

(5.2)将name列表的尾部元素移除,并加到number列表的头部

(5.3)可以看到,name列表的元素少了一个,number列表的元素多了一个

(5.4)查看number列表的头部元素是否是name1

 

(6)lindex命令:返回key指定的list中位置为index的值

(7)linsert命令:把value的值插入key对应的list中去

(8)lrange命令:返回一个区间的值,从list的头(左)到尾(右)

###可以用lindex命令,通过指定list中元素所在index来查看元素值,

也可以用lrange命令,指定index范围,同时查看list中多个元素

(9)lrem命令:删除值等于value的count个元素

(10)ltrim命令:对key指定的list进行裁剪,提取子集

(11)lset命令:修改key对应的list中,位置为index的元素的值为value

  

 

3、keys相关操作:

(1)del命令:删除指定的key

(2)dump命令:按照rdb的存储格式把指定的key的值序列化并返回客户端。此序列化值U币包含ttl信息

(3)restore命令:把通过dump命令序列化的值再存进去。

(3)restore命令:把通过dump命令序列化的值再存进去

###如果restore命令好的key是已存在的,需要加replace

(4)exists命令:判断key是否存在,粗过存在返回值1

(5)expire命令:设置key的超时时间,单位是秒

(6)expireat命令:设置key的超时时间,设置的是精确时间

(7)keys命令:返回符合pattern模式的所有key,该操作会阻塞影响性能

(8)scan命令:基于游标方式返回当前数据库的key,因为每次返回的数据不多,因此不会阻塞服务器

4、hash类型数据的命令操作:

(1)hset命令:定义hash类型的成员元素值

(2)hmset命令:和hset类似,但是一次设置多个值

(3)hsetnx命令:如果元素不存在则设置值

 

(4)hkey命令:获取key对应的hashmap里所有field

##hget命令:是获取key对应的hashmap里所有value

##hgetall命令:是获取key对应的hashmap里所有field-value

(5)hget命令:获取key对应的hashmap中某个field的值

(6)hmget命令:获取key对应的hashmap中指定的多个filed的值

(7)hval命令:获取key对应的hashmap中所有filed的值

(8)hstrlen命令:返回filed对应的值的长度  ##这个hstrlen命令在redis3.0测试,不支持

(9)hdel命令:删除key对应的hashmap里指定field,可以原子性删除多个field

(10)hexists命令:判断key对应的hashmap里指定的field是否存在,存在返回1

(11)hgetall命令:返回key对应的hashmap里所有的field-value对

来自为知笔记(Wiz)

时间: 2024-10-08 05:23:54

第二课补充01——redis-cli命令行详解、string类型、list类型、hash类型命令操作详解的相关文章

MAC - 命令行中用sublime打开指定文件,使用ln命令建立软链接

目前sublime是mac下最好的文本编辑软件,经常要使用它打开一些文件,例如html,js,txt,json等文件,但是sublime2默认不支持在命令行下调用,经过研究发现可以用建立软连接的方式调用,同样原因应该可以用到mac下其它不支持命令行的软件 系统版本:10.9.4 可以使用 open -a /Applications/Sublime\ Text\ 2.app composer.json 但是每次这样输太麻烦,可以用建立软连接的方式调用 ln -s /Applications/Sub

第六课补充01——主从复制原理,哨兵机制

[主从复制] 一. redis的复制 ## redis2.8版本后的复制机制,是采用增量复制的 ##复制过程:同步(全量or增量)——命令传播 1.同步流程: 2.全量同步过程: 3.增量同步过程: [哨兵机制] 简介 sentinel是redis高可用的解决方案,sentinel系统(N个sentinel实例,N >= 1)可以监视一个或者多个redis master服务,以及这些master服务的所有从服务:当某个master服务下线时,自动将该master下的某个从服务升级为master服

在当前命令行下启动tomcat并让日志在当前命令行中输出

tomcat的startup脚本会在后台启动tomcat,无法在当前命令行中输出日志,在linux下这样debug会有点不方便: 解决办法: 本来是调用startup.sh启动tomcat,改为调用catalina.sh 并传递一个参数 run ./catalina.sh run 就可以了

第三课补充01——set类型 sorted类型命令操作详解,redis管道及事务

1. set类型的命令操作: (1)sadd命令:向key指定的set集合添加成员 ##sadd命令:是设置set集合类型的数据,sadd  <key> <mumber> [<mumber>] ##<key>不存在的时候,sadd命令创建key并向集合添加成员: ##注意,成员之间空格分隔,如果用逗号,则表示是同一个成员 ##set集合里,member是不重复的 (2)smove命令:是原子操作,将指定的member从source移动到desitinatio

第五课补充01——持久化

1. 多数据库,默认16个库:默认在0库: 2. 2种持久化机制:rdb(快照模式).aof(日志模式) (1) rdb持久化,2种方式:手动命令save和后台save 手动命令save会阻塞客户端的进程请求,直到save执行完成,因为redis本身是单线程的执行方式: bgsave方式保存,是fork一个子进程来执行数据保存, fork出的子进程进行bgsave的同时,父进程继续处理客户端的新请求,因此就涉及到新数据同步问题:父进程和子进程之间通过copy on write机制进行数据同步(主

第四课补充01——数据库系统的立体视图

数据库系统架构 一.数据库系统的分类:面向对象型.关系型.对象关系型 1.面向对象型数据库(OODBS) (1)面向对象型数据库系统是一种持久的.可共享对象库的存储器和管理器:是基于OO的思想,因此这类数据库也有封装.类.类层次等概念 (2)目前流行的开源面向对象数据库:DB4O 2.关系型数据库(RDBMS) (1)关系型数据库基于表的特性,方便用户使用查询语言SQL进行增删改查,目前流行的主流开源产品是MySQL 3.对象关系型数据库 (1)这个概念里保留了关系型数据库的结构,但允许关系表里

Linux命令行中排版格式的一个好用的命令

1.需求场景 在输入Linux命令的时候,想要字符界面显示类似于表格一样的排版. 2.语法说明 用法: column [选项] [文件 ...] 选项: -c, --columns <宽度> 输出宽度(字符数) -t, --table 创建表格 -s, --separator <字符串> 可用的表格分隔符 -o, --output-separator <字符串> 表格输出列分隔符,默认为两个空格 -x, --fillrows 先填充行,再填充列 -h, --help 显

安装完Hadoop之后,命令行输入hadoop或hdfs却找不到命令的解决方法

大多数原因是没有配置环境变量 解决方法 1. cd /etc/profile 2. 把这三条加到proflie文件的最后 export JAVA_HOME=XXXX(在安装了jdk的前提下,echo $JAVA_HOME可以查看得到) export HADOOP_HOME=XXX(hadoop的安装路径) export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH 3.完成后保存文件, 更新环境变量 4. source /etc/profile 最后,

《Linux命令行与shell脚本编程大全》第二十二章 gawk进阶

gawk是一门功能丰富的编程语言,你可以通过它所提供的各种特性来编写好几程序处理数据. 22.1 使用变量 gawk编程语言支持两种不同类型的变量: 内建变量和自定义变量 22.1.1 内建变量 gawk程序使用内建变量来引用程序数据里的一些特殊功能 1.字段和记录分隔符变量 数据字段变量:允许你使用美元符和字段在该记录中的位置值来引用记录对应的字段. 要引用第一个字段就用变量$1,第二个就用$2,-.以此类推. 数据字段是由分隔符来划定的.默认字段分隔符是一个空白字符,也就是空格或者制表符.