?如何实现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缓冲区,然后再写入硬盘,不能保证绝对不丢失数据
redis 梳理
最新推荐文章于 2024-09-07 16:01:40 发布