一. 简介

1. 什么是Redis?

  全称“Remote Dictionary Server”,基于内存管理数据,它有多种数据结构(常用的5种),分别应对不同场景;它是单线程模型的,所以不会存在并发问题,数据不会出现中间状态;对外提供:增删改查、固化、集群等功能,包含0-15个数据存储库。

PS:Redis主要用来提升性能的,尽量不要作为数据的最终依据(当然可以配置高并发架构持久化存储到硬盘)。

官网:https://redis.io/         下载地址:https://download.redis.io/releases/

中文版:http://www.redis.cn/

2. Redis优点

(1).支持 string、hash、set、sortedset、list、geo 等复杂的数据结构。

(2).高命中的数据运行时是在内存中,数据最终还是可以保存到磁盘中,这样服务器重启之后数据还在。

(3).服务器是单线程的,来自所有客户端的所有命令都是串行执行的,因此不用担心并发修改(串行操作当然还是有并发问题)的问题,编程模型简单。

(4).支持消息订阅/通知机制,可以用作消息队列。

(5).Key、Value 最大长度允许512M。

  特别说明:Redis的单线程不用担心并发指定是每个单一操作之间是单线程,比如客户端同时发过来多个针对同一key的StringIncrement自增操作,Redis端是串行进行的,有先后,不会同时进行。 但是如果客户端每个请求是一个组合操作,比如:先KeyExists,再KeyDelete;这个时候很可能第一个客户端KeyExists的时候,数据是存在的,当它要KeyDelete,该数据已经被别的客户端删除了。

3.Redis缺点

(1) Redis 是单线程的,因此单个 Redis 实例只能使用一个CPU核,不能充分发挥服务器的性能。可以在一台服务器上运行多个 Redis 实例,不同实例监听不同端口,再互相组成集群。

(2) 做缓存性能不如 Memcached;

4. 常用工具说明和下载

(1) Redis的Windows版本下载

  https://github.com/MicrosoftArchive/redis/tags, 目前最新版本【3.2.1】, .zip类型的是手动exe打开部署, .msi是自动部署成windows服务。

PS:Linux下的Redis已经到了5.x版本了

(2) .Net的两个程序集

  a. StackExchange.Redis:免费.【推荐】 (目前最新版本:2.0.601),里面的每类方法基本上都有对应的异步方法

  b. ServiceStack.Redis:收费(1小时3600次请求限制),但可以破解,后面介绍

(3).可视化客户端程序:RedisDesktopManager

5. 六大数据结构

(1).String:典型的key-value集合。

(2).Hash:一个key(hashid)对应,多个key-value集合。

(3).Set:一个key对应多个value,且value值不重复,且无序。

(4).SortedSet:一个key对应多个 member-score,member不重复。

(5).List:是一个双向链表,可以左进、左出、右进、右出。

(6).Geo:用来保存兴趣点(POI,point of interest)的坐标信息。可以实现计算两 POI 之间的距离、获取一个点周边指定距离的 POI。

Redis由浅入深系列(废弃,已经建新目录了)

 

6.Windows版Redis包含文件介绍

(1). redis-server.exe:Redis的服务程序

(2). redis-cli.exe:连接当前Redis服务的客户端

(3). redis.conf : redis相应配置

(4). redis-check-aof.exe:更新日志检查

(5). dump.rdb:持久化到本地保存的数据库文件

 Redis由浅入深系列(废弃,已经建新目录了)

二. 基本使用

 前提:

  ①.管理员身份启动Redis服务器【redis-server.exe】,打开可视化客户端RedisDesktopManager进行查看。

  ②.通过Nuget给Utils层安装程序集【StackExchange.Redis】,将Redis的两个帮助类RedisHelp和RedisHelp2也放到该类,这里我们使用RedisHelp类。

分享RedisHelp相关类代码

Redis由浅入深系列(废弃,已经建新目录了)
 1     /// <summary>
 2     /// Redis帮助类(写法1)
 3     /// </summary>
 4     public class RedisHelp
 5     {
 6         private string _connectionString; //连接字符串
 7         private int _defaultDB; //默认数据库
 8         private readonly ConnectionMultiplexer connectionMultiplexer;
 9 
10         /// <summary>
11         /// 构造函数
12         /// </summary>
13         /// <param name="connectionString"></param>
14         /// <param name="defaultDB">默认使用Redis的0库</param>
15         public RedisHelp(string connectionString, int defaultDB = 0)
16         {
17             _connectionString = connectionString;
18             _defaultDB = defaultDB;
19             connectionMultiplexer = ConnectionMultiplexer.Connect(_connectionString);
20         }
21 
22         /// <summary>
23         /// 获取数据库
24         /// </summary>
25         /// <returns></returns>
26         public IDatabase GetDatabase()
27         {
28             return connectionMultiplexer.GetDatabase(_defaultDB);
29         }
30 
31     }
RedisHelp

相关文章: