redis介绍
五种数据类型
String:命令-set\get\del\
list:命令-rpush\lrange\lindex\lpop
set:命令-sadd\smembers\smember\srem
hash:命令-hset\hgetall\hdel\hget
zset:命令-zadd\zrange\zrangebyscore\zrem
适合场景
1.计数器 String可进行自增减。Redisp这种内存数据库读写性能非常高
2.缓存 热点数据放到内存中
3.查找表 查找快的特性。
4.消息队列 list双向链表,通过 lpop lpush写入读取。可以做,但是还是推荐用消息中间件
5.会话缓存 redis存多台应用服务器的会话信息
6.分布式锁 在分布式场景下,无法使用单机锁对多个结点上的进程进行同步。可以用setnx命令实现分布式锁
7.ZSet可以实现有序性操作,从而实现排行榜等功能
优势
1.速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
2.支持丰富数据类型,支持string,list,set,sorted set,hash
3.支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
4.丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
和memcached相比
数据类型:m只支持字符串,r支持五种了
数据持久化:r两种持久策略Rdb aof,m不支持
分布式:m不支持
内存管理机制:r很久没用的会放到磁盘。m一直在内存。Memcached 将内存分割成特定长度的块来存储数据,以完全解决内存碎片的问题。但是这种方式会使得内存的利用率不高,例如块的大小为 128 bytes,只存储 100 bytes 的数据,那么剩下的 28 bytes 就浪费掉了。
回收策略
volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择 数据淘汰
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
no-enviction(驱逐):禁止驱逐数据