zoukankan      html  css  js  c++  java
  • 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优先移除。

  • 相关阅读:
    java 用代码实现判断字符串的开头和结尾
    java基础 1-path
    C#基础(语句 for循环)
    C#基础(数组)
    C#基础(语句 if else)
    C#基础(变量、常量、运算符)
    继承-person
    继承-字母表
    继承-monkey
    继承-people
  • 原文地址:https://www.cnblogs.com/wanghq1994/p/12101254.html
Copyright © 2011-2022 走看看