1、连接Redis
# -h默认localhost
# -p默认6379
# -a可以不写,后续通过 auth pwd 完成认证
# --raw 解决中文乱码
redis-cli -h 101.37.245.17 -p 6379 -a pwd
# 测试连接是否成功:成功返回pong
ping
# 查看redis信息
info
2、查看redis内存使用情况
info memory
used_memory:13490096 //数据占用了多少内存(字节)
used_memory_human:12.87M //数据占用了多少内存(带单位的可读格式)
used_memory_rss:13490096 //redis占用了多少内存,这个值和 top 、 ps 等命令的输出一致。
used_memory_peak:15301192 //占用内存的峰值(字节)
used_memory_peak_human:14.59M //占用内存的峰值(带单位的可读格式)
used_memory_lua:31744 //lua引擎所占用的内存大小(字节)
mem_fragmentation_ratio:1.00 //内存碎片率,used_memory_rss 和 used_memory 之间的比率
mem_allocator:libc //redis内存分配器版本,在编译时指定的。有libc、jemalloc、tcmalloc这3种。
3、其他基本命令
3.1、redis默认有16个数据库,查看指令
config get databases
3.2、选择数据库
select 1
3.3、清空当前数据库
flushdb
3.4、清空所有数据库(0~15)
flushall
设置key:
set key value
mset key value [key value ...]
set key value [ex] [px] [nx|xx]
ex为键值设置秒级过期时间
px为键值设置毫秒级过期时间
nx键必须不存在,才可以设置成功,用于添加
xx与nx相反,键必须存在,才可以设置成功,用于更新
setnx、setex 与上面的nx、ex作用相同
举例:
set name kongxiangyun
mset name kongxiangyun age 12 gender male
set name kongxiangyun ex 200 --200秒后过期
setex name 200 kongxiangyun --200秒后过期
set name kong nx --设置失败,因为key=name已经存在
set age 13 nx --设置成功
set name kong xx --设置成功
set gender male xx --设置失败,因为key=gender不存在
获取值O(1)
get key
mget key [key ...]
不存在则返回nil
举例:
get name
mget name age gender
查看当前库中所有key:
keys *
1,查询所有的键,会遍历所有的键值,复杂度O(n)
2,正则匹配
- keys h?llo 匹配 hello,hallo等
- keys h*llo 匹配 hllo,heeeello等
- keys h[aw]llo 匹配hallo和hwllo
检查键是否存在
exists key
存在返回1,不存在返回0
删除键
del key [key...]
返回结果为成功删除键的个数
设置键过期(四种方式)
expire key seconds key在seconds秒后过期
expireat key timestamp 键在秒级时间戳timestamp后过期
pexpire key milliseconds key在milliseconds毫秒后过期
pexpireat key milliseconds-timestamp key在豪秒级时间戳timestamp后过期
ttl 命令可以查看键hello的剩余过期时间,单位:秒(>0剩余过期时间;-1没设置过期时间;-2键不存在)
pttl是毫秒
键的数据结构类型
type key
如果key是字符串类型,则返回string,如果key是hash类型,则返回hash;如果键不存在,则返回none
键重命名
rename key newkey
renamenx key newkey 只有newkey不存在时才会被覆盖
迁移键(本地redis迁移和跨redis迁移)
move key db_idx
(不建议再生产环境中使用)把指定的键从源数据库移动到目标数据库
dump + restore
dump key
Restore key ttl value
Dump+restore可以实现在不同的redis实例之间进行数据迁移的功能,整个迁移的过程分为两步;
1)在源redis上,dump命令会将键值序列化,格式采用的是RDB格式
2)在目标redis上,restore命令将上面序列化的值进行复原,其中ttl参数代表过期时间,ttl=0代表没有过期时间
例子:
源redis
192.168.225.129:6379> get redis
"world"
192.168.225.129:6379> dump redis
"\x00\x05world\a\x00\xe6\xe3\xe9w\xd8c\xa7\xd8"
目标redis
192.168.225.128:6379> get redis
(nil)
192.168.225.128:6379> restore redis 0 "\x00\x05world\a\x00\xe6\xe3\xe9w\xd8c\xa7\xd8"
OK
192.168.225.128:6379> get redis
"world"
migrate
migrate实际上是吧dump、restore、del 3个命令进行组合,从而简化了操作步骤。Migrate host port key [ key ......] destination-db timeout [replace]源redis中执行192.168.225.129:6379> migrate 192.168.225.128 6379 flower 0 1000 replace(将键flower迁移至目标192.168.225.128:6379的库0中,超时时间为1000毫秒,replace表示目标库如果存在键flower,则覆盖)
遍历键
(1)全量遍历键
keys pattern例如:keys h , keys [r,l]edis ,keys 等等
(2)渐进式遍历
scan 它可以有效的解决keys命令存在的阻塞问题,scan每次的额复杂度是O(1)
sacn说明:https://zhuanlan.zhihu.com/p/46353221
计数O(1)
incr key / incrby key incrementdecr key /decrby key increment
返回结果分为3中情况:
值不是整数,返回错误;
值是整数,返回自增后的结果;
键不存在,按照值为0自增,返回结果为1
举例:
set age 20
incr age --age=21
decr age --age=20
incrby age 20 --age=40
decrby age 30 --age=10
追加值O(1)
append key value_appender
可以向字符串尾部追加值
举例:
set name kong
append name xiangyun --name=kongxiangyun
字符串长度O(1)
strlen key
每个汉字占用3个字字节
设置并返回原值O(1)
getset key value
举例:
set name kong
getset name kongxiangyun --name=kongxiangyun 返回:kong
设置指定位置的字符O(n),n是字符串长度
setrange key offeset value
举例:
set name kongxiangyun
setrange name 0 i --name=iongxiangyun
获取部分字符串
getrange key start end
start和end分别为开始和结束的偏移量,偏移量从0开始
举例:
set name kongxiangyun
getrange name 0 5 --返回kongxi
连接:https://segmentfault.com/a/1190000010999677
Q.E.D.