一. 简介
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。
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-server.exe】,打开可视化客户端RedisDesktopManager进行查看。
②.通过Nuget给Utils层安装程序集【StackExchange.Redis】,将Redis的两个帮助类RedisHelp和RedisHelp2也放到该类,这里我们使用RedisHelp类。
分享RedisHelp相关类代码
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 }