redis简介

Posted good good study

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis简介相关的知识,希望对你有一定的参考价值。

 

1.什么是redis

Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

 

2.redis支持的数据类型

当前的 Redis 支持8 种数据类型,它们分别是字符串(String)、列表(List)、集合(set)、哈希结构(hash)、有序集合(zset)、基数(HyperLogLog)、位数组(或简称位图)和Streams,后面三种不是我们常用的类型。以下是每种类型的一些特点。

string:可以保存字符串,整数,浮点型的数据。可以对字符串进行操作,比如增加字符或者求子串:如果是整数或者浮点数,可以实现计算,比如自增等。

list:它是一个链表,它的每一个节点都包含一个字符串。Redis 支持从链表的两端插入或者弹出节点,或者通过偏移对它进行裁剪;还可以读取一个或者多个节点,根据条件删除或者查找节点等。

hash:它类似于 Java 语言中的 Map,是一个键值对应的无序列表。可以増、删、査、改单个键值对,也可以获取所有的键值对。

set:它是一个收集器,但是是无序的,在它里而每一个元素都是一个字符串,而且是独一无二,各不相同的。可以新增、读取、删除单个元素:检测一个元素是否在集合中;计算它和其他集合的交集、并集和差集等;随机从集合中读取元素。

zset:它是一个有序的集合,可以包含字符 串、整数、浮点数、分值(score),元素 的排序是依据分值的大小来决定的。可以增、删、査、改元素,根据分值的范围或者成员 來获取对应的元索。

位数组(或简称位图):使用特殊命令可以处理字符串值,如位数组:您可以设置和清除各个位,将所有位设置为1,查找第一个位或未设置位,等等。

HyperLogLogs:这是一个概率数据结构,用于估计集合的基数。不要害怕,它比看起来更简单。

Streams:仅附加的类似于地图的条目集合,提供抽象日志数据类型。

 

3.redis特点

3.1速度快

作为缓存工具,Redis最广为人知的特点就是快,到底有多快呢?Redis单机qps(每秒的并发)可以达到110000次/s,写的速度是81000次/s。那么,Redis为什么这么快呢?

  • 绝大部分请求是纯粹的内存操作,非常快速; 
  • 使用了很多查找操作都特别快的数据结构进行数据存储,Redis中的数据结构是专门设计的。如HashMap,查找、插入的时间复杂度都是O(1); 
  • 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CPU,不用去考虑各种锁的问题,不存在加锁、释放锁操作,没有因为可能出现死锁而导致的性能消耗; 
  • 用到了非阻塞I/O多路复用机制。

3.2支持丰富的数据类型

Redis有5种常用的数据类型:String、List、Hash、set、zset,每种数据类型都有自己的用处。

3.3原子性,支持事务

Redis支持事务,并且它的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。

3.4丰富的特性

Redis具有丰富的特性,比如可以用作分布式锁;可以持久化数据;可以用作消息队列、排行榜、计数器;还支持publish/subscribe、通知、key过期等等。当我们要用中间件来解决实际问题的时候,Redis总能发挥出自己的用处

3.5可持久化数据

Redis 提供 RDB 和 AOF 两种数据的持久化存储方案,解决内存数据库最担心的万一 Redis 挂掉,数据会消失掉。redis可通过此两种方式进行数据恢复,防止数据丢失。

 

4.redis过期策略

定时删除

定时删除是必须严格按照设定的时间去删除缓存,这就需要我们设置一个定时器去不断地轮询所有的key,判断是否需要进行删除。但是这样的话cpu的资源会被大幅度地占据,资源的利用率变低。

惰性删除

在你获取某个key的时候,redis会检查一下 ,这个key如果设置了过期时间那么是否过期了,如果过期了此时就会删除,不会给你返回任何东西

定期删除

定期删除是时间由我们定,我们可以每隔多少的时间进行检查,但还是不能检查所有的缓存,Redis还是会卡死,只能随机地去检查一部分缓存,但是这样会有一些缓存无法在规定时间内删除。redis默认是每隔100ms就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。

 

5.redis内存淘汰机制

那么我们如何去配置Redis的内存淘汰机制呢?在Redis.conf中我们可以进行配置

# maxmemory-policy allkeys-lru

noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错。

allkeys-lru:在主键空间中,优先移除最近未使用的key。

volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key。

allkeys-random:在主键空间中,随机移除某个key。

volatile-random:在设置了过期时间的键空间中,随机移除某个key。

volatile-ttl:在设置了过期时间的键空间中,具有更早过期时间的key优先移除。

以上是关于redis简介的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段

C#-WebForm-★内置对象简介★Request-获取请求对象Response相应请求对象Session全局变量(私有)Cookie全局变量(私有)Application全局公共变量Vi(代码片段

如何利用redis来进行分布式集群系统的限流设计

jedis连接redis

react简介

react简介