目录:

一、介绍

二、缓存问题

三、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     #在900s至少有一条写入就会触发一次快照也就是一次备份

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

save     #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 

auto-aof-rewrite-min-size 64mb

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

aof-load-truncated yes

定时任务:

# The range is between  and , however a value over  is usually not

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

#  only in environments where very low latency is required.

hz 

表示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=,int indexDb = )
{
var db = redis.GetDatabase(indexDb);
//var a = TimeSpan.Parse(timeSpan.ToString());
var result= db.StringSet(key, value);
if (timeSpan>)
{
db.KeyExpire(key, DateTime.Now.AddSeconds(timeSpan));
}
return result;
} /// <summary>
/// 查询 字符串类型
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public string GetValue(string key, int indexDb = )
{
var db = redis.GetDatabase(indexDb);
return db.StringGet(key);
}
     /// <summary>
/// 删除
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool DeleteKey(string key, int indexDb = )
{
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=)
{
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 = , int indexDb = )
{
var db = redis.GetDatabase(indexDb);
db.HashSet(key, field, value);
if (timeSpan>)
{
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 = )
{
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 = )
{
var db = redis.GetDatabase(indexDb);
return db.HashDelete(key,field);
}
}

欢迎大家扫描下方二维码,和我一起学习更多的知识

Redis介绍使用及进阶的更多相关文章

  1. Redis介绍以及安装(Linux)

    Redis介绍以及安装(Linux) redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcached类似,但很大程度补偿了memcached的不足,它支持存储的 ...

  2. Redis介绍及常用命令

    一 Redis介绍 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发 ...

  3. redis 介绍和常用命令

    redis 介绍和常用命令 redis简介 Redis 是一款开源的,基于 BSD 许可的,高级键值 (key-value) 缓存 (cache) 和存储 (store) 系统.由于 Redis 的键 ...

  4. Redis介绍及Jedis测试

    1.Redis简介 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes ...

  5. redis笔记总结之redis介绍

    一.Redis介绍: redis的发展历史简单的理解为因为使用类似MySql这类关系型数据库不方便进而开发的开源的.轻量级的.非关系型的,直到现在一直不断完善的一款NoSql数据库.具体的介绍大家可以 ...

  6. redis介绍、安装、redis持久化、redis数据类型

    1.redis介绍  2.安装管网:https://redis.io/下载:wget -c http://download.redis.io/releases/redis-4.0.11.tar.gz解 ...

  7. redis介绍以及安装

    一.redis介绍 redis是一个key-value存储系统.和Memcached类似,它支持存储的values类型相对更多,包括字符串.列表.哈希散列表.集合,有序集合. 这些数据类型都支持pus ...

  8. Redis介绍以及安装(Linux)

    Redis介绍以及安装(Linux) redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcached类似,但很大程度补偿了memcached的不足,它支持存储的 ...

  9. [Redis_1] Redis 介绍 && 安装

    0. 说明 Redis 介绍 && 安装 1. Redis 介绍 2. Redis 安装(Windows 10) [2.1 解压 redis-2.2.2-win32-win64.rar ...

随机推荐

  1. Kapacitor之TICK脚本,监控输出

    好久没更新博客园了,说来也惭愧,之前说好每隔几天更新一个的,虽然没什么人看,但是作为一个记录,回顾也是能有新的认识,这篇博客是讲的目前我在工作中使用的一个结束点,这个技术点目前网上资料少之甚少,也是希 ...

  2. 多层嵌套的json数据

    很多时候我们见到的json数据都是多层嵌套的,就像下面这般: {"name":"桔子桑", "sex":"男", , & ...

  3. HTML 学习笔记 day three

    HTML学习笔记 Day three 7.2插入多媒体元素 插入音乐 语法结构:<embed  src=”音乐文件的路径”></embed> 属性: Autostart:他只有 ...

  4. MySQL无法存储emoji表情方案

    今天学习爬虫爬伯乐在线的文章,由于在文章中有emoji表情,导致有emoji表情的文章都爬取不下来 经过一番搜索之后终于解决了问题. 原文可参考: 1. MySQL无法存储Emoji表情问题 2. m ...

  5. API文档模板

    接口说明: 登录接口 修订历史: 版本号 制定人 修订日期 0.0.2 zenghui 2017-09-27 0.0.1 zanshan 2017-02-20 URL: http://xxx.xx.c ...

  6. Math对象中比较常用的计算数学相关的三个方法

    Math类中提供了三个与取整有关的方法:ceil.floor.round,这些方法的作用与它们的英文名称的含义相对应,例如: ceil的英文意义是天花板,该方法就表示向上取整,所以,Math.ceil ...

  7. Java基础系列--桶排序

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/9045967.html 1.算法简介 桶排序可以算是最简单快速的排序算法了,只是限定条件要多 ...

  8. activemq的消息确认机制ACK

    一.简介 消息消费者有没有接收到消息,需要有一种机制让消息提供者知道,这个机制就是消息确认机制. ACK(Acknowledgement)即确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符 ...

  9. Eclipse安装Jetty插件

    通过Eclipse MarketPlace安装Jetty插件. Jetty下载 1.  2.3.4.5. 注:在使用Jetty的时候,同一个Project中,不可以同时存在两个版本的库,否则会出现找不 ...

  10. SSM-SpringMVC-16:SpringMVC中小论注解式开发之访问方式篇

     ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 访问方式可以指定,打个比方,你通过get方式进入登陆页面,通过post发送ajax数据库校验或者post提交 ...