1.Redis的数据类型
1.1 string
格局: set key value
string类型是二进制安全的。意思是redis的string能够包括任何数据。比方jpg图片或许序列化的目标 。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
1.2 hash
格局: hmset name key1 value1 key2 value2
Redis hash 是一个键值(key=>value)对调集。
Redis hash是一个string类型的field和value的映射表,hash特别合适用于存储目标。
1.3 list
Redis 列表是简略的字符串列表,依照刺进次序排序。你能够增加一个元素到列表的头部(左面)或许尾部(右边)
格局: lpush name value
在 key 对应 list 的头部增加字符串元素
格局: rpush name value
在 key 对应 list 的尾部增加字符串元素
格局: lrem name index
key 对应 list 中删去 count 个和 value 相同的元素
格局: llen name
回来 key 对应 list 的长度
1.4 set
格局: sadd name value
Redis的Set是string类型的无序调集。
调集是经过哈希表完结的,所以增加,删去,查找的复杂度都是O(1)。
1.5 zset
格局: zadd name score value
Redis zset 和 set 相同也是string类型元素的调集,且不答应重复的成员。
不同的是每个元素都会相关一个double类型的分数。redis正是经过分数来为调会集的成员进行从小到大的排序。
zset的成员是仅有的,但分数(score)却能够重复。
1.6 bitmap
bitmap运用二进制的存储办法,运用1bit标明一个关键字的状况。可运用与、或、非、异或等操作,合适用于核算累计用户/日均活泼用户等功用。
1.7 hyperloglog
本质上是字符串,但运用极小空间完结独立数量核算。需求留意的是hyperloglog是有错误率的(错误率0.81%),也便是说核算出来的值纷歧定是完全正确的。并且不能核算单条数据,只能核算悉数数据。A8站源码交易平台
1.8 geo
用于核算地理位置信息相关的一些功用。
2 .Redis的底层结构
简略动态字符串
链表
字典
跳动表
整数调集
紧缩列表

3 .数据筛选战略
redis 内存数据集巨细上升到必定巨细的时分,就会实施数据筛选战略(收回战略)。redis 供给 6种数据筛选战略:
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(驱赶):制止驱赶数据_func()
留意这儿的6种机制,volatile和allkeys规矩了是对已设置过期时刻的数据集筛选数据仍是从悉数数据集筛选数据,后边的lru、ttl以及random是三种不同的筛选战略,再加上一种no-enviction永不收回的战略。
运用战略规矩:
假如数据出现幂律散布,也便是一部分数据拜访频率高,一部分数据拜访频率低,则运用allkeys-lru
假如数据出现相等散布,也便是一切的数据拜访频率都相同,则运用allkeys-random
三种数据筛选战略:
ttl和random比较简单了解,完结也会比较简略。主要是lru最近最少运用筛选战略,规划上会对key按失效时刻排序,然后取最早失效的key进行筛选。
4. Redis耐久化
耐久化便是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢掉。
Redis 供给了两种耐久化办法:RDB(默许) 和AOF
RDB:rdb是Redis DataBase缩写,功用中心函数rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数
AOF:aof是Append-only file缩写,每逢履行服务器(守时)使命或许函数时flushAppendOnlyFile 函数都会被调用
比较:
aof文件比rdb更新频率高,优先运用aof复原数据。
aof比rdb更安全也更大
rdb性能比aof好
假如两个都配了优先加载AOF
5 .Redis散布式锁的完结
先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时刻防止锁忘记了开释。
假如在setnx之后履行expire之前进程意外crash或许要重启保护了,那会怎么样?
set key value ex 1000 nx(单条指令确保原子性),或许运用spring-boot-starter-data-redis中的setIfAbsent办法
6 .缓存穿透和缓存雪崩
缓存穿透:
一般的缓存体系,都是依照key去缓存查询,假如不存在对应的value,就应该去后端体系查找(比方DB)。一些歹意的恳求会成心查询不存在的key,恳求量很大,就会对后端体系形成很大的压力。这就叫做缓存穿透。
怎么防止:A8站源码交易平台
1):对查询成果为空的状况也进行缓存,缓存时刻设置短一点,或许该key对应的数据insert了之后整理缓存。
2):对必定不存在的key进行过滤。能够把一切的或许存在的key放到一个大的Bitmap中,查询时经过该bitmap过滤。
缓存雪崩:
当缓存服务器重启或许很多缓存会集在某一个时刻段失效,这样在失效的时分,会给后端体系带来很大压力。导致体系溃散。
怎么防止:
1):在缓存失效后,经过加锁或许行列来操控读数据库写缓存的线程数量。比方对某个key只答应一个线程查询数据和写缓存,其他线程等候。
2):做二级缓存,A1为原始缓存,A2为复制缓存,A1失效时,能够拜访A2,A1缓存失效时刻设置为短期,A2设置为长时刻
3):不同的key,设置不同的过期时刻,让缓存失效的时刻点尽量均匀。
7. Redis哈希槽
Redis集群没有运用一致性hash,而是引入了哈希槽的概念,Redis集群有16384个哈希槽,每个key经过CRC16校验后对16384取模来决议放置哪个槽,集群的每个节点担任一部分hash槽。A8站源码交易平台
A8站源码交易平台