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不存在时才会被覆盖

二者区别:https://www.hxstrive.com/article/343.htm

迁移键(本地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.


行走在天地间自由的灵魂