Redis命令交互模式
redis-cli是Redis命令行界面,可以向Redis发送命令,并直接从终端读取服务器发送的回复。
它有两种主要模式:一种交互模式,其中有一个REPL(read eval print loop),用户输入命令并获取回复; 另一种模式(非REPL)是将命令作为参数发送redis-cli
,执行并打印在标准输出中。 我们一般都是使用REPL模式。
如下 就是REPL模式
127.0.0.1:6379> set name jack OK 127.0.0.1:6379> get name "jack"
下面这个是非REPL模式
[root@localhost ~]# redis-cli -h 127.0.0.1 -p 6379 -a 123456 set name lucy -a 输入密码 OK [root@localhost ~]# redis-cli -h 127.0.0.1 -p 6379 -a 123456 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 3605:C 02 Nov 2019 09:28:50.673 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 3605:C 02 Nov 2019 09:28:50.673 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=3605, just started 3605:C 02 Nov 2019 09:28: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 3605:M 02 Nov 2019 09:28:50.674 * Increased maximum number of open files to 10032 (it was originally set to 2560). _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 5.0.5 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 3605 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 3605:M 02 Nov 2019 09:28:50.677 # Server initialized 3605:M 02 Nov 2019 09:28: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:6379> config get requirepass 1) "requirepass" 2) "redis_oatest"
3.连接到服务器(要先启动服务,上面的命令先执行)
[root@localhost ~]# redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> auth 123456 OK 127.0.0.1:6379>
查看redis信息
info命令可以显示redis服务器的许多信息,包括服务器基本信息、CPU、内存、持久化、客户端连接信息等等。
127.0.0.1:6379> 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:6379> 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:6379> info memory # Memory used_memory:1252952 used_memory_human:1.19M used_memory_rss:3846144 used_memory_rss_human:3.67M used_memory_peak:1395424 used_memory_peak_human:1.33M used_memory_peak_perc:89.79% used_memory_overhead:937866 used_memory_startup:786696 used_memory_dataset:315086 used_memory_dataset_perc:67.58% total_system_memory:2076532736 total_system_memory_human:1.93G used_memory_lua:37888 used_memory_lua_human:37.00K maxmemory:1073741824 maxmemory_human:1.00G maxmemory_policy:volatile-lru mem_fragmentation_ratio:3.07 mem_allocator:jemalloc-4.0.3 active_defrag_running:0 lazyfree_pending_objects:0
4.redis配置
Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf。可以通过上面info命令可以查看到 redis.conf路径。
redis提供了 CONFIG 命令查看或设置配置项
127.0.0.1:6379> CONFIG SET requirepass 111111 OK 127.0.0.1:6379> CONFIG get requirepass 1) "requirepass" 2) "111111"
不过这个命令不会真正改变redis.conf里的配置信息。因为 config set 命令可以对服务器的当前配置进行修改, 而修改后的配置可能和 redis.conf
文件中所描述的配置不一样,使用config rewrite可以将数据同步到配置文件中。
127.0.0.1:6379> CONFIG REWRITE OK
config rewrite的作用就是通过尽可能少的修改, 将服务器当前所使用的配置记录到 redis.conf
文件中。具体可以查看官网http://redisdoc.com/server/config_rewrite.html
对于使用config set 有点需要注意的是,当redis在运行的时候,有些值是不能修改的,比如databases,port,会出现下面错误提示
127.0.0.1:6379> config set port 6389 (error) ERR Unsupported CONFIG parameter: port 127.0.0.1:6379> CONFIG SET databases 17 (error) ERR Unsupported CONFIG parameter: databases
因为数据库的创建是在服务器启动时候读取配置创建,数量必须在启动服务器时指定,还有端口号也是,所有在服务器运行的过程中,尝试使用CONFIG SET去修改数据库的数量是不可行的。
config get * 可以获取所有配置信息
127.0.0.1:6379> CONFIG GET * 1) "dbfilename" 2) "dump.rdb" 3) "requirepass" 4) "123456" 5) "masterauth" 6) "" 7) "unixsocket" 8) "" 9) "logfile" 10) "" 11) "pidfile" 12) "/var/run/redis.pid" 13) "maxmemory" 14) "0" 15) "maxmemory-samples" 16) "5" 17) "timeout" 18) "0" 19) "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 6379 -a 123456 < /root/tmp/redis.txt OK OK
6.运行相同的命令N次
127.0.0.1:6379> get counter (nil) 127.0.0.1:6379> 10 incr counter (integer) 1 (integer) 2 (integer) 3 (integer) 4 (integer) 5 (integer) 6 (integer) 7 (integer) 8 (integer) 9 (integer) 10
7.判断客户端和服务器连接是否正常
127.0.0.1:6379> ping PONG
8.列出所有客户端连接
127.0.0.1:6379> CLIENT LIST id=240008 addr=192.168.90.66:48113 fd=6 name= age=6412669 idle=6412669 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get id=1175856 addr=127.0.0.1:34238 fd=7 name= age=11 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
9.删除某个键
127.0.0.1:6379> del Kyhome_feed_data_290 (integer) 1 127.0.0.1:6379> get Kyhome_feed_data_290 (nil)
10.批量删除多个键
[root@spark78-245 new_src]# redis-cli keys Kyhome_feed_data_* 1) "Kyhome_feed_data_546" 2) "Kyhome_feed_data_725" 3) "Kyhome_feed_data_303" 4) "Kyhome_feed_data_678" 5) "Kyhome_feed_data_545" 6) "Kyhome_feed_data_1040" 7) "Kyhome_feed_data_549" 8) "Kyhome_feed_data_544" 9) "Kyhome_feed_data_775" 10) "Kyhome_feed_data_389"
查询上面有这些键,然后退出当前redis环境在执行下面命令删除
[root@spark78-245 new_src]# redis-cli keys Kyhome_feed_data_* | xargs redis-cli del (integer) 155 [root@spark78-245 new_src]# redis-cli keys Kyhome_feed_data_* (empty list or set)
11.创建当前数据库的备份
redis 127.0.0.1:6379> CONFIG GET dir 先查看下redis目录 1) "dir" 2) "/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:6379> save save命令将在redis安装目录中创建dump.rdb文件 OK 执行后查看 目录中多了dump.rdb文件 [root@localhost ~]# ls -l /usr/local/redis/rdb_dir 总用量 40 -rw-r--r-- 1 root root 40103 6月 13 11:55 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