Redis常用命令操作
编辑redis系统级基础命令
info 查看系统信息
可以使用 info ${关注的信息}
来查看当前redis服务的某一方面的信息
# Server
redis_version:3.2.100
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:dd26f1f93c5130ee
redis_mode:standalone
os:Windows
arch_bits:64
multiplexing_api:WinSock_IOCP
process_id:17004 //进程ID
run_id:4504fcef813ee822421b3cf38c73aa72a45509b4
tcp_port:6379
uptime_in_seconds:1320
uptime_in_days:0
hz:10
lru_clock:12587164
executable:D:\Program Files\Redis\redis-server.exe
config_file:D:\Program Files\Redis\redis.windows.conf
# Clients
connected_clients:2
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:711320
used_memory_human:694.65K
used_memory_rss:673408
used_memory_rss_human:657.63K
used_memory_peak:787128
used_memory_peak_human:768.68K
total_system_memory:0
total_system_memory_human:0B
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:0.95
mem_allocator:jemalloc-3.6.0
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1556090947
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
# Stats
total_connections_received:2
total_commands_processed:14
instantaneous_ops_per_sec:0
total_net_input_bytes:338
total_net_output_bytes:11756156
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:4
keyspace_misses:2
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:6335
migrate_cached_sockets:0
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU
used_cpu_sys:0.16
used_cpu_user:0.08
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
# Cluster
cluster_enabled:0
# Keyspace 当前redis实例的数据库空间
db0:keys=2,expires=0,avg_ttl=0 //redis启动默认使用第0个空间
配置文件中databases 16
代表有16个数据空间(0-15) ,可以使用 select [dbid]
切换空间;通常可以用于测试环境和生产环境的切换
127.0.0.1:6379> set a c
OK
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get a
(nil)
-
select [dbid]
切换到指定的数据库 -
flushdb
清除当前数据空间(database),慎用 -
flushall
清除所有的数据空间 -
ping
测试连接是否正常 -
keys *
显示当前数据空间下所有的键 -
dbsize
显示当前数据空间下的键值对个数 -
save
redis持久化命令 -
quit
退出client连接 -
monitor
日志监控命令
Redis键命令
set [key] [value]
设置键值对,返回OK显示设置成功
del [key]
删除键值对,
(integer) 1
返回受影响的条数,删除不存在的键返回0
-
keys *
显示所有的键 -
如果为空显示
(empty list or set)
-
exists [key]
查看键是否存在 -
expire [key] [time]
设置key的有效期;可以用于session的有效期 -
expire a 10 设置a的有效期是10秒
-
ttl [key]
查看key的过期时间 -
(integer) -1
返回-1代表key没有过期时间 -
正数表示剩余的有效时间
-
(integer) -2
返回-2代表key不存在 -
type [key]
查看key的类型,若是做动态数据类型的话,可以根据key的类型决定怎么取值 -
key不存在返回none,存在则返回key的类型
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> type a
string
127.0.0.1:6379> hset hash name tom
(integer) 1
127.0.0.1:6379> type hash
hash
127.0.0.1:6379> type name
none
127.0.0.1:6379> keys *
1) "a"
2) "b"
3) "hash"
-
randomkey
随机返回一个已经存在的key -
rename [old_key] [new_key]
将key 重命名,不会直接校验是否存在 -
若是key不存在则直接将key更名
-
若是key已经存在则清除已存在的key,则直接将存在的key对应的值覆盖掉
127.0.0.1:6379> keys *
1) "c"
2) "a"
3) "b"
4) "hash"
127.0.0.1:6379> rename c d //key不存在的话,直接将当前的值赋值给新key,然后删除
OK
127.0.0.1:6379> keys *
1) "b"
2) "a"
3) "hash"
4) "d"
127.0.0.1:6379> get d
"c"
127.0.0.1:6379> rename b d //key已经存在的情况下,删除当前key,将key对应的值赋值给更名的key
OK
127.0.0.1:6379> get d
"b"
以 nx 结尾的命令一般比较特殊,会有包含判断的逻辑
renamenx [old key] [new key]
将key进行更名,若是新的key不存在
127.0.0.1:6379> renamenx a b
(integer) 0
127.0.0.1:6379> get a
"a"
127.0.0.1:6379> renamenx a m
(integer) 1
127.0.0.1:6379> get a
(nil)
127.0.0.1:6379> get m
"a"
redis数据结构之字符串结构(String)
-
set [key] [value]
设置键值对,实际就是使用的字符串结构 -
setex [key] [time] [value]
ex 是expire的缩写,可以设置有效期 -
setex c 100 c
设置c的值是c,有效期是100秒 -
psetex [key] [time] [value]
可以设置有效期 ,时间单位是毫秒 例如:psetex d 10000 d
设置d的值是d,有效期是10秒
setrange [key] [index] [appendStr]
提供「变量名称」以及开始位置和目标子串,如果key不存在则创建,字符串不足长度 用不可见字符填充补足长度
getrange key start_index end_index
返回某个值的截取的范围,两边都是取闭区间
append [key] [appendStr]
追加字符串,返回追加之后的长度 例:append a hello
将 字符串hello
追加到key为a的值后面
127.0.0.1:6379> set name myname
OK
127.0.0.1:6379> getrange name 0 2
"myn"
-
getset key value
先get再set,也就是返回前一个值,在设置新的值 -
set 命令只会返回成功(OK)和失败
-
mset key1 value1 key2 value2 key3 value3
同时设置多个key和value -
mget key1 key2 key3
同时获取多个value
//mget 对应mset
127.0.0.1:6379> mset a a b b c c
OK
127.0.0.1:6379> mget a b c
1) "a"
2) "b"
3) "c"
-
setnx key value
类似于set命令,但是会进行逻辑判断,只有当key不存在的时候才会set,不然无法设置值 -
strlen key
查看某个字符串的长度 -
msetnx key1 value1 key2 value2 ...
批量设置值,但是会判断值是否存在,只有不存在才会设置 -
返回0 代表设置失败(全部失败,有点事务的感觉),有事务的原子性,要么全部成功要么全部失败
-
返回1 代表设置成功
-
set key init-num
设置一个数字类型的初始值, -
incr key
让一个数字加1 ,相当于incrby key 1
-
若是key存在,那么key对应的值必须是数字,不然会出现错误
(error) ERR value is not an integer or out of range
-
直接执行
incr key
若是key不存在,则会创建一个值从1开始的键值对 -
incrby key num
让一个值为数字的key增加固定的值 例 :incrby num 100
: 让key为num的值增加100 -
decr key
让一个值为数字的key减少1 ,和incr
对应,若是不存在,直接创建从-1开始,若是存在且是数字,直接在原有基础上减一 -
decrby key num
让一个值为数字的key减少固定的值
以上数字操作都会返回操作之后的结果
127.0.0.1:6379> incr A //若是key不存在,则创建一个key为A值为1的键值对
(integer) 1
127.0.0.1:6379> get A
"1"
127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
127.0.0.1:6379> get num
"3"
127.0.0.1:6379> incrby num 100 //让key为num的值增加100
(integer) 103
127.0.0.1:6379> decr num
(integer) 102
127.0.0.1:6379> decr f
(integer) -1
127.0.0.1:6379> decr f
(integer) -2
127.0.0.1:6379> decrby num 10
(integer) 92
redis数据结构之 哈希(hash)
-
hset hash-name key value
为hash赋值,不存在则创建 -
hexists hash-name key
判断hash中的某个键值是否存在 -
hget hash-name key
获取hash中某个key对应的值,若是不存在返回nil
-
hgetall hash-name
获取hash中的所有的key-value -
hkeys hash-name
获取hash中所有的key -
hvals hash-name
获取hash中所有的value -
hlen hash-name
获取键值对的个数,其实也是key的个数 -
hmget hash-name key1 key2 ...
获取hash中的多个key对应的值 -
hmset hash-name key1 value1 key2 value2...
一次设置多个键值对给hash -
hdel hash-name key1 key2...
删除指定hash中key-value -
hsetnx hash-name key value
在指定hash表中如果键不存在,将键值对插入hash集合,,添加成功返回1 失败返回0
计数器 hash结构还可以当成计数器来使用,对于内部的每一个key都可以作为独立的计数器。如果value值不是整数,调用hincrby指令会出错。
hincrby books java 2
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> hset map name zhang
(integer) 1
127.0.0.1:6379[1]> keys *
1) "map"
127.0.0.1:6379[1]> type map //查看key对应的值类型
hash
127.0.0.1:6379[1]> hexists map name //查看hash是否存在,存在返回1,不存在返回0
(integer) 1
127.0.0.1:6379[1]> hexists map name1 //不存在则返回0
(integer) 0
127.0.0.1:6379[1]> keys *
1) "map"
127.0.0.1:6379[1]> hget map name //获取hash集合中key为name的值
"zhang"
127.0.0.1:6379[1]> hlen map //获取hash长度
(integer) 2
127.0.0.1:6379[1]> hmget map name age //获取name和age对应的值
1) "zhang"
2) "15"
127.0.0.1:6379[1]> hmset map email az450024285@qq.com sex boy
OK
127.0.0.1:6379[1]> hgetall map
1) "name"
2) "zhang"
3) "age"
4) "15"
5) "email"
6) "az450024285@qq.com"
7) "sex"
8) "boy"
127.0.0.1:6379[1]> hlen map
(integer) 4
127.0.0.1:6379[1]> hdel map sex
(integer) 1
127.0.0.1:6379[1]> hsetnx map name lisi //判断存在与否,添加hash键值对;
(integer) 0
127.0.0.1:6379[1]> hsetnx map addr hubei
(integer) 1
Redis数据结构之链表(List)
-
类似于Java的list,允许重复值,
队列/堆栈
链表可以从表头和表尾追加和移除元素,结合使用rpush/rpop/lpush/lpop
四条指令,可以将链表作为队列或堆栈使用,左向右向进行都可以 -
lpush list-name value1 value2 value3...
将元素赋值给list,如果list不存在则创建,注意这里是以队列的方式放入,左边先入右边先出 -
llen list-name
查看集合的长度 -
lrange list-name 0 2
获取集合范围的值,两边都是闭区间,但是这个设定的范围可以比实际的范围区间大 -
lset list-name index value
设置指定索引位置的值, 必须要在list范围内,不然(error) ERR index out of range
-
lindex list-name index
获取指定索引位置的元素 -
lpop list-name
移除列表第一个元素 -
rpop list-name
移除列表最后一个元素
-
linsert books before java ruby
对books执行插入操作,在Java元素前面一个位置插入ruby -
删除元素
lrem ireader 1 java
列表的删除操作也不是通过指定下标来确定元素的,你需要指定删除的最大个数以及元素的值
在日常使用中链表常常作为异步队列使用
select 2
127.0.0.1:6379[2]> lpush list 1 2 3 4 5 6
(integer) 6
127.0.0.1:6379[2]> keys *
1) "list"
127.0.0.1:6379[2]> type list
list
127.0.0.1:6379[2]> llen list
(integer) 6
127.0.0.1:6379[2]> lrange list 0 2
1) "6"
2) "5"
3) "4"
127.0.0.1:6379[2]> lindex list 5
"1"
redis数据结构之set集合
- set是无序的集合,可以排除重复
select 3 切换数据空间
-
sadd set-name value1 value2 value3...
添加元素到set, -
如果不存在集合则创建
-
如果存在元素则不会再次添加返回0
-
scard set-name
返回set集合元素的数量 -
smembers set-name
返回集合元素的成员 -
sdiff set1 set2
差集合并,相当于set1-set2,返回set2中没有的元素 -
sinter set1 set2
交集合并 ,返回set1,set2中都有的元素 -
sunion set1 set2
合并两个集合,并且去重 -
srandmember set-name num
返回某个set集合中的一个或者多个随机元素 -
sismember set-name value
判断某个元素是否在集合中,返回1表示在集合中,返回0表示不在集合中 -
srem set-name value1 value2...
移除某个集合中的一个或者多个成员 -
spop set-name
移除一个随机元素 ,并且返回这个元素(被移除的) -
适用于高并发的情况,移除并且返回一个元素,例如对订单号的预存,生成不会重复的的订单号,存入,客户端直接取用即可
127.0.0.1:6379[3]> sadd set a b c d
(integer) 4
127.0.0.1:6379[3]> keys *
1) "set"
127.0.0.1:6379[3]> type set
set
127.0.0.1:6379[3]> sadd set a
(integer) 0
127.0.0.1:6379[3]>
127.0.0.1:6379[3]> scard set
(integer) 4
redis数据结构之有序集合(sortedset)
-
具备集合set的特性,添加删除查找的时间复杂度都是O(1),也是通过hash表实现的,但是可以保证有序
-
zadd sortedset-name 100 a 200 b 300 c
添加元素到有序集合中,若是集合不存在则会创建 -
相当于指定一个优先级,按照这个优先级进行排序,按照分数从小到大进行排序
-
zcard sortedset-name
返回元素个数 -
zscore sortedset-name a
返回元素的优先级,也就是元素的分数,不存在的元素返回nil
-
zcount sortedset-name score1 score2
返回某一个分数区间的元素个数,分数区间为闭合区间 -
zrank sortedset-name value
返回某一个元素在集合中的索引(也就是排序,位于集合中的第几个元素)
这里注意索引和分数的区别,改变分数会影响排序
zincrby sortedset-name add-score-num value
将某个元素的分数提高add-score-num,返回提高后的分数,会影响到元素的索引和排序
- zincrby sortedset 1000 a 将有序集合中的a元素的分数提升1000
- zrank sortedset a 查看a元素当前的索引位置
-
zrange sortedset-name start end
返回某个范围内的所有元素,范围可以比实际的范围大 -
zrange sortedset 0 99 返回sortedset中的前一百个元素 ,两边都是闭区间
-
zrange sortedset-name start end withscores
返回某个范围内的全部元素和元素的分数
小确幸
每一丝灵感都值得被记录,每一笔记录都是成长,每一点成长都值得欢呼
博主个人站: www.imisty.cn
CSDN博客: https://blog.csdn.net/lookinthefog
博客园 :https://imist.cnblogs.com/
希望能够认识一些热爱技术的小伙伴,欢迎友链接哟
- 0
- 0
-
分享