Redis命令交互模式

redis-cli是Redis命令行界面,可以向Redis发送命令,并直接从终端读取服务器发送的回复。

它有两种主要模式:一种交互模式,其中有一个REPL(read eval print loop),用户输入命令并获取回复; 另一种模式(非REPL)是将命令作为参数发送redis-cli,执行并打印在标准输出中。 我们一般都是使用REPL模式。

如下 就是REPL模式

127.0.0.1:> set name  jack
OK
127.0.0.1:> get name
"jack"

下面这个是非REPL模式

[root@localhost ~]# redis-cli -h 127.0.0.1 -p  -a  set name lucy    -a 输入密码
OK
[root@localhost ~]# redis-cli -h 127.0.0.1 -p -a get name
"lucy"

Redis字符串命令

  1.  SET key value :设置指定 key 的值,不管key是否存在都设置。可以设置value为普通字符串,json字符串,数字。value的大小限制为512M。
  2. GET key :获取指定 key 的值。

  3. DEL key :删除指定 key 的值。

  4. INCR key:将 key 中储存的数字值增一,如果key不存在,自增后key = 1。

  5. DECR key:将 key 中储存的数字值减一,如果key不存在,自减后key = -1。

  6. INCRBY key increment:将 key 所储存的值加上给定的增量值(increment)。

  7. DECRBY key decrement:将key 所储存的值减去给定的减量值(decrement) 。

  8. SETNX key value:和SET命令类似,只是SETNX要求key不存在的时候才能设置。

  9. SET key value XX:要求key存在的时候才能设置,相当于更新操作。

  10. MSET key value [key value ...]:同时设置一个或多个 key-value 对。

  11. MSETNX key value [key value ...] :同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

  12. MGET key1 [key2..] : 获取所有(一个或多个)给定 key 的值。MGET命令可以在需要获取多个key值时候一次性获取从而节省网络开销。下图分析。

    n次get命令获取需要多次网络传递。

  

  一次mget可以省去大量的网络传输时间

  

当然mget也不能一次性获取太多的key的,比如几十万个,这个也是会阻塞Redis的执行的。

  13. getset key newValue:设置key新值并返回旧的值。

  14. append key value:将新的value追加到旧的value上。

  15. strlen value:计算字符串长度(注意中文返回的长度)。

Redis哈希(Hash)命令 

 Redis hash命令和字符串命令也是键值对形式,不过和字符串不同,hash多了一个field,field可以认为是一个属性。hash其实就是是一个string 类型的field和value的映射表,hash特别适合用于存储对象,虽然Redis字符串也可以,但是需要序列化需要通过编程语言去解析(产生序列化开销),而hash更容易实现,直观和管理。如下图将一个用户信息存储在hash中。

  

  hash中的field不能相同。

  1. HGET key field :获取存储在哈希表中指定key对应field的value。

  2. HSET key field value :将哈希表 key 中的字段 field 的值设为 value 。

  3. HDEL key field1 [field2] :删除一个或多个哈希表key的field。

  4. HKEYS key :获取所有哈希表中的字段。

  5. HGETALL key :获取在哈希表中指定 key 的所有字段和值。

  6. HEXISTS key:判断key是否有field。

  7. HLEN key :获取哈希表key中field的个数。

   8. HMGET key field1 [field2] :获取所有给定字段的值。

  9. HINCRBY key field increment :为哈希表 key 中的指定字段的整数值加上增量 increment 。

  10. HVALS key :获取哈希表中key所有的field的值。

Redis列表(List)命令 

 Redis列表结构是简单的字符串列表,List的value是一个有序的队列,是按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边),而且列表是允许重复数据存在的。下图是列表的结构。

  

  List底层是一个链表结构。

  1.  LPUSH key value1 [value2] :从左边向列表添加一个或多个值。

   2. LPOP key :移出并获取列表的左边第一个元素。

   3. RPUSH key value1 [value2] :从右边向列表中添加一个或多个值。

   4. RPOP key :移除列表的最后一个元素,返回值为移除的元素。

   5. LLEN key: 获取列表长度。

   6. LINSERT key BEFORE | AFTER  value newValue:在列表的元素前或者后插入元素。时间复杂度O(n)。

   7. LREM key count value :因为列表运行存在相同的值,所以这里LREM命令可以根据count值来删除列表所有value相等的项。根据count值分下面几种情况:

    1)count > 0 :从左到右,删除最多count个value相等的项。

    2)count < 0 :从右到左,删除最多Math.abs(count)个value相等的项。

    3)count = 0 :删除所有value相等的项。

  8. LTRIM key start stop :按照索引范围对一个列表进行修剪(trim),让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

   9. LRANGE key start stop :获取列表指定范围内的元素。LRANGE复杂度是O(s+n),其中s为列表的表头或表尾到偏移量位置的元素个数,者取决于列表大小,n代表返回的元素总数。

   10. LINDEX key index :通过索引获取列表中的元素。

   11. LSET key index newValue:设置列表指定索引的值。

   12. BLPOP key1 [key2 ] timeout :移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止,timeout是阻塞超时时间,timeout = 0表示永远不阻塞。

   13. BRPOP key1 [key2 ] timeout :移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

Redis集合(SET)命令

  Redis 中的集合是String类型的无序集合。集合成员是唯一的,不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。集合中数据是无序的,所以是无法通过索引下标去查找。

一般集合可以用于微博中关注的共同好友这样的场景。

1. SADD key member1 [member2] :向集合添加一个或多个成员,如果成员存在则添加失败。

  2. SREM key member1 [member2] :删除集合中一个或多个成员。

  3. SMEMBERS key :返回集合中的所有成员,返回的结果是无序的,如果集合中数据很多该命令要慎重使用。

  4. SISMEMBER key member :判断 member 元素是否是集合 key 的成员。

  5. SINTER key1 [key2] :返回给定所有集合的交集。

  6. SUNION key1 [key2] :返回所有给定集合的并集。

  7. SCARD key :获取集合的成员数。

  8. SDIFF key1 [key2] :返回给定所有集合的差集。

  9. SRANDMEMBER key [count] :返回集合中一个或多个随机数,这个命令可以用在抽奖功能中。

  10. SPOP key :移除并返回集合中的一个随机元素。

  11. SDIFFSTORE destination key1 [key2] :返回给定所有集合的差集并存储在 destination 中。

  12. SINTERSTORE destination key1 [key2] :返回给定所有集合的交集并存储在 destination 中。

Redis有序集合(SORCETED SET)命令

  Redis 有序集合和集合一样也是string类型元素的集合,而且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数(就是下图中的score那一列)。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。下图是有序集合的结构。

     

   有序集合可以用于排行榜,比如图书排行榜。

    

     1. ZADD key score1 member1 [score2 member2] :向有序集合添加一个或多个成员,或者更新已存在成员的分数,分数可以重复的,该命令时间复杂度是O(logN)。

   2. ZSCORE key member :返回有序集中成员的分数值。

     3. ZREM key member [member ...] :移除有序集合中的一个或多个成员。

     4. ZRANK key member :返回有序集合中指定成员的索引。

   5. ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] :通过分数返回有序集合指定区间内的成员。

     6. ZINCRBY key increment member :有序集合中对指定成员的分数加上增量 increment。

   7. ZCARD key :获取有序集合的成员数。

     8. ZRANGE key start stop [WITHSCORES] :通过索引区间返回有序集合指定区间内的成员。ZRANGE key 0 -1 WITHSCORES 这个是返回集合中所有的成员及分数。

     9. ZCOUNT key min max :计算在有序集合中指定区间分数的成员数。

     10. ZREMRANGEBYRANK key start stop :移除有序集合中给定的排名区间的所有成员。

     11. ZREMRANGEBYSCORE key min max :移除有序集合中给定的分数区间的所有成员。

Redis常用基础命令

  1.启动redis

songguojundeMBP:server songguojun$ redis-server
:C Nov ::50.673 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
:C Nov ::50.673 # Redis version=5.0., bits=, commit=, modified=, pid=, just started
:C Nov ::50.673 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
:M Nov ::50.674 * Increased maximum number of open files to (it was originally set to ).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 5.0. (/) bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port:
| `-._ `._ / _.-' | PID: 3605
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-' :M Nov ::50.677 # Server initialized
:M Nov ::50.678 * Ready to accept connections

   2.查看Redis密码

      Redis密码是写在配置文件里的

[root@oa-dev /]# cat /opt/app/redis/etc/redis.conf | grep pass
# masterauth <master-password>
requirepass "redis_oatest"

也可以

127.0.0.1:> config get requirepass
) "requirepass"
) "redis_oatest"

3.连接到服务器(要先启动服务,上面的命令先执行)

[root@localhost ~]# redis-cli -h 127.0.0.1 -p
127.0.0.1:> auth
OK
127.0.0.1:>

查看redis信息

info命令可以显示redis服务器的许多信息,包括服务器基本信息、CPU、内存、持久化、客户端连接信息等等。

127.0.0.1:> info

这个命令返回关于使用情况

主要字段信息下面几个

字段 字段信息说明
redis_version redis服务器版本
process_id 服务器进程的 PID
tcp_port TCP/IP 监听端口
config_file  /usr/local/redis/redis.conf     配置文件路径
connected_clients 已连接客户端的数量
blocked_clients 正在等待阻塞命令
used_memory redis分配器分配的内存总量
aof_enabled AOF文件是否启用
total_connections_received 运行以来连接过的客户端的总数量
total_commands_processed 运行以来执行过的命令的总数量
keyspace_hits 命中key 的次数   这个参数比较重要
keyspace_misses 没命中key 的次数 这个参数比较重要
role:master 当前实例的角色master还是slave

有时候返回数据比较 只想查看某块的内容 比如查看cup的信息

1)查看cpu信息

127.0.0.1:> info CPU
# CPU
used_cpu_sys:33.53
used_cpu_user:13.33
used_cpu_sys_children:0.30
used_cpu_user_children:0.00

2)查看内存信息

127.0.0.1:> info memory
# Memory
used_memory:
used_memory_human:1.19M
used_memory_rss:
used_memory_rss_human:3.67M
used_memory_peak:
used_memory_peak_human:1.33M
used_memory_peak_perc:89.79%
used_memory_overhead:
used_memory_startup:
used_memory_dataset:
used_memory_dataset_perc:67.58%
total_system_memory:
total_system_memory_human:.93G
used_memory_lua:
used_memory_lua_human:.00K
maxmemory:
maxmemory_human:.00G
maxmemory_policy:volatile-lru
mem_fragmentation_ratio:3.07
mem_allocator:jemalloc-4.0.
active_defrag_running:
lazyfree_pending_objects:

4.redis配置

Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf。可以通过上面info命令可以查看到 redis.conf路径。

redis提供了 CONFIG 命令查看或设置配置项

127.0.0.1:> CONFIG  SET requirepass
OK
127.0.0.1:> CONFIG get requirepass
) "requirepass"
) ""

不过这个命令不会真正改变redis.conf里的配置信息。因为 config set 命令可以对服务器的当前配置进行修改, 而修改后的配置可能和 redis.conf 文件中所描述的配置不一样,使用config rewrite可以将数据同步到配置文件中。

127.0.0.1:> CONFIG REWRITE
OK

config rewrite的作用就是通过尽可能少的修改, 将服务器当前所使用的配置记录到 redis.conf 文件中。具体可以查看官网http://redisdoc.com/server/config_rewrite.html

对于使用config set 有点需要注意的是,当redis在运行的时候,有些值是不能修改的,比如databases,port,会出现下面错误提示

127.0.0.1:> config set port
(error) ERR Unsupported CONFIG parameter: port
127.0.0.1:> CONFIG SET databases
(error) ERR Unsupported CONFIG parameter: databases

因为数据库的创建是在服务器启动时候读取配置创建,数量必须在启动服务器时指定,还有端口号也是,所有在服务器运行的过程中,尝试使用CONFIG SET去修改数据库的数量是不可行的。

config get *   可以获取所有配置信息

127.0.0.1:> CONFIG GET *
) "dbfilename"
) "dump.rdb"
) "requirepass"
) ""
) "masterauth"
) ""
) "unixsocket"
) ""
) "logfile"
) ""
) "pidfile"
) "/var/run/redis.pid"
) "maxmemory"
) ""
) "maxmemory-samples"
) ""
) "timeout"
) ""
) "tcp-keepalive"
..........

5.从文件中导入命令

编辑redis.txt,所有的命令都被一个接一个的执行

[root@localhost tmp]# vim redis.txt
[root@localhost tmp]# cat redis.txt
set username cherry
set sex man
[root@localhost tmp]# redis-cli -h 127.0.0.1 -p -a < /root/tmp/redis.txt
OK
OK

6.运行相同的命令N次

127.0.0.1:> get counter
(nil)
127.0.0.1:> incr counter
(integer)
(integer)
(integer)
(integer)
(integer)
(integer)
(integer)
(integer)
(integer)
(integer)

7.判断客户端和服务器连接是否正常

127.0.0.1:> ping
PONG

8.列出所有客户端连接

127.0.0.1:> CLIENT LIST
id= addr=192.168.90.66: fd= name= age= idle= flags=N db= sub= psub= multi=- qbuf= qbuf-free= obl= oll= omem= events=r cmd=get
id= addr=127.0.0.1: fd= name= age= idle= flags=N db= sub= psub= multi=- qbuf= qbuf-free= obl= oll= omem= events=r cmd=client

9.删除某个键

127.0.0.1:> del Kyhome_feed_data_290
(integer)
127.0.0.1:> get Kyhome_feed_data_290
(nil)

10.批量删除多个键

[root@spark78- new_src]# redis-cli  keys Kyhome_feed_data_*
) "Kyhome_feed_data_546"
) "Kyhome_feed_data_725"
) "Kyhome_feed_data_303"
) "Kyhome_feed_data_678"
) "Kyhome_feed_data_545"
) "Kyhome_feed_data_1040"
) "Kyhome_feed_data_549"
) "Kyhome_feed_data_544"
) "Kyhome_feed_data_775"
) "Kyhome_feed_data_389"

  查询上面有这些键,然后退出当前redis环境在执行下面命令删除

[root@spark78- new_src]# redis-cli  keys Kyhome_feed_data_* | xargs redis-cli del
(integer)
[root@spark78- new_src]# redis-cli keys Kyhome_feed_data_*
(empty list or set)

11.创建当前数据库的备份

redis 127.0.0.1:> CONFIG GET dir              先查看下redis目录
) "dir"
) "/usr/local/redis/rdb_dir" 在查看目录中已经存在dump.rdb文件 并删除
[root@localhost ~]# ls /usr/local/redis/rdb_dir
dump.rdb
[root@localhost ~]# rm -f /usr/local/redis/rdb_dir/dump.rdb 执行save命令
redis 127.0.0.1:> save save命令将在redis安装目录中创建dump.rdb文件
OK
执行后查看 目录中多了dump.rdb文件
[root@localhost ~]# ls -l /usr/local/redis/rdb_dir
总用量
-rw-r--r-- root root 6月 : dump.rdb

12. Redis ping连通

redis-cli -h ip -p port ping

Redis常用操作

  1. 找到Redis配置文件路径

     Linux系统下使用全局搜索  find / -type f -name 'redis.conf'

    

Redis命令时间复杂度

命令 时间复杂度
keys  O(n)
dbsize  O(1)
del  O(1)
exists  O(1)
expire  O(1)
type  O(1)

Redis其他命令

  更多的命令使用可以查看这个地址http://doc.redisfans.com/

参考来源

  http://www.redis.cn/commands/set.html

  https://www.runoob.com/redis/redis-sorted-sets.html

【redis】redis常用命令及操作记录的更多相关文章

  1. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(九)Linux下安装redis及redis的常用命令和操作

    redis简介 Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis与其他key-value缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存 ...

  2. Jedis对Redis的常用命令操作

    本篇主要总结一些Jedis对Redis的常用命令操作: 1.对key操作命令 2.对String操作命令 3.对List操作命令 4.对Set操作命令 5.对Hash操作命令 6.排序操作指令 一.项 ...

  3. Linux下安装redis以及常用命令

    https://blog.csdn.net/zgf19930504/article/details/51850594 安装: 1.获取redis资源 wget http://download.redi ...

  4. Oracle手边常用命令及操作语句

    Oracle手边常用命令及操作语句 作者:白宁超 时间:2016年3月4日11:24:08 摘要:日常使用oracle数据库过程中,常用脚本命令莫不是用户和密码.表空间.多表联合.执行语句等常规操作. ...

  5. TP5常用命令符操作

    ThinkPHP5常用命令符操作   1. 模块自动生成指令:   默认会读取应用目录application下面的build.php作为自动   生成的定义文件,如果你的定义文件位置不同,则需要使用 ...

  6. Git 常用命令及操作总结

    Git常用命令及操作总结 By:授客 QQ:1033553122 利用TortoiseGit克隆源码库到本地 1.安装TortoiseGit 2.打开Git,进入到源码库,点击图示红色选框框选按钮,弹 ...

  7. git 常用命令行操作

    git常用命令行操作: 点击 git bash 进入到命令行: git clone https://github.com/wlz1244/qingoo.git   //下载一个master分支代码 g ...

  8. ZooKeeper常用命令行操作

    ZooKeeper常用命令行操作 通过./zkCli.sh 打开zk的客户端进入命令行后台 ls/ls2 列出当前节点下的子节点 ls2还会列出当前节点的状态 [zk: localhost:2181( ...

  9. Redis常用命令之操作String类型

    场景 Centos中Redis的下载编译与安装(超详细): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 Re ...

随机推荐

  1. MySQL 5.7 Reference Manual :: 4.5.4 mysqldump & mysql — Database Backup & Restore Program

    MySQL :: MySQL 5.7 Reference Manual :: 4.5.4 mysqldump — A Database Backup Programhttps://dev.mysql. ...

  2. php常用方法

    在日常开发中,经常我们使用系统方法或者是自己封装的方法进行项目的开发.再此总结一下!!! 一.对于字符串截取 1.使用mbstring扩展  (注意编码的设置) mb_substr($str,2,5, ...

  3. 1 Servlet 简介

    1 Servlet是sun公司提供的一门用于开发动态web资源的技术.用户若用Java技术开发一个动态web资源或者网页,需要完成以下2个步骤:① 编写一个Java类,实现servlet接口② 把开发 ...

  4. MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码) - 转载

    MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码) MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以设置UTF-8为例来说明. 需 ...

  5. 将表单数据转换为json代码分享

    <body> <form action="#" method="post" id="form1"> <inpu ...

  6. 简单谈谈数据库DML、DDL和DCL的区别

    一.DML DML(data manipulation language)数据操纵语言: 就是我们最经常用到的 SELECT.UPDATE.INSERT.DELETE. 主要用来对数据库的数据进行一些 ...

  7. ServiceLoader详解

    系统中用到了ServiceLoader,查了一下: ServiceLoader与ClassLoader是Java中2个即相互区别又相互联系的加载器.JVM利用ClassLoader将类载入内存,这是一 ...

  8. Spring注解标签详解@Autowired @Qualifier等 @Slf4j

    @Slf4j @Slf4j注解实现日志输出 自己写日志的时候,肯定需要: private final Logger logger = LoggerFactory.getLogger(LoggerTes ...

  9. 集合之ArrayList(含JDK1.8源码分析)

    一.ArrayList的数据结构 ArrayList底层的数据结构就是数组,数组元素类型为Object类型,即可以存放所有类型数据.我们对ArrayList类的实例的所有的操作(增删改查等),其底层都 ...

  10. Yii2的使用

    yii2的下载安装 使用下载好的文件配置高级模板,在配置文件配置好数据库和gii 在common模板配置db: 在backend模板配置gii: 配置nginx服务器访问backend和fronten ...