Redis常用数据类型包括:string(字符串),list(链表), Hash(哈希),set(集合)及zset(sorted set) (有序集合),Pub/Sub,Transactions
1 String 字符串
常用命令:set,get,decr(递减),incr (递增),mget
String是最常用的一种数据类型,普通的key/value存储都可以归为此类 。一个Key对应一个Value,string类型是二进制安全的。Redis的string可以包含任何数据。
示例(C#):
var cilent=new RedisClient("127.0.0.1",6379);
client.Set<string>("UserName","admin");//Set
string uName=client.Get<string>("Name");//Get
client.Set<int>("VoteUser_Admin",0);//模拟投票
client.Incr("VoteUser_Admin");//投一票 -递增
2 Hash 哈希
常用命令:hget,hset,hgetall 等。
hash是一个string 类型的field和value的映射表。hash特别
适合存储对象。相对于将对象的每个字段存成单个string 类型。一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。
示例(C#):
// 存储一个 User 对象
//第一种方式 增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回
var json = "user序列化字符串";
var hashId = "UserAdmin";
client.Set<string>(hashId, "json");
// 第二种方式
client.SetEntryInHash(hashId, "Name", "Admin");
client.SetEntryInHash(hashId, "IP", "127.0.0.1");
client.SetEntryInHash("UserAdmin", "Pwd", "127.0.0.1");
//获取UserAdmin 的Name
var name = client.GetValueFromHash(hashId, "Name");
//获取所有的UserAdmin Key
var keys = client.GetHashKeys(hashId);
//获取所有UserAdmin value
var values = client.GetHashValues(hashId);
3 List 链表
常用命令:lpush,rpush,lpop,rpop,lrange等。
list是一个链表结构,主要功能是push,pop,获取一个范围的所有的值等,操作中key理解为链表名字。 Redis的list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素,这样list既可以作为栈,又可以作为队列。Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构 。
示例(C#):
#region List基础使用
var key = "demolist";
client.AddItemToList(key, "123");
client.AddItemToList(key, "1234");
Console.WriteLine("List数据项条数:" + client.GetListCount(key));
Console.WriteLine("List数据项第一条数据:" + client.GetItemFromList(key, 0));
Console.WriteLine("List所有数据");
client.GetAllItemsFromList(key).ForEach(e => Console.WriteLine(e));
#endregion
#region 队列使用
client.EnqueueItemOnList("name", "zhangsan");
client.EnqueueItemOnList("name", "lisi");
int count = client.GetListCount("name");
for (int i = 0; i < count; i++)
{
Console.WriteLine(client.DequeueItemFromList("name"));
}
#endregion
#region 栈使用
client.PushItemToList("name2", "wangwu");
client.PushItemToList("name2", "maliu");
int count = client.GetListCount("name2");
for (int i = 0; i < count; i++)
{
Console.WriteLine(client.PopItemFromList("name2"));
}
#endregion
4 Set 集合
常用命令:sadd,spop,smembers,sunion
应用场景:提供一个列表的功能,set可以自动排除重复,当需要存储一个不重复的列表数据,可以选择set。set提供了一个判断某个成员是否在一个set集合中。
5 ZSet 有序集合
常用命令:zadd,zrange ,zrem,zcard
场景:zset 提供一个优先级参数来进行排序,并且是插入有序的,自动排序。需要一个有序的并且不重复的集合列表,可以选用。