Redis总结和部分操作命令

Redis(REmote DIctionary Server)是一个Key Value存储系统,是非常著名的NoSQL数据库之一。Redis常常作为系统的缓存Cache使用

1.访问量大
2.高并发
3.高可用
4.海量数据

一.Nosql
not Only sql (non-relational) 非关系型数据库 (数据结构服务器)
优点:1.大数据量,高性能. 2.灵活的数据模型 3.高可用 4.低成本
劣势:1.数据之间无联系 2.不支持标准的SQL 3.没有关系型数据库的约束,也没有索引 4.没有事务ACID 5.没有丰富的数据类型

二。Redis (每次从db返回数据到service层都会缓存,减少数据库访问,减轻数据库查询压力)
Redis是当今非常流行的基于 KV结构 的作为Cache使用的noSQL数据库

启动Redis服务 [root@localhost src]# ./redis-server
	./redis-cli
关闭Redis ./redis-cli shutdown

Redis基本命令
1.沟通命令,查看状态
ping
2.查看当前数据库中key的数量
dbsize
3.redis默认使用16个库
在配置文件中修改 databases 0~15
4.切换库命令
select db
5.删除当前库的数据
flushdb
6.退出客户端
exit / quit

操作key的命令
1.keys 查找所有符合模式pattern的key. pattern可以使用通配符(?表示单个字符)
keys pattern
2.exists 判断key是否存在
exists key[key…]
3.expire 设置key的生存时间,超过时间,key自动删除,单位s
expire key seconds
4.ttl 以秒为单位,返回key的剩余生存时间 (time to live)
ttl key //返回值 -1(没有设置生存时间) -2(key不存在)
5.type 查看key所存储值的数据类型
type key
6.del 删除存在的key,不存在的忽略 //返回值是删除的key的数量
del key

Redis的5种数据类型 string.hash.list.set.zset
string 字符串类型
能存储任何形式的字符串,包括二进制数据,序列化后的数据,JSON化的对象甚至图片.最大512M

hash	哈希类型
	是一个string类型的 field 和 value 的映射表. 一般存储对象的全部数据 类似于Map

list		列表类型
	字符串列表

set		集合类型
	Set是string类型的无序集合,集合成员是唯一的. 即不能重复

zset		有序集合(sorted set)
	zset是string类型的有序集合.且不允许重复的成员.		(zset的每个元素都会关联一个分数(分数可以重复),redis通过分数来为集合种的成员进行从小到大的排序)

Redis数据类型操作命令
1.字符串类型string
基本命令
set key value 将字符串值value设置到key中
get key 获取key中设置的字符串值
incr key 将key中存储的数字值加1.如果不存在,则初始化为0再加1
decr key 将key中存储的数字值减1 如果不存在就初始化为0再减1
append key value 如果key存在,将value追加到旧值的末尾. 如果不存在,则将key设置值为value
常用命令
strlen key 返回key所存储的字符串值的长度.不存在key返回0
getrange key start end 获取key中start到end范围的子字符串. 附属表示从字符串末尾开始,-1变送hi最后一个字符
setrange key offset vlaue 用value覆盖(替换)key的存储值从offset开始,不存在的key做空白字符串
mset key value [key value] 同时设置一个或者多个key-value对
mget key [key] 同时获取一个或者多个value

2.哈希类型hash
	基本命令
		hset	hash表的key field value		将哈希表key中的域field的值设为value,如果不存在则新建hash表	如果有field则覆盖值.
		hget key field		获取哈希表key中给定域field的值
		hmset key field value [field value]	同时将多个 (域-值)设置到哈希表key中
		hmget key field [field]		同时获得多个field的值
		hgetall key			获取哈希表key中的所有值
		hdel key field [field]		删除哈希表key中的一个或者多个指定域field.
	常用命令
		hkeys key	查看哈希表key中的所有field域
		hvals	key	查看哈希表key中的所有value值
		hexists key field	查看哈希表key中,给定域field是否存在	//如果存在返回1.其他返回0

3.列表list
	基本命令
		lpush key value [value...]		将一个或多个值value插入到列表key的表头(最左边),从左边开始加入值,依次插入到表头.
		rpush key value [value...]	将一个或多个值value插入到列表key的表尾(最右边),从左边开始加入值,依次插入到表尾.
		lrage key start stop		获取key中指定区间的元素
		lindex key index		获取列表key中下表为指定index的元素.
		llen key		获取列表key的长度
	常用命令
		lrem key count value		根据参数count的值,移除列表中与参数value相等的元素,	count>0 从列表左侧向右移除.		count<0,从列表的尾部开始移除.	count=0,移除表中所有与value相等的值
		lset key index value		将列表key下标为index的元素设置为value
		linsert key BEFORE/ALFTER prvot value		将值value插入到列表key当中位于值pivot之前或之后的位置.

4.集合类型set
	基本命令
		sadd key member[member..]	将一个或多个member元素加入到集合key当中,已经存在于集合的member元素会被忽略.  不会再加入.
		smembers key		获取集合key中的所有成员元素.
		sismember key member			判断member元素是否为集合key的成员
		scard key		获取集合里面元素的个数
		srem key member[member]		删除集合key中的一个或多个member元素
	常用命令
		srandmember key [count]		只提供key,随机返回集合的一个元素,	count>0 返回包含count元素个数的集合(集合元素各不相同).	count<0 返回一个count绝对值的长度的集合(集合中元素可能重复多次).
		spop key [count]		随即从集合中删除一个元素,count是删除的个数

5.有序集合类型zset
	基本命令
		zadd key score member [score member..]			将一个或者多个member元素及其score值加入到有序集合key中,如果member存在集合中,更新值.		score可以是整数或浮点数
		zrange key start stop [WITHSCORES]		查询有序集合,指定区间的内的元素,集合成员按score值从小到大来排序.	WITHSCORES是让score和value一同返回.
		zrevrange key start stop [WITHSCORES]		和zrange一样,但是按score值大到小排序.
		zrem key member [member..]	删除有序集合key中的一个或多个成员
		zcard key		获取有序集key的元素成员的个数.
	常用命令
		zrangebyscore key min max [WITHSCORES] [LIMIT offset count]		获取有序集key中所有score值介于min和max之间的成员,有序成员递增排序.		LIMIT限制返回结果的数量和区间.	-inf +inf 表示最小和最大.
		zrevrangebyscore key max min  [WITHSCORES] [LIMIT offset count]		从大到小,其他和上面一样
		zcount key min max		返回有序集key中,score值在min和max之间的成员数量

四.高级话题
1.事务
redis中的事务是一组命令的集合,至少两个或两个以上的命令,redis事务保证这些命令被执行时中间不会被任何其他操作打断.
命令:
multi 标记事务的开始,事务的多条命令会按照先后顺序被放进一个队列当中
exec 执行所有事务块内的命令
discard 取消事务,放弃执行事务内的所有命令
watch key [key…] 剪视一个或多个key,如果在事务执行之前key被其他命令改动,那么这个事务将会被打断.
unwatch 取消对所有key的监视.
事务的实现
1.正常执行事务:
multi:开启事务,暂不执行命令
sadd works john 第一条命令进入等待队列
sadd works rose 第二条命令进入等待队列
exce 执行前面发送的两条命令
2.Redis的watch机制

2.持久化
	存储,将数据存储到一个不会丢失的地方.
	
	1.RDB (将某个时间点的数据集存储在一个二进制文件中,只有一个文件,适合做备份) Redis database
			在指定的时间间隔内将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存
			
			在redis.conf中配置
				1.配置执行RDB生成快照的时间策略		save <seconds> <changes> (N秒内数据集至少有M个key改动时自动保存)
				2.dbfilename:设置RDB的文件名,默认是dump.rdb
				3.dir:指定RDB存储位置,默认./当前目录
			总结:
				优点:存储快照数据文件,恢复数据方便
				缺点:会丢失最后一次快照以后更改的数据.	RDB会分出一个子进程,如果redis数据库大的话会占用较多时间.

	2.AOF (每次接收到一条改变数据的命令时,将该命令写到一个AOF文件中.重启redis时,通过执行aof文件的所有命令来恢复数据)
			
			在redis.conf中配置
				1.appendonly yes
				2.appendfilename:指定AOF文件名,默认appendonly,aof
				3.dir:指定RDB和AOF文件的目录
				4.appendfsync:配置向aof文件写命令数据的策略:	
						no不主动进行同步,完全交给操作系统(30秒一次)
						always:每次执行写入都会执行同步,慢一些但是相对安全
						everysec:每秒执行一次同步操作 (默认项)
				5.auto-aof-rewrite-min-szie:允许重写的最小AOF文件大小,默认64m 当aof文件大于64m就整理AOF文件,去掉无用操作
	
	3.主从复制
		1.读写分离
				主服务器主要是写,从服务器主要是负责读
		2.容灾处理
			冷处理:1.slaveof no one(将服务器升级为主服务器)	.....slaveof 127.0.0.1 6381(将slave挂在新的master上)

			高可用Sentinel哨兵
				
	4.安全设置
		1.设置密码
				修改redis.conf中的requirepass密码
		2.绑定id
				#127.0.0.1 把ip改成允许访问redis服务器的ip地址,表示只允许该ip进行访问.
		3.修改默认端口
			port		//范围是1024-65535
				使用-p参数指定端口 ./redis-cli -p新设置端口
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页