Redis学习心得—Redis操作

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值