Redis缓存之Set使用
在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。需要说明的是,这些操作的时间复杂度为O(1),即常量时间内完成次操作。Set可包含的最大元素数量是4294967295。
和List类型不同的是,Set集合中不允许出现重复的元素,这一点和C++标准库中的set容器是完全相同的。换句话说,如果多次添加相同元素,Set中将仅保留该元素的一份拷贝。和List类型相比,Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如unions、intersections和differences。由于这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销。(参考:http://www.cnblogs.com/stephen-liu74/archive/2012/02/15/2352512.html)
Redis做缓存Set可能到的的比较多(一家之言,欢迎拍砖)
打开redis服务器:

打开redis客户端:

这就是一个set集合!
至于redisset的命令小伙伴们可以参考(http://redisdoc.com)
下面分享redis在.net中的使用方法
, 1,获得集合
// 获取sortset表中setId中的所有keys,倒序获取
public List<string> GetAllItemsFromSortedSetDesc(string setId)
{
List<string> result = ExecuteCommand<List<string>>(client =>
{
return client.GetAllItemsFromSortedSetDesc(setId);
});
return result;
} public List<string> GetAllItemsFromSortedSet(string setId)
{
List<string> result = ExecuteCommand<List<string>>(client =>
{
return client.GetAllItemsFromSortedSet(setId);
});
return result;
} // 获取sortset表中setId中的所有keys,values
public IDictionary<string, double> GetAllWithScoresFromSortedSet(string setId)
{
IDictionary<string, double> result = ExecuteCommand<IDictionary<string, double>>(client =>
{
return client.GetAllWithScoresFromSortedSet(setId);
//return client.GetFromHash<Dictionary<string, string>>(hashID);
}); return result;
}
2,删除某个set
// 删除某个KEY的值,成功返回TRUE
public bool RemoveKey(string key)
{
bool result = false;
result = ExecuteCommand<bool>(client =>
{
return client.Remove(key);
});
return result;
} // 删除Set数据中的某个为item的值
public bool RemoveItemFromSet(string setId, string item)
{
byte[] bvalue = System.Text.Encoding.UTF8.GetBytes(item);
bool result = ExecuteCommand<bool>(client =>
{
var rc = client as RedisClient;
if (rc != null)
{
return rc.SRem(setId, bvalue) == 1;
}
return false;
});
return result;
}
3,搜索
//搜索key
public List<string> SearchKeys(string pattern)
{
List<string> result = ExecuteCommand<List<string>>(client =>
{
return client.SearchKeys(pattern);
});
return result;
}
4,增加某个元素到set
public bool AddItemToSet(string setId, string item)
{
byte[] bvalue = System.Text.Encoding.UTF8.GetBytes(item);
bool result = ExecuteCommand<bool>(client =>
{
var rc = client as RedisClient;
if (rc != null)
{
return rc.SAdd(setId, bvalue) == 1;
}
return false;
});
return result; }
这里只分享几个方法,其实还有很多关于set的操作方法。
利用Redis提供的Sets数据结构,可以存储一些集合性的数据,比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。
Redis缓存之Set使用的更多相关文章
- 缓存工厂之Redis缓存
这几天没有按照计划分享技术博文,主要是去医院了,这里一想到在医院经历的种种,我真的有话要说:医院里的医务人员曾经被吹捧为美丽+和蔼+可亲的天使,在经受5天左右相互接触后不得不让感慨:遇见的有些人员在挂 ...
- Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager
Redis缓存服务器是一款key/value数据库,读110000次/s,写81000次/s,因为是内存操作所以速度飞快,常见用法是存用户token.短信验证码等 官网显示Redis本身并没有Wind ...
- 总结:如何使用redis缓存加索引处理数据库百万级并发
前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1000万条数据,可以参考我之前的文章插入数据, ...
- .NET基于Redis缓存实现单点登录SSO的解决方案[转]
一.基本概念 最近公司的多个业务系统要统一整合使用同一个登录,这就是我们耳熟能详的单点登录,现在就NET基于Redis缓存实现单点登录做一个简单的分享. 单点登录(Single Sign On),简称 ...
- Redis缓存连接池管理
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.util.Assert;import ...
- ssm+redis 如何更简洁的利用自定义注解+AOP实现redis缓存
基于 ssm + maven + redis 使用自定义注解 利用aop基于AspectJ方式 实现redis缓存 如何能更简洁的利用aop实现redis缓存,话不多说,上demo 需求: 数据查询时 ...
- Windows Azure Redis 缓存服务
8月20日,Windows Azure (中国版)开始提供Redis缓存服务,比较国际版的Microsoft Azure晚了差不多一年的时间.说实话,微软真不应该将这个重要的功能delay这么长时间, ...
- .NET基于Redis缓存实现单点登录SSO的解决方案
一.基本概念 最近公司的多个业务系统要统一整合使用同一个登录,这就是我们耳熟能详的单点登录,现在就NET基于Redis缓存实现单点登录做一个简单的分享. 单点登录(Single Sign On),简称 ...
- spring boot redis缓存JedisPool使用
spring boot redis缓存JedisPool使用 添加依赖pom.xml中添加如下依赖 <!-- Spring Boot Redis --> <dependency> ...
- spring aop搭建redis缓存
SpringAOP与Redis搭建缓存 近期项目查询数据库太慢,持久层也没有开启二级缓存,现希望采用Redis作为缓存.为了不改写原来代码,在此采用AOP+Redis实现. 目前由于项目需要,只需要做 ...
随机推荐
- 【BZOJ】2956: 模积和
题意 求\(\sum_{i=1}^{n} \sum_{j=1}^{m} (n \ mod \ i)(m \ mod \ j)[i \neq j] \ mod \ 19940417\), \((n, m ...
- HDU 4741 Save Labman No.004(计算几何)
题目链接 抄的模版...mark一下. #include <iostream> #include <cstring> #include <cstdio> #incl ...
- GO语言练习:switch基本用法
1.代码 2.运行 1.代码 package main import "fmt" func switch_1(i int){ switch i { : fmt.Println(&q ...
- mysql安装及卸载
一.关于mysql MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是 ...
- [LintCode] Coins in a Line II 一条线上的硬币之二
There are n coins with different value in a line. Two players take turns to take one or two coins fr ...
- asp.net 获取当前项目的根目录路径
获取网站根目录的方法有几种如: Server.MapPath(Request.ServerVariables["PATH_INFO"]) Server.MapPath(" ...
- 前端技术-PS切图
页面制作部分之PS切图 <--本标签下,通过页面制作.页面架构.javascript程序设计.DOM编程艺术.产品前端架构五部分来分享总结笔记,总结笔记会陆续分享--> 网页设计在技术层面 ...
- MVC概念性的内容
MVC: 是一个缩写(model + view + control), Model:是一些类文件, 功能:负责增删改查, 负责跟数据库打交道 (把数据存入到数据库: 从数据库把数据读 ...
- iOS -- AVAudioPlayer播放音乐
一. AVAudioPlayer: 声明音乐控件AVAudioPlayer,必须声明为全局属性变量,否则可能不会播放,AVAudioPlayer只能播 ...
- BizTalk开发系列(三十)单向端口实现请求-响应
BizTalk本质上是异步的消息处理引擎.BizTalk的请求与响应模式是基于异步之上的同步消息交换.消息引擎通过消息的扩展架构链接许 多异步消息,消息的相关集关联请求与响应消息.例如,客户端发送一个 ...