概述

Redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value(字典, Remote Dictionary Server,远程字典服务器)数据库。

客户端:http://redis.io/clients

命令: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演示及使用场景的更多相关文章

  1. redis数据类型及使用场景

    Redis数据类型  String: Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字. 常用命令:  set,get,decr,incr,mge ...

  2. Redis数据结构以及应用场景

    1. Redis数据结构以及应用场景 1.1. Memcache VS Redis 1.1.1. 选Memcache理由 系统业务以KV的缓存为主,数据量.并发业务量大,memcache较为合适 me ...

  3. redis各种数据结构使用场景

    一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...

  4. Redis数据结构和使用场景,redis内存淘汰策略

    什么样的数据适合放入Redis? sql执行耗时特别久,且结果不频繁变动的数据,适合放入Redis. Redis是单线程的,为什么会这么快? 纯内存操作 单线程操作,避免频繁的上下文切换 采用了非阻塞 ...

  5. Redis各类型应用场景

    Redis的六种特性 l ,重要消息的,然后工作线程可以选择按 ret = r.zincrby("login:login_times", 1, uid) //那么如何获得登录次数最 ...

  6. Memcached和Redis对比和适用场景

    关于memcached和redis的使用场景,根据大神们的讨论和我在网上查到的资料,总结一下: 两者对比: redis提供数据持久化功能,memcached无持久化: redis的数据结构比memca ...

  7. 【转载】Redis的一些使用场景

    看了一些文章,关于Redis的使用场景,觉得挺好的.Redis肯定远远不止作为缓存而使用.Redis更像是一个实现很好的数据结构服务器,通过TCP栈协议提供服务.下面进行详细描述. http://da ...

  8. Redis常见的应用场景解析

    Redis是一个key-value存储系统,现在在各种系统中的使用越来越多,大部分情况下是因为其高性能的特性,被当做缓存使用,这里介绍下Redis经常遇到的使用场景. Redis特性 一个产品的使用场 ...

  9. redis数据类型和应用场景

    Redis是什么?两句话可以做下概括: 1. 是一个完全开源免费的key-value内存数据库 2. 通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构 strings.map. list ...

随机推荐

  1. Node.js- sublime搭建node的编译环境

    自动配置: 1.安装package control(见 http://www.cnblogs.com/padding1015/p/7763014.html) 2.sublime编辑器中,按快捷键:ct ...

  2. Oracle 学习之 Select 1

    1. select 1 from table           增加临时列,每行的列值是写在select后的数,这条sql语句中是1,若select后为2,则是每行为2的列 2:select cou ...

  3. shell 进制转换

    包括: i.任意进制转化为十进制((num=base#number)) [base和number必须一致,是同一种进制] ii.十进制转化为任意进制`echo "obase=进制;值&quo ...

  4. Angular打开页面隐藏显示表达式

    1.使用 ng-cloak, 同时要在css加入一行 [ng-cloak] {display: none;} 样式 [ng:cloak], [ng-cloak], [data-ng-cloak], [ ...

  5. Docker容器挂载宿主目录的情形分析

    Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定. 譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定: # docker ...

  6. django之admin设置

    Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据.后台管理可以在各个app的admin.py文件中进行控制.以下是我最近摸索总结出比较实用的配置.若你有什么比较好的配置 ...

  7. 初学Listener

    一. Listener 介绍 Servlet API提供了大量监听器来监听web应用的的内部事件,从而允许当web内部事件发生时回调事件监听器内的方法. 使用listener分为两步 定义LIsten ...

  8. 安装coreseek与sphinx遇见的问题

    1.问题 using config file 'etc/csft.conf'...indexing index 'xml'...WARNING: source 'xml': xmlpipe2 supp ...

  9. 170821、本地代码上传gitlub

    第一步:建立git仓库 cd到你的本地项目根目录下,执行git命令 git init #初始化项目 第二步:将项目的所有文件添加到仓库中 git add . 或者git add -A #如果想添加某个 ...

  10. WF的简单使用

    WWF(Windows Workflow Foundation):是微软提供的工作流技术,工作流就是对工作流程的规范和抽象.主要有三个部分Activity(活动).Runtime(工作流运行时)和To ...