redis 梳理


?如何实现session共享
?如何实现数据过期处理

redis
定义:
	C编写的高性能kv键值对格式的内存数据库	
	k是二进制安全
几种数据类型:
	1String
		(1)	int:8个字节的长整型。
		(2)	embstr:小于等于39个字节的字符串。
		(3)	raw:大于39个字节的字符串。
			strlen key
			incr key
			incr product:id
			decr key
			incrby key increment
			incrbufloat key increment
			decrby key decrement
			set name 张飞
			get name
			getset name "xx"
			append name xx
			redis-cli -n 1
			redis-cli  --raw
			redis-cli -n 0
			keys *
			help set
			append name bubai 	
			incr id 	
			incrby id 2
			setrange phone 2 x
	2List
		LPOP key
		RPOP key
		lrange list 0 -1
		RPOPLPUSH list list2
		LINDEX key index 获取
		LSET key index value  设定
		LLEN key   3.3.7	获取列表中元素的个数 
		LREM key count value   3.3.8	删除指定个数的元素
		BLPOP key [key ...] timeout  
			如果弹出的列表不存在或者为空,就会阻塞
			超时时间设置为0,就是永久阻塞,直到有数据可以弹出
			多个客户端阻塞在同一个列表上,使用First In First Service原则,先到先服务左右或者头尾阻塞弹出元素
	3Hash散列
		HSET key field value	
		HMSET key field value [field value ...]
		HSETNX key field value
		HGET key field	
		HMGET key field [field ...]		
		HGETALL key
			用途:节约内存空间和CPU资源开销
			删除过期对象
				主动删除和被动删除联合实现
		HKEYS key
		HVALS key
		HLEN key
		增加整数语法:HINCRBY key field increment
		增加小数语法:HINCRBYFLOAT key field increment
		HDEL key field [field ...]
		HEXISTS key field
			Redis的键过期功能目前只能对键进行过期操作,而不能对散列的字段进行过期操作,因此如果你要对键值对数据使用过期功能的话,那么只能把键值对储存在字符串里面
	4set
		无序的、去重的
		元素是字符串类型
		最多包含2^32-1元素

	5Zset(sortedset)
		1.	类似Set集合
		2.	有序的、去重的
		3.	元素是字符串类型
		4.	每一个元素都关联着一个浮点数分值(Score),并按照分值从小到大的顺序排列集合中的元素。分值可以相同,此时按照元素的字典序排序。
		5.	最多包含2^32-1元素
	6stream
		一个仅附加数据结构。至少从概念上来讲,因为Redis流是一种在内存表示的抽象数据类型
--------------------------------------------------
	7bitmap(位图:字节数组,定义在字符串类型中,最多存储512M)
		SETBIT key offset value 
		GETBIT key offset
		BITPOS  key  bit  [start]  [end]
		BITPOS  key  bit  start :从start+1个字节开始查找,直到尾部
		BITPOS  key  bit  start  end:从start+1字节开始到end+1字节之间查找
		BITOP AND destkey key [key ...] ,对一个或多个 key 求逻与,并将结果保存到 	destkey
		BITOP OR destkey key [key ...] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey
		BITOP XOR destkey key [key ...] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey
		BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey,按位取反。
	8hyperloglogs
	9geospatial(地理空间索引半径查询)
实践
	redis-server conf/redis.conf
	find / -name redis*
	ps aux|grep redis
	redis-cli shutdown
	redis-cli -p 5379 -h 127.0.0.1 --raw
	set key value ex/px/xx
	get range key 0 2
	setrange key key value
	
	
持久化
	RDB
		通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘。在默认情况下,Redis 将数据库快照保存在名字为 dump.rdb的二进制文件中。
		产生方式
			阻塞
				 客户端中执行save命令, 阻塞Redis服务,无法响应客户端请求,创建新的dump.rdb替代旧文件
			策略:Redis会在指定的情况下触发快照
				1.	符合自定义配置的快照规则  
				2.	执行save或者bgsave命令
				3.	执行flushall命令
				4.	执行主从复制操作
			conf
				save <seconds> <changes>
					save 900 1  : 表示15分钟(900秒钟)内至少1个键被更改则进行快照。
					save 300 10 : 表示5分钟(300秒)内至少10个键被更改则进行快照。
				    save 60 10000 :表示1分钟内至少10000个键被更改则进行快照。
				Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存。
				根据数据量大小与结构和服务器性能不同,这个时间也不同。通常将记录一千万个字符串类型键、大小为1GB的快照文件载入到内存中需要花费20~30秒钟。
			非阻塞
				父进程提供服务,子进程做持久化
				一份当前进程的副本(子进程)
				过程
					父进程继续接收并处理客户端发来的命令,子进程将内存中的数据写入硬盘中的临时文件。
					子进程写入完所有数据后会用该临时文件替换旧的RDB文件
				注意事项
					1.	进行快照的过程中不修改RDB文件,快照结束后将旧换新,任何时候RDB文件都是完整的。
					2.	通过定时备份RDB文件实现redis数据库备份, RDB文件是经过压缩的二进制文件,占用的空间会小于内存中的数据,利于传输。  
	AOF 
		每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘中的AOF文件
		执行write,写入buffer缓冲区,然后再写入硬盘,不能保证绝对不丢失数据

	

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值