1.Rdis连接
#客户端连接redis
redis-cli -h hostname -p 端口 #连接服务端
$ redis-cli -h 127.0.0.1 -p 8080
127.0.0.1:8080>
#redis 信息查询 info
127.0.0.1:8080> info #会列出redis 对应模块属性信息(就是下面的,基本上单词本意,请自行翻译)
#Server,Clients,Memory,Persistence,Stats,Replication,CPU,Cluster,Keyspace
127.0.0.1:8080> info Server #后面接具体模块名就列出某个模块的属性
2.Redis 备份
#rdb方式备份
127.0.0.1:8080> bgsave #触发RDB备份(全备),不建议使用save触发备份
127.0.0.1:8080> config get dir #列出备份文件目录,在配置文件里面也有定义
1) "dir"
2) "/data/redis"
$ ll /data/redis/dump-8080.rdb #这就是我备份的redis文件
-rw-r--r-- 1 root root 76 11月 9 16:39 /data/redis/dump-8080.rdb
##怎么开启rdb备份?
$ vim /opt/app/redis/etc/redis-8080.conf #只要使用下面内容就代表开启RDB备份(默认是开启的)
save 900 1
save 300 10
save 60 10000
##怎么设置rdb备份文件名及目录了?
$ vim /opt/app/redis/etc/redis-8080.conf
dbfilename dump-8080.rdb #后面那个是备份名,您根据自己想法去改,建议跟你配置文件名一样,便于区分
dir /data/redis #后面是备份目录,支持自定义
##RDB备份还原(接下来就到很重要的备份还原环节,备份如果不能被还原,那备份作甚)
$ vim /opt/app/redis/etc/redis-8080.conf #首先关闭aof备份
appendonly no #将值改no即可关闭aof,备份恢复默认优先恢复aof备份
127.0.0.1:8080> shutdown #关闭redis
not connected> exit #退出
$ cp dump-8080.rdb /data/redis/ #将你的备份复制到Redis数据目录下
$ redis-server /opt/app/redis/etc/redis-8080.conf #重新启动redis,就可以进行数据恢复了,然后把appendonly no值改为yes(前提是你的服务在用这种方式备份)
#aof方式备份
$ vim /opt/app/redis/etc/redis-8080.conf
appendonly yes #开启aof功能,
appendfilename "appendonly-8080.aof" #指定aof文件备份
127.0.0.1:8080> shutdown #关闭redis
not connected> exit #退出
$ cp appendonly-8080.aof /data/redis/ #放到redis数据目录下
$ redis-server /opt/app/redis/etc/redis-8080.conf #重启redis即可
3.Redis key操作
3.1 综合操作
//列出所有的key
keys * #会将当前库下的所有key都列出(但是没有区分数据类型的,* 代表所有字符,?代表单个字符 )
例如:
127.0.0.1:6379> keys *
1) "user3"
2) "user1"
3) "user2"
4) "stu1"
//列出以某个开头的key
keys user*
例如:
127.0.0.1:6379> keys user*
1) "user3"
2) "user1"
3) "user2"
//数据库切换,redis默认是有16个数据库,即0-15,我们登录Redis之后默认是在第0个数据库进操作
select 数据库编号
例如:
select 1 #切换到1数据库了(也就是第二个数据库),同时客户端展示为 127.0.0.1:6379[1]>
//查询数据库有多少key-value
dbsize #默认是查询当前数据下有多少key,值为 (integer) 1 代表存在1个key-value,0为没有键值对,如果查询其它数据库则需要先切换数据库才行
//清空数据库key,分 flushdb 和 flushall ,前者是清除当前数据库的所有key/value,后者是清除所有数据库的key/value
flushdb
flushalll
注:这2个命令有点危险,尽量在配置文件中把它禁用或者改名,禁用:rename-command FLUSHDB "" 改名:rename-command FLUSHDB "ce-flushdb"
//查询key是否存在
exists key
例如:
exists abc
//查询key最后生存时间(默认单位是秒)
ttl key -1 为永久有效
例如:
ttl abc
//移除key过期时间,将key保存时间设置为永久
persist key
例如:
persist abc
//给key改名
rename key newkey
例如:
rename abc cbd
//将当前库中的key移到指定库中
move key db
例如:
move cbd 2
//返回key存储类型
type key
3.2 字符串的CRUD(增删改查)
//添加Key
//添加单个key
set key
例如:
set key1 hello //此时key为 key1 值为 hello
//同时添加多个key,如果原来key存在其值则会覆盖
mset key value [key value......]
例如:
mset address1 changsha address2 huaihua address3 zhijiang
//查询key,如果key不存在则返回错误,但是get仅仅只能获取string字符串的值。
//查询单个key
get key
例如:
get key1 //就能获取key1对应的值
//查询多个key
mget key1 key2 key3
例如:
MGET address1 address2 address3
//删除某个key(只要是key都可以删除,无视类型)
del key
//给key设置超时时间(默认单位是秒)
//使用expire设置过期时间,前提只能针对已创建的key设置超时时间
expire key sconds
例如:
expire abc 20 //也就是此key在redis只存在20s,在20s后使用get abc发现返回nil
//使用setex设置过期时间,只能对未创建的key设置超时时间,需要指定值的
setex key sconds value
例如:
setex address 30 beijing
//计算key长度
strlen key
//key自增,#每执行一次此操作,key数值就+1,如果key不存在,那么初始值为0,在执行incr命令
incr key(自增)
incrby key 增量值(数字) # 每执行一次次操作,key数值就+一次增量值,而不是1 例如:incrby abc 10
//key自减
decr key(自减) #每执行一次此操作,key数值就-1
decrby key #减值 效果跟incrby key 恰好相反
3.3 Hash的CRUD
//添加key
//添加单个key
hset key field value
例如:
127.0.0.1:6379> HSET user1 name "zhangsan"
(integer) 1
127.0.0.1:6379> HSET user1 age 30
(integer) 1
127.0.0.1:6379> HSET user1 job "golang coder"
(integer) 1
//添加多个key
hmset key field value[field,value].....
例如:
hmset user2 name "tim" age 20 job "c++ coder"
//查询key
//查询某个key的单个字段
hget key field
例如:
hget user1 name
//查询某个key的所有字段和值
hgetall key
例如:
127.0.0.1:6379> hgetall user1
1) "name"
2) "key"
3) "age"
4) "30"
5) "job"
6) "golang coder"
注:奇数是字段/feild,偶数是值/valuse
//查询某个key的全部字段的值
hmget key field [field ......]
例如:
127.0.0.1:6379> hmget user2 name get job
1) "tim"
2) (nil)
3) "c++ coder"
//查询某个key有几个字段和值
hlen key
例如:
hlen user2
//查询某个key有哪些字段,不显示值
hkeys key
例如:
127.0.0.1:6379> hkeys user2
1) "name"
2) "age"
3) "job"
##判断某个字段存不存在
hexitsts key field
例如:
127.0.0.1:6379> hexists user2 name
(integer) 1
#key的删除
##删除key的单个字段
hdel key feild 例如:hdel key name #删除key中的name字段
3.4 List的CRUD
//添加key
//lpush是从list的左边添加值(可以把list看出管道)
lpush key value [value......]
例如:
127.0.0.1:6379> lpush city "beijing" "shanghai" "changsha"
(integer) 3
#此时存储在list集合的值顺序为 changsha shanghai beijing
//rpush是从list的右边添加值
rpush key value [value......]
例如:
127.0.0.1:6379> rpush city2 shenzheng nanjing wuhan
(integer) 3
#此时存储在list集合的值顺序为 shenzheng nanjing wuhan
//lpush和rpush组合使用
//根据从左边插入原则,首先插入33,然后在33的左边插入22,依此类,因此实际顺序是 11 22 33
127.0.0.1:6379> lpush intlist 33 22 11
(integer) 3
//根据从右边插入原则,我们的44在33的右边插入,55在44的右边插入,依此类推,实际整个intlist集合的顺序是:
//11 22 33 44 55
127.0.0.1:6379> rpush intlist 44 55 //
(integer) 5
//查询结果与我们预算的结果一致
127.0.0.1:6379> lrange intlist 0 -1
1) "11"
2) "22"
3) "33"
4) "44"
5) "55"
//查询key
//lrange是从左边开始查询
//start为开始处,stop代表结尾处,0表示列表的第一个元素,然后依此类推,-1代表最后一个元素,-2代表倒数第二个元素,依此类推
lrange key start stop
例如:
127.0.0.1:6379> lrange city 0 -1
1) "changsha"
2) "shanghai"
3) "beijing"
注:是不是跟我们上面lpush存储值的顺序一样
//lpop从链表的最左边取出一个元素,并将其移走
lpop key
例如:
127.0.0.1:6379> lpop city
"changsha"
//rpop从链表的最右边取出一个元素,并将其移走
rpop key
例如:
127.0.0.1:6379> rpop city
"beijing"
注:当使用lpop或者rpop将所有key移除之后,key也会自动消失(list独有)
//删除key
del key //在string中也是通过del删除key
//获取key的长度
llen key
例如:
127.0.0.1:6379> llen intlist
(integer) 5
//如果key不存在在则返回0
127.0.0.1:6379> del intlist
(integer) 1
127.0.0.1:6379> llen intlist
(integer) 0
3.5 Set的CURD
//添加set集合
sadd key member [member......]
例如:
127.0.0.1:6379> sadd emails tim@qq.com tom@163.com pic@126.com
(integer) 3
//取出set集合所有值
smembers key
例如:
127.0.0.1:6379> smembers emails
1) "tom@163.com"
2) "pic@126.com"
3) "tim@qq.com"
注:此时应该发现key的value跟我们输入顺序不同,所以他是无序的
//判断值是否存在
sismember key member
例如:
//查询已存在的值,则返回1
127.0.0.1:6379> sismember emails pic@126.com
(integer) 1
//查询不存在的值,则返回0
127.0.0.1:6379> sismember emails pic11@126.com
(integer) 0
//删除
//删除指定值
srem key member [member......]
例如:
//删除单个,返回1代表成功
127.0.0.1:6379> srem emails pic@126.com
(integer) 1
//删除多个,返回1代表成功
127.0.0.1:6379> srem emails time@qq.com tom@163.com
(integer) 1
注:通过srem删除完key的值,key是不会自动消失的,得手动删除才行
//删除指定key
del key
参考文章:
https://blog.csdn.net/xpsallwell/article/details/84030285
https://blog.csdn.net/cn_yaojin/article/details/88014216