.NET 技术 Redis操作经验实现代码

上传人:jay****li 文档编号:207913950 上传时间:2021-11-05 格式:DOCX 页数:17 大小:648.13KB
返回 下载 相关 举报
.NET 技术 Redis操作经验实现代码_第1页
第1页 / 共17页
.NET 技术 Redis操作经验实现代码_第2页
第2页 / 共17页
.NET 技术 Redis操作经验实现代码_第3页
第3页 / 共17页
.NET 技术 Redis操作经验实现代码_第4页
第4页 / 共17页
.NET 技术 Redis操作经验实现代码_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《.NET 技术 Redis操作经验实现代码》由会员分享,可在线阅读,更多相关《.NET 技术 Redis操作经验实现代码(17页珍藏版)》请在金锄头文库上搜索。

1、Redis是一个支持数据结构更多的键值对数据库。它的值不仅可以是字符串等基本数据类型,也可以是类对象,更可以是Set、List、计数器等高级的数据结构。Memcached也可以保存类似于Set、List这样的结构,但是如果说要向List中增加元素,Memcached则需要把List全部元素取出来,然后再把元素增加进去,然后再保存回去,不仅效率低,而且有并发访问问题。Redis内置的Set、List等可以直接支持增加、删除元素的操作,效率很高,操作是原子的。Memcached数据存在内存中,memcached重启后数据就消失;Redis会把数据持久化到硬盘中,Redis重启后数据还存在。1 安装

2、redis for windows =2.8的版本支持直接安装为windows服务(Redis-x64-3.2.100.msi才可以,zip不行)如果下载msi自动装完服务,如果下载zip需要按照下面的方法安装为服务:2 redis与Memcached 区别2.1 redis优缺点2.1.1 redis的优点:1) 支持string、list、set、geo等复杂的数据结构。2) 高命中的数据运行时是在内存中,数据最终还是可以保存到磁盘中,这样服务器重启之后数据还在。3) 服务器是单线程的,来自所有客户端的所有命令都是串行执行的,因此不用担心并发修改(串行操作当然还是有并发问题)的问题,编程模

3、型简单;4) 支持消息订阅/通知机制,可以用作消息队列;5) Key、Value最大长度允许512M;2.1.2 redis的缺点:1) Redis是单线程的,因此单个Redis实例只能使用一个CPU核,不能充分发挥服务器的性能。可以在一台服务器上运行多个Redis实例,不同实例监听不同端口,再互相组成集群。2) 做缓存性能不如Memcached;2.2 Memcached的优缺点2.2.1 Memcached的优点:1) 多线程,可以充分利用CPU多核的性能;2) 做缓存性能最高;2.2.2 Memcached的缺点:1) 只能保存键值对数据,键值对只能是字符串,如果有对象数据只能自己序列化

4、成json字符串;2) 数据保存在内存中,重启后会丢失;3) Key最大长度255个字符,Value最长1M。2.3 总结Memcached只能当缓存服务器用,也是最合适的;Redis不仅可以做缓存服务器(性能没有Memcached好),还可以存储业务数据。3 redis命令行管理客户端3.1 直接启动redis安装目录下的redis-cli即可。执行set myKey abc,就是设置键值对myKey=abc执行get myKey就是查找名字是myKey的值;keys *是查找所有的keykey *n*是查找所有名字中含有n的key3.2 数据没有隔离性和Redis一样,Redis也是不同系

5、统放到Redis中的数据都是不隔离的,因此设定Key的时候也要选择好Key。3.3 尽量选用默认的数据库Redis服务器默认建了16个数据库,Redis的想法是让大家把不同系统的数据放到不同的数据库中。但是建议大家不要这样用,因为Redis是单线程的,不同业务都放到同一个Redis实例的话效率就不高,建议放到不同的实例中。因此尽量只用默认的db0数据库。命令行下可以用select 0、select 1这样的指令切换数据库,最高为15。试试在不同数据库下新建、查询数据。了解的常用的几个命令就可以。所有对数据的操作都可以通过命令行进行,后面讲的.net操作Redis的驱动其实就是对这些命令的封装。

6、4 GUI管理客户端RedisDesktopManager (0.9.3以后需要订阅)5 .NET连接redis推荐组件:StackExchange.Redishttps:/stackexchange.github.io/StackExchange.Redis/其他作品:NewLife.Redis基础教程using (ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(localhost:6379) IDatabase db = redis.GetDatabase();/默认是访问db0数据库,可以通过方法参数指定数字访问不同

7、的数据库 db.StringSet(Name, abc); 支持设置过期时间:db.StringSet(name, , TimeSpan.FromSeconds(10) 获取数据:string s = db.StringGet(Name)/如果查不到则返回null Redis里所有方法几乎都支持异步,比如StringGetAsync()、StringSetAsync(),尽量用异步方法。注意看到访问的参数、返回值是RedisKey、RedisValue类型,进行了运算符重载,可以和string、byte之间进行隐式转换。6 命令6.1 键(Key)因为Redis里所有数据类型都是用KeyVal

8、ue保存,因此Key操作针对所有数据类型, KeyDelete(RedisKey key):根据Key删除; KeyExists(RedisKey key)判断Key是否存在,尽量不要用,因为会有并发问题; KeyExpire(RedisKey key, TimeSpan? expiry)、KeyExpire(RedisKey key, DateTime? expiry)设置过期时间;6.2 字符串(String)可以用StringGet、StringSet来读写键值对,是基础操作StringAppend(RedisKey key, RedisValue value):向Key的Value中附

9、加内容,不存在则新建;6.2.1 场景:计数器可以用作计数器:db.StringIncrement(count, 2.5); 给 count 这个计数器增加一个值,如果不存在则从0开始加;db.StringDecrement(count,1)计数器减值;获取还是用StringGet()获取字符串类型的值。比如可以用这个来计算新闻点击量、点赞量,效率非常高。public class NewsController : Controller private string NEWSPREFIX = WX_NEWS_; / GET: News public async Task Index(int id

10、) using (ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(localhost:6379) IDatabase db = redis.GetDatabase(); /默认是访问db0数据库,可以通过方法参数指定数字访问不同的数据库 string clickCount = NEWSPREFIX + Request.UserHostAddress + _ClickCount_ + id; / Task StringIncrementAsync: / 返回值:The value of key after the incre

11、ment. (递增后的值) long increment = await db.StringIncrementAsync(clickCount); /RedisValue count = await db.StringGetAsync(clickCount); /ViewBag.count = count; ViewBag.count = increment; return View(); index.cshtml点击量:ViewBag.count6.2 列表(List) Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边) 一个列表最多可

12、以包含 232- 1 个元素 (4294967295, 每个列表超过40亿个元素)。6.2.1 常用方法1.从左侧压栈:ListLeftPush(RedisKey key, RedisValue value);2.从左侧弹出:RedisValue ListLeftPop(RedisKey key);3.从右侧压栈:ListRightPush(RedisKey key, RedisValue value );4.从右侧弹出:RedisValue ListRightPop(RedisKey key);5.获取Key为key的List中第index个元素的值:RedisValue ListGetBy

13、Index(RedisKey key, long index) ;6.获取Key为key的List中元素个数:long ListLength(RedisKey key) ;尽量不要用ListGetByIndex、ListLength因为会有并发问题。如果是读取而不pop,则使用ListRange:RedisValue ListRange(RedisKey key, long start = 0, long stop = -1)。不传start、end表示获取所有数据。指定之后则获取某个范围。6.2.2 应用场景可以把Redis的list当成消息队列使用,比如向注册用户发送欢迎邮件的工作,可以在注册的流程中把要发送邮件的邮箱放到list中,另一个程序从list中pop获取邮件来发送。 生产者、消费者模式。把生产过程和消费过程隔离。6.3 集合(Set) Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。 Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232- 1 (4294967295, 每个集合可存储40多亿个成员)。List与Set区别:6.3.1 常用方法SetAdd

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > .NET

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号