Redis入门

Redis introduction(C语言编写的)
http://www.redis.cn/ 中文网

Redis is an open source (BSD licensed), in-memory data structure
store, used as a database, cache and message broker.
Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库、缓存和消息代理。 It supports data structures
such as strings, hashes, lists, sets, sorted sets with range queries,
bitmaps, hyperloglogs, geospatial indexes with radius queries and
streams.
它支持诸如字符串、散列、列表、集、带范围查询的排序集、位图、hyperloglog、带半径查询和流的地理空间索引等数据结构。 Redis
has built-in replication, Lua scripting, LRU eviction, transactions
and different levels of on-disk persistence, and provides high
availability via Redis Sentinel and automatic partitioning with Redis
Cluster. Redis具有内置的复制、Lua脚本、LRU清除、事务和不同级别的磁盘持久性,并通过Redis
Sentinel和带有Redis集群的自动分区提供高可用性。

Redis有五种数据结构
Redis的存储格式是key-value形式的,key是字符串(key是唯一的,如果重复,就会覆盖),value是有五种不同的数据结构。Redis有16个数据库。
value的数据结构:1.字符串类型 string
2.哈希类型 hash 相当于java中的map格式
3.列表类型 list(允许重复,有序) 相当于java中的linkedlist格式
**list有序:**这里指的是存取有序。(先进先出:栈)
4.集合类型 set(不允许重复,无序)
5.有序集合类型 sortedset(不允许重复,有序)
**有序的原理是:**每设置一个值时,会设置一个double类型的分数。可以根据该分数进行一个排名。
Redis对小key没法设置过期时间,只能对大key设置过期时间

一、Redis的两种持久化方式(RDB快照、AOF日志)

1.1、RDB快照(默认开启的)

定义:对存储在内存中的数据,周期性的进行持久化到磁盘上。

问题:为什么不实时持久化而是周期性的?
答:因为每次持久化会IO磁盘化消耗CPU的性能,频繁的IO磁盘化会造成其他服务终止。

1.1.2、优点

1.1.2.1、恢复数据速度快
1.1.2.2、RDB文件小

1.1.3、缺点

1.1.3.1、数据丢失风险大(在两次存储时间之间宕机,数据就会丢失)
1.1.3.2、当有大量数据时,进行IO磁盘化,会耗费大量的CPU性能。会造成其他服务终止。
1.1.3.3、文件不可读。

1.2、AOF日志(默认没有开启)

定义:对数据操作的指令进行持久化。

1.1.2、优点

1.1.2.1、 数据丢失风险小
1.1.2.2、AOF文件可读

1.1.3、缺点

1.1.3.1、AOF文件大(Redis自身有一个自动瘦身的指令 bgrewriteaof(原理是:例如修改多次后,只需记录最后一次修改语句即可))
1.1.3.2、恢复数据速度慢

如果两个都开启后,重启后只加载AOF日志文件。

二、Redis的内存淘汰策略

面试题:如果Redis的内存数据满了以后,下一条数据怎么存?

答:默认的内存淘汰策略是报错。

2.1、Redis占用的内存空间可以设置吗?可以的!

三、缓存穿透

3.1、概念描述:一直访问一个Redis中不存在的数据

3.2、解决办法:1、可以给每个不存在的数据进行缓存。2、只查询缓存,不查询数据库。

四、缓存击穿

4.1、概念描述:对Redis的一个数据访问量大,这时正好这个数据过期,导致对数据库的访问增大。

4.2、解决办法:1、对热点数据不设置过期时间。2、互斥锁(lock锁的trylock())

五、缓存雪崩

5.1、概念描述:某一个时间点,缓存集中过期

5.2、解决办法:1、不要把数据设置的过期时间一样,按照业务来把数据设置成不同的过期时间。2、只查Redis,不查数据库。

内存淘汰(置换)策略 : 1). volatile-lru -> remove the key with an expire set
using an LRU algorithm

	只从设置失效(expire set)的key中选择最近最不经常使用的key进行删除,用以保存新数据
	
2). allkeys-lru -> remove any key according to the LRU algorithm
	
	优先删除掉最近最不经常使用的key,用以保存新数据
	
3). volatile-random -> remove a random key with an expire set
	
	只从设置失效(expire set)的key中,(随机)选择一些key进行删除,用以保存新数据
	
4). allkeys-random -> remove a random key, any key
	
	随机从all-keys中(随机)选择一些key进行删除,用以保存新数据 
	
5). volatile-ttl -> remove the key with the nearest expire time (minor TTL)
	
	只从设置失效(expire set)的key中,选出存活时间(TTL)最短的key进行删除,用以保存新数据
	
6). noeviction -> don't expire at all, just return an error on write operations
   		不进行淘汰,表示即使内存达到上限也不进行置换,所有能引起内存增加的命令都会返回error
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值