网站产品说明书模板,女生学建筑工程技术就业前景,长春做网站的公司,十大不收费看盘软件排名下载Nosql#xff1a;Not-Only SQL#xff08;泛指非关系型数据库#xff09;#xff0c;作为关系型数据库的补充
作用#xff1a;应对基于海量用户和海量数据前提下的数据处理问题
redis#xff1a;C语言开发的一个开源的高性能键值对数据库
特征#xff1a;
1、数据之…NosqlNot-Only SQL泛指非关系型数据库作为关系型数据库的补充
作用应对基于海量用户和海量数据前提下的数据处理问题
redisC语言开发的一个开源的高性能键值对数据库
特征
1、数据之间没有必然的关联关系
2、内部采用单线程机制工作
3、高性能
4、多数据类型支持string、list、hash、set、sorted_set
5、支持持久化可以进行数据灾难恢复
redis应用
1、为热点数据加速查询热点商品、热点新闻等
2、任务队列秒杀、抢购、购票排队等
3、即时信息查询各类排行榜、网站访问统计等
4、时效性信息控制验证码控制
5、分布式数据共享分布式集群架构中的session共享
6、消息队列
7、分布式锁
数据类型相关命令
string字符串
命令说明set [key] [value]添加、修改数据get [key]获取数据del [key]删除数据mset [key1] [value1] [key2] [value2] ...添加、修改多个数据mget [key1] [key2] ...获取多个数据strlen [key]获取数据字符个数字符串长度append [key] [value]追加信息到原信息尾部如果原来信息存在就追加否则新建incr [key]数据自增1incrby [key] [increment]数据增加指定整数范围incrbyfloat [key] [increment]数据增加指定小数范围decr [key]数据自减1decrby [key] [increment]数据减去自定范围整数setex [key] [seconds] [value]设置数据具有制定的生命周期秒psetex [key] [milliseconds] [value]设置数据具有制定的生命周期毫秒
hash哈希表结构
命令说明hset [key] [field] [vaule]添加、修改数据hget [key] [field]获取数据hgetall [key]获取全部数据hdel [key] [field1] [field2] ...删除数据hlen [key]获取哈希表中字段的数量hexists [key] [field]哈希表中是否存在该字段返回存在的个数hkeys [key]获取哈希表中所有字段名hvals [key]获取哈希表中所有字段值hincrby [key] [field] [increment]设置指定字段的数值数据增加指定范围的值整数hincrbyfloat [key] [field] [increment]设置指定字段的数值数据增加指定范围的值小数hsetnx [key] [field] [value]存在字段不更新不存在新增
list有序的双向链表
命令说明lpush [key] [value1] [value2] ...添加、修改数据左rpush [key] [value1] [value2] ...添加、修改数据右lrange [key] [start] [stop]从左边获取数据start从0开始stop-1代表倒1位置结束lindex [key] [index]从左边读取index位置的数据index从0开始llen [key]获取数据个数lpop [key]从左边获取一个数据并移除rpop [key]从右边获取一个数据并移除blpop [key1] [key2] ... [timeout]规定时间内从左边获取并移除数据timeout秒级brpop [key1] [key2] ... [timeout]规定时间内从右边获取并移除数据timeout秒级lrem [key] [count] [value]从左移除指定数据count移除个数value移除的数据
set数据不重复
命令说明sadd [key] [member1] [member2] ...添加数据smembers [key]获取全部数据srem [key] [member1] [member2] ...删除数据scard [key]获取集合数据总量sismember [key] [member]判断集合中是否包含指定数据返回个数srandmember [key] [count]随机从集合中抽取count个数据原集合不变spop [key]随机获取集合中的某个数据并移出集合sinter [key1] [key2]求两个集合的交集sunion [key1] [key2]求两个集合的并集sdiff [key1] [key2]求两个集合的差集有顺序的key1 - key2的差集sinterstore [key3] [key1] [key2]求key1key2两个集合的交集并存储到key3中sunionstore [key3] [key1] [key2]求key1key2两个集合的并集并存储到key3中sdiffstore [key3] [key1] [key2]求key1key2两个集合的差集并存储到key3中smove [source] [destination] [member]把数据member从集合source移动到集合destination中
sorted_set有序的set集合
命令说明zadd [key] [score1] [member1] [score1] [member1] ...添加多个数据按照score排序zrange [key] [start] [stop] [withscores]获取数据升序withscores会展示score值start、stop为索引zrevrange [key] [start] [stop] [withscores]获取数据降序zrem [key] [member1] [member2] ...删除多个数据zrangebyscore [key] [min] [max] [withscores] [limit]按条件升序获取min score值 maxlimit限制条数zrevrangebyscore [key] [max] [min] [withscores] [limit]按条件降序获取zremrangebyrank [key] [start] [stop]根据索引范围删除zremrangebyscore [key] [min] [max]根据score值范围删除zcard [key]获取集合数据总量zcount [key] [min] [max]获取指定的score值范围中的数据条数zinterstore [destination] [keynumber] [key1] [key2] ...集合交集keynumber为要操作的集合个数zunionstore [destination] [keynumber] [key1] [key2] ...集合并集keynumber为要操作的集合个数zrank [key] [member]获取指定数据的索引升序zrevrank [key] [member]获取指定数据的索引降序zscore [key] [member]获取指定数据的score值zincrby [key] [increment] [member]给指定的member数据的score值增加increment
key通用操作
命令说明del [key]删除指定keyexists [key]获取key是否存在type [key]获取key的类型expire [key] [second]为指定key设置有效期秒级pexpire [key] [milliseconds]为指定key设置有效期毫秒级ttl [key]获取key的有效时间秒返回-2说明key不存在返回-1说明key存在pttl [key]获取key的有效时间毫秒persist [key]切换key从时效性转换为永久性rename [key] [newkey]为key改名newkey如果已存在会覆盖原先的值renamenx为key改名newkey如果已存在不会改名sort排序
key查询模式规则
keys pattern db基本操作
命令说明select [index]切换数据库0-16ping返回pong说明数据库是连通的quit退出move [key] [dbindex]数据移动dbsize当前库中key的总量flushdb清除当前库的数据flushall清除所有库的数据
redis持久化
1、rdb以快照的形式记录数据
save保存命令
bgsave后台保存会开启子进程进行数据保存
save [second] [count]自动保存在second秒时间内改变count次
2、aof记录历史命令后台会重写
重写的作用
1、降低磁盘占用量提高磁盘利用率
2、提高持久化效率降低持久化写时间提高IO性能
3、降低数据恢复用时提高数据恢复效率
重写规则
1、已超时的数据不再写入
2、忽略无效指令只保留最终数据的写入命令
3、对同一数据的多条写命令合并为一条命令listsethashzset指令一次性最多写入64个元素
bgrewriteaof手动重写 redis事务
multi开启事务设定事务的开启位置此命令执行后后续的所有命令均加入到该事务中
exec执行事务设定事务的结束位置同时执行事务。与multi成对使用
discard取消事务终止当前事务发生在multi之后
redis监控锁
watch [key1] [key2] ... 对key添加监视锁在执行exec前如果key发生变化终止事务执行
unwatch取消对所有key的监视
redis分布式锁公共锁
setnx lock-[key] value设置公共锁
del lock-[key]释放锁
expire lock-[key] [second]为锁key添加时间限定到时不释放自动释放锁秒
pexpire lock-[key] [milliseconds]为锁key添加时间限定到时不释放自动释放锁毫秒
redis删除策略
1、定时删除用时间换空间
好节约内存无占用
坏不分时段占用CPU资源频度高
2、惰性删除访问某个key时判断该key是否过期过期则清除
好延时执行CPU利用率高
坏内存占用严重
3、定期删除每隔一定的时间扫描一定数量的key并清除其中过期的key。
redis同时使用惰性删除和定期删除这两种过期策略
redis逐出策略
相关配置
maxmemory最大可使用内存
maxmemory-samples每次选取待删除的数据个数 哨兵模式
定义监控主从结构中各个redis服务器工作过程当master出现故障时通过投票机制选出新的master并将所有的slave连接到新的master
工作原理
1、监控master和各个slave
2、各个哨兵之间互通信息
3、当一个哨兵发现master出现故障会通知其他哨兵复核超出一半的哨兵发现master故障会投票选出一个哨兵进行故障处理选出一台slave作为新master通知其他slave连接到新的master
缓存预热系统启动前提前将相关的缓存数据直接加载到缓存系统避免在用户请求的时候直接查询数据库再将数据进行缓存的问题。让用户直接查询事先被预热的缓存数据。
缓存雪崩一段时间内大量的缓存数据过期请求直接访问数据库导致数据库服务器造成大量压力。
解决
1、热点数据使用永久key
2、为key设置不同的有效期
缓存击穿单个key数据过期瞬间数据访问量较大大量对数据库访问导致对数据库服务器造成压力。
解决
1、热点数据使用永久key
2、为key设置不同的有效期
缓存穿透大量访问不存在的数据对数据库服务器造成压力。
解决
1、返回结果为null也进行缓存有效时间短
2、采用布隆过滤器
布隆过滤器二进制数组key经过多个hash函数得出的值就是数组的索引索引对应位置的值会设置为1。新的key经过同样步骤得出索引值如果对应位置的值不全是1说明这个key不存在直接过滤掉。
问题存在误判。不同的值hash后可能结果一致会导致不存在的key判断为存在。
如何保证redis和数据库数据一致性 1、先更新数据库再删除redis下次读取时重新加载 2、更新redis同步更新数据库两步操作在同一个事务中 3、更新redis发送消息同步到数据库redis挂了未同步数据容易丢失 4、更新数据库Canal监听Binglog通过MQ更新redis 5、延迟双删更新数据库前后删除redis第二次删除延迟500ms 6、分布式锁加锁更新数据库和删除缓存释放锁