Redis介绍使用及进阶-阿里云开发者社区

开发者社区> 优惠码发放> 正文

Redis介绍使用及进阶

简介: Redis介绍使用及进阶目录: 一、介绍 二、缓存问题 三、Redis内存滥用 四、键命名规范 五、Redis使用场景 六、持久化操作 七、.Net Core 使用redis 简单介绍 一、介绍 1、 高性能-- Redis能读的速度是110000次/s,写的速度是81000次/s 、c语言实现距...
+关注继续查看

Redis介绍使用及进阶
目录:

一、介绍

二、缓存问题

三、Redis内存滥用

四、键命名规范

五、Redis使用场景

六、持久化操作

七、.Net Core 使用redis 简单介绍

一、介绍

1、 高性能-- Redis能读的速度是110000次/s,写的速度是81000次/s 、c语言实现距离系统更近、数据存储在内存中、采用了epoll,非阻塞I/O,

2、 原子性-- Redis的所有操作都是原子性的

3、 特性—可设置过期键、支持publish/subscribe发布与订阅、通知等

4、 数据类型—支持String(字符串)、Hash(哈希)、List(列表)、Set(集合)、 ZSet(有序集合)、Bitmaps(位图)、HyperLogLog、Geo(地理信息定位)

5、 服务器简单—底层代码简单优雅、不依靠操作系统类库、单线程模型,避免并发问题

6、 支持持久化—RDB、AOF

二、缓存问题

缓存的更新客区分为三种方式—主动更新,被动更新,预加载更新

主动更新—开发人员操作更新或者通过定时任务自动更新

被动更新—当用户操作触发时进行数据缓存更新

预加载更新—通过后台去点击查找最新的数据进行覆盖和删除

三、Redis内存滥用

原因:

1、 数据一直累加,没有自动清除也没有手动清除,数据冗余

2、 储存没用的数据过多,有些可能只用到一个字段却储存了一个对象

3、 冷数据,根本不会用到的数据没有去管理和清理

解决:

1、 每次存储数据加上过期时间

2、 定期查看是否存在冷数据进行清除

3、 存储对应数据,不应肆意存储数据。存储可用到的数据

4、 存储的数据尽量从简,简化存储的数据

四、键命名规范

1、 redis是非关系型数据库,内存存储数据,键名长度也会影响空间,尽量控制键名长度

2、 可考虑大小写命名规范,根据业务命名,可加前缀,通俗易懂

五、Redis使用场景

1、 最主要用途可做缓存

2、 用redis的有序集合数据结构可做排行榜(ZSet)

3、 频繁读取数据库会造成数据库的巨大的压力都可以采用redis(浏览量、在线人数、等等)

4、 publish/subscribe发布与订阅可做简单的消息队列

六、持久化操作

持久化操作分为两种:RDB与AOF持久化

RDB:

1、 效率更高

2、 性能最大化,因为开始持久化的时候是fork出一个子进程,然后子进程去完成持久化的工作

3、 会将数据都存储在一个文件当中

持久化的配置

复制代码

持久化时间策略

save 900 1 #在900s至少有一条写入就会触发一次快照也就是一次备份

save 300 10 #300s内至少有10条写入就会产生快照

save 60 10000 #60s内产生10000条写入就会产生快照

如果持久化出错是否停止主进程的写入

stop-writes-on-bgsave-error yes

是否压缩

rdbcompression yes

导入时是否检查文件

rdbchecksum yes

保存的文件的名称

dbfilename dump.rdb

保存文件地址

dir ./
复制代码
stop-writes-on-bgsave-error yes --是一条很重要的命令,为了保证数据的完整性的

rdbcompression yes 没必要开启,开启会导致cpu的消耗。划不来,默认开启的

在时间策略上面还有一个#save "",这行命令被注释了,如果想要禁用RDB持久化就可以开启这条命令。

RDB持久化是默认开启的,而AOF是默认关闭的

AOF:

1、 三种持久化的策略:1、修改同步2、每秒同步3、不同步。

2、 写入操作采用的是append模式,即使在操作数据到一半系统崩溃的情况下也可在启动之前用redis-check-aof工具来完成数据的回复的一致性的问题。

复制代码

是否开启aof

appendonly no

文件的名称

appendfilename "appendonly.aof"

同步方式

appendfsync always #修改了就同步,比较消耗性能,慢但安全

appendfsync everysec #每秒同步一次,比较折中,默认开启,最多会损失1s的数据

appendfsync no #不开启同步,交给os处理,快但不安全

aof重写期间是否同步

no-appendfsync-on-rewrite no

重写触发的配置

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

加载aof时有错是否继续加载,遇见错误会写入一个log然后继续执行,如果是no的话会终止执行

aof-load-truncated yes
复制代码

   定时任务:

复制代码

The range is between 1 and 500, however a value over 100 is usually not

a good idea. Most users should use the default of 10 and raise this up to

100 only in environments where very low latency is required.

hz 10
复制代码

表示1s内执行10次,可设置1-500之间的数字,通常超过100不是好的想法,100的设置只适合非常低延迟的环境。

七、.Net Core 使用redis 简单介绍

1、引用包 StackExchange.Redis

2、建立一个Redis管理链接类

复制代码
public class RedisManager

{
    static RedisManager()
    {
        if (!string.IsNullOrEmpty(redis连接字符串))
            redisHelp = new RedisHelp(redis连接字符串);
    }
    public static RedisHelp redisHelp { get; set; }
}

复制代码

3、建立一个Redis帮助类

复制代码
     public class RedisHelp

      {
    private ConnectionMultiplexer redis { get; set; }

    private IDatabase db { get; set; }

    public RedisHelp(string connection)
    {
        redis = ConnectionMultiplexer.Connect(connection);
    }
    /// <summary>
    /// 增加/修改string  字符串类型
    /// </summary>
    /// <param name="key"></param>
    /// <param name="value"></param>
    /// <returns></returns>
    public bool SetValue(string key, string value,int timeSpan=0,int indexDb = 0)
    {
        var db = redis.GetDatabase(indexDb);
        //var a = TimeSpan.Parse(timeSpan.ToString());
        var result= db.StringSet(key, value);
        if (timeSpan>0)
        {
            db.KeyExpire(key, DateTime.Now.AddSeconds(timeSpan));
        }
        return result;
    }

    /// <summary>
    ///  查询  字符串类型
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public string GetValue(string key, int indexDb = 0)
    {
        var db = redis.GetDatabase(indexDb);
        return db.StringGet(key);
    }

     ///

    /// 删除
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public bool DeleteKey(string key, int indexDb = 0)
    {
        var db = redis.GetDatabase(indexDb);
        return db.KeyDelete(key);
    }
    /// <summary>
    /// 键是否存在
    /// </summary>
    /// <param name="key"></param>
    /// <param name="indexDb"></param>
    /// <returns></returns>
    public bool KeyExist(string key,int indexDb=0)
    {
        var db = redis.GetDatabase(indexDb);
        var result = db.KeyExists(key);
        return result;
    }
    /// <summary>
    /// 哈希写入字符串
    /// </summary>
    /// <param name="key"></param>
    /// <param name="field"></param>
    /// <param name="value"></param>
    /// <param name="timeSpan"></param>
    /// <param name="indexDb"></param>
    public void HashSetString(string key, string field, string value, int timeSpan = 0, int indexDb = 0)
    {
        var db = redis.GetDatabase(indexDb);
        db.HashSet(key, field, value);
        if (timeSpan>0)
        {
            db.KeyExpire(key,DateTime.Now.AddSeconds(timeSpan));
        }
    }
    /// <summary>
    /// 获取哈希值(单个字符串类型)
    /// </summary>
    /// <param name="key"></param>
    /// <param name="field"></param>
    /// <param name="indexDb"></param>
    /// <returns></returns>
    public string HashGetString(string key, string field, int indexDb = 0)
    {
        var db = redis.GetDatabase(indexDb);
        if (!string.IsNullOrWhiteSpace(key)&&!string.IsNullOrWhiteSpace(field))
        {
            RedisValue result = db.HashGet(key, field);
            if (!string.IsNullOrWhiteSpace(result))
            {
                return result;
            }
        }
        return string.Empty;
    }
    /// <summary>
    /// 删除哈希
    /// </summary>
    /// <param name="key"></param>
    /// <param name="field"></param>
    /// <param name="indexDb"></param>
    /// <returns></returns>
    public bool DeleteHash(string key, string field, int indexDb = 0)
    {
        var db = redis.GetDatabase(indexDb);
        return db.HashDelete(key,field);
    }

}
复制代码
原文地址https://www.cnblogs.com/hulizhong/p/10751529.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android Studio 通过一个登录功能介绍SQLite数据库的使用
前言:         SQLite简介:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
4228 0
git使用详细介绍
一、概述git是一个分布式版本控制的工具。现有公共代码仓库:github,gitee,coding。自建仓库,私有仓库(企业使用):gitlab,gitblit。 二、git与svn对比1、git是分布式的,svn不是此为git与其他非分布式的版本控制系统(例如svn,cvs等)最核心的区别。
1379 0
Spring AOP 使用介绍,从前世到今生
原文出处:https://javadoop.com/post/spring-aop-intro 前面写过 Spring IOC 的源码分析,很多读者希望可以出一个 Spring AOP 的源码分析,不过 Spring AOP 的源码还是比较多的,写出来不免篇幅会大些。
995 0
Cassandra gossip介绍系列之一
介绍cassandra的gossip系列之一
1616 0
Redis介绍使用及进阶
Redis介绍使用及进阶目录: 一、介绍 二、缓存问题 三、Redis内存滥用 四、键命名规范 五、Redis使用场景 六、持久化操作 七、.Net Core 使用redis 简单介绍 一、介绍 1、 高性能-- Redis能读的速度是110000次/s,写的速度是81000次/s 、c语言实现距...
1008 0
开放下载!藏经阁发布新书《OSS运维进阶实战手册》 | 技术日报(11期)
《OSS运维基础实战手册》姊妹篇,云运维工程师不可错过的匠心之作。阿里云工程师韩笠,具有多年对象存储运维以及 SDK 开发经验。本书全景解读OSS各类问题,9大经验场景问题排查技巧,超详细自动化工具介绍及性能调优,助你在OSS运维路上更进一步!
318 0
RedisManager使用手册(六)-- 监控功能介绍
RedisManager Monitor功能和query功能介绍,Monitor模块对Redis 集群的重要指标进行监控,如平均内存占用、客户端连接数、cache命中率,节点内存碎片等,Monitor 模块中支持查看 Config、Info、Slowlog 和查询数据功能。
1879 0
+关注
优惠码发放
阿里云优惠码阿里云推荐券bieryun.com
568
文章
4
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载