Redis演示及使用场景
概述
Redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value(字典, Remote Dictionary Server,远程字典服务器)数据库。
命令:http://redis.io/commands http://redisdoc.com
.NET开发程序配置
- ServiceStack.Common.dll
- ServiceStack.Interfaces.dll
- ServiceStack.Redis.dll
- ServiceStack.Text.dll
程序配置Redis服务IP和端口
static RedisClient Redis = new RedisClient("192.168.100.118", );
双击运行:redis-server.exe

Redis Desktop Manager 介绍
Redis Desktop Manager(RedisDesktopManager,RDM)是一个快速、简单、支持跨平台的 Redis 桌面管理工具,基于 Qt 5开发(一个跨平台的C++图形用户界面应用程序框架),支持通过 SSH Tunnel 连接。
下载地址:http://redisdesktop.com/download
配置Redis服务地址:

查看可视化keys的值:

C#操作5种基本数据类型
1. 字符串
A: 存储普通字符串,并设置过期时间
int expireTime = 5000;// 5S
存储:client.Add<string>("StringKey","StringValue", DateTime.Now.AddMilliseconds(expireTime));
获取:client.Get<string>("StringKey"), DateTime.Now);
B: 存储类对象
Student stud = new Student() { id = "1000", name = "张三" };
存储:client.Add<Student>("StringEntity", stud);
获取:Student Get_stud = client.Get<Student>("StringEntity");
测试用例输出结果:

2. 哈希
存储: client.SetEntryInHash("HashID", "Name", "张三");
A: 遍历HashID值为HashID的keys
获取:List<string> HaskKey = client.GetHashKeys("HashID");
B:遍历HashID值为HashID的values
获取:List<string> HaskValue = client.GetHashValues("HashID");
C:遍历所有keys
获取:List<string> AllKey = client.GetAllKeys();
测试用例输出结果:

3. 链表
A: 队列
入队:client.EnqueueItemOnList("QueueListId",
"1");
出队:long q =
client.GetListCount("QueueListId");
client.DequeueItemFromList("QueueListId"));
B: 栈
入栈:client.PushItemToList("StackListId",
"1");
出栈:client.PopItemFromList("StackListId")
测试用例输出:

4. 无序集合
存储: client.AddItemToSet("SetA", "1");
获取:HashSet<string> setA = client.GetAllItemsFromSet("SetA");
A:并集
HashSet<string> hashUnion = client.GetUnionFromSets(new string[] { "SetA", "SetB" });
B:交集
HashSet<string> intersectSet = client.GetIntersectFromSets(new string[] { "SetA", "SetB" });
C:差集
HashSet<string> setOfDiffSetAToSetB = client.GetDifferencesFromSet("SetA", new string[] { "SetB" });
测试用例输出:

5. 有序集合
存储:client.AddItemToSortedSet("SetSorted", "A");
输出:List<string> listSetSorted = client.GetAllItemsFromSortedSet("SetSorted");
测试用例输出:

Redis应用场景
只是介绍我本人在使用Redis时用到的场景,仅个人观点。
A.抢XXX赠券、抽奖系统的奖品库存,使用的Redis中的链表
前一天晚上通过定时服务推送奖品库存,使用LPUSH命令将乱序的奖品推入List中,抽奖时则调用LPOP命令,将最左侧奖品弹出队列,提示用户中奖。同时,发送异步消息,让消息去处理中奖纪录并插入关系型数据库中。
好处:
出队操作速度极快,可以满足多人并发抽奖的场景。
使用了消息队列,避免了数据库并发操作。
B.某活动累计充值xxx元,奖励xxx。使用Redis中的string/hash(哈希)结构

用户每次充值,都发送一个充值MQ事件(使用RabbitMQ),另一个程序,消费充值MQ事件,将事件中的用户ID、充值金额分别存到Redis(string/hash)里面。
以后,就可以直接汇总用户总充值金额给满足条件的客户赠送奖品。
好处:
完全避免了关系性数据库的查询插入操作
Redis的查询速度非常快,提升了用户体验
扩展阅读
1. redis持久化RDB和AOF http://my.oschina.net/davehe/blog/174662
2. Redis作者谈Redis应用场景 http://blog.nosqlfan.com/html/2235.html
3. Redis使用总结之与Memcached异同 http://www.cnblogs.com/ceecy/p/3279407.html
4. Redis内存使用优化与存储 http://www.infoq.com/cn/articles/tq-redis-memory-usage-optimization-storage
5. Redis学习手册(目录) http://www.cnblogs.com/stephen-liu74/archive/2012/04/16/2370212.html
演示代码下载:http://download.csdn.net/detail/jys1216/8991915
Redis演示及使用场景的更多相关文章
- redis数据类型及使用场景
Redis数据类型 String: Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字. 常用命令: set,get,decr,incr,mge ...
- Redis数据结构以及应用场景
1. Redis数据结构以及应用场景 1.1. Memcache VS Redis 1.1.1. 选Memcache理由 系统业务以KV的缓存为主,数据量.并发业务量大,memcache较为合适 me ...
- redis各种数据结构使用场景
一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...
- Redis数据结构和使用场景,redis内存淘汰策略
什么样的数据适合放入Redis? sql执行耗时特别久,且结果不频繁变动的数据,适合放入Redis. Redis是单线程的,为什么会这么快? 纯内存操作 单线程操作,避免频繁的上下文切换 采用了非阻塞 ...
- Redis各类型应用场景
Redis的六种特性 l ,重要消息的,然后工作线程可以选择按 ret = r.zincrby("login:login_times", 1, uid) //那么如何获得登录次数最 ...
- Memcached和Redis对比和适用场景
关于memcached和redis的使用场景,根据大神们的讨论和我在网上查到的资料,总结一下: 两者对比: redis提供数据持久化功能,memcached无持久化: redis的数据结构比memca ...
- 【转载】Redis的一些使用场景
看了一些文章,关于Redis的使用场景,觉得挺好的.Redis肯定远远不止作为缓存而使用.Redis更像是一个实现很好的数据结构服务器,通过TCP栈协议提供服务.下面进行详细描述. http://da ...
- Redis常见的应用场景解析
Redis是一个key-value存储系统,现在在各种系统中的使用越来越多,大部分情况下是因为其高性能的特性,被当做缓存使用,这里介绍下Redis经常遇到的使用场景. Redis特性 一个产品的使用场 ...
- redis数据类型和应用场景
Redis是什么?两句话可以做下概括: 1. 是一个完全开源免费的key-value内存数据库 2. 通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构 strings.map. list ...
随机推荐
- 2015.7.7js-07-2(基础)
1.用求模来计算时间,秒%60,就能获取剩余的秒 var s = 362; var minute = parseInt(s/60) + "分" //取得分 var second = ...
- Java中的一些性能监控和故障分析工具
这些工具都在JDK的bin目录下,如果配置了java的环境变量,可以直接在命令行里调用这些小工具 jps 查看java进程信息 jstat java虚拟机状态监控工具 jstat -gc(或 -gcn ...
- JavaScript—倒计时
当前时间-倒计时下载 效果: 代码: <!doctype html> <html> <head> <meta http-equiv="Content ...
- C# 读取xml时,遇到xmlns的问题
1.读取xml的时候,由于xml里有xmlns的属性,导致了读xml无法正常读取.通过网上搜索,发现需要先注册命名空间. xmlns是XML Namespaces的缩写,中文名称是XML(标准通用标 ...
- python计算均值方差
用Python求均值与方差,可以自己写,也可以借助于numpy,不过到底哪个快一点呢? 我做了个实验,首先生成9百万个样本: nlist=range(0,9000000) nlist=[float(i ...
- 微信小程序---示例DEMO
转:CSDN的文章: https://blog.csdn.net/rolan1993/article/details/73467867 不错的DEMO: https://github.com/skyv ...
- em 单位
借 Lea verou 的话: 当某些值相互依赖时,应该把它们的相互关系用代码表达出来. 通常情况下,我们会希望字号和其他尺寸能够跟父元素的字号建立关联,此时em就很好的表达了这种关系. 在CSS V ...
- Navicat 同步数据库中数据
Navicat工具同步两个数据库中的数据 第一步在我们的电脑里面打开navicat软件,打开要复制表的数据库,如下图所示: 第二步点击上方的“工具->数据传输”,如下图所示: 第三步进 ...
- DISTINCT 与 GROUP BY 的比较
看了很多文章,这两个SQL语句在不同的数据库上面的实现上可能有相同或有不同,但是应当要明确它们在功能概念上的区别,最终得出结论: GROUP BY 用来使用聚集函数获得值,比如 AVG, MAX, M ...
- Oracle之RMAN备份恢复1-基础篇
1,rman的作用与体系架构 1.1 什么是rman rman(recovery manager)是oracle8i以后dba的一重要工具一般位于$oracle_home/bin目录下,主要用来备份, ...