【StackExchange.Redis笔记】数据类型操作-String、Hash

String类型

Api

(1).StringSet:写入数据,如果数据已经存在,则覆盖;可以一次性存入1个key-value,也可以一次性存入多个Key-value集合,并且可以设置其过期时间。
(2).StringGet:读取数据,可以一次性读取一个key的value,也可以一次性读取多个key对应的value的集合。
(3).StringAppend:在原有值的基础上进行拼接追加.
(4).StringLength:获取值的长度
(5).StringIncrement:数值自增n,返回自增后的值
(6).StringDecrement:数值自减n,返回自减后的值

案例

//1. 最简单的key-value的添加,如果该key已存在,则替换;可以设置过期时间哦
bool a1 = db.StringSet("101", "f");

//2. 根据key获取值
string data1 = db.StringGet("101");

//3. 在原有的value上进行追加,返回值是最终字符串的长度,如果没有这个key,则当做一个新的key进行添加
long length1 = db.StringAppend("101", "wj");//3

//4. 获取值的长度
long length2 = db.StringLength("101");//3

//获取值
string data2 = db.StringGet("101");//fwj

//5. 数值自增/减
db.StringSet("102", 10);
//自增2,可以自增负值
var data4 = db.StringIncrement("102", 2);
//自减5
var data5 = db.StringDecrement("102", 5);

//6. 插入实体和读取实体 (需要序列化和反序列化)
//由于序列化的原因,肯定不如存到Hash里速度快
People people = new People()
{
    ID = 1,
    Gender = true,
    Name = "fan1",
    Birthday = DateTime.Now
};
db.StringSet("people_101", JsonConvert.SerializeObject(people));
People data6 = JsonConvert.DeserializeObject<People>(db.StringGet("people_101"));

//7. 一次性添加多个key-value集合
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("103", Guid.NewGuid().ToString("N"));
dic.Add("104", Guid.NewGuid().ToString("N"));
dic.Add("105", Guid.NewGuid().ToString("N"));
dic.Add("106", Guid.NewGuid().ToString("N"));
dic.Add("107", Guid.NewGuid().ToString("N"));
dic.Add("108", Guid.NewGuid().ToString("N"));
var keyValues = dic.Select(p => new KeyValuePair<RedisKey, RedisValue>(p.Key, p.Value)).ToArray();
bool data7 = db.StringSet(keyValues);

//8.获取多个key的 value值集合
string[] keys = { "101", "102", "103" };
RedisKey[] redisKeys = keys.Select(u => (RedisKey)u).ToArray();
//此处如果是别的复杂类型要借助JsonConvert进行转换
List<string> data8 = db.StringGet(redisKeys).Select(u => u.ToString()).ToList();

通用API

(1).Execute("FLUSHDB"):删除所有数据,类似SqlServer的truncate
(2).KeyDelete:根据key删除数据,可以删除单个key,也可以删除多个key
(3).KeyExists:判断key是否存在,也可以单个key或者多个key
(4).KeyRename:重命名key
(5).KeyExpire:设置对应key的的过期时间

案例

//1. 删除单个key
bool d1 = db.KeyDelete("101");  //删除成功,返回true
bool d2 = db.KeyDelete("ffff"); //删除不存在的数据,返回false

//3. 删除多个key
string[] arry = { "102", "103", "104" };
RedisKey[] keys = arry.Select(u => (RedisKey)u).ToArray();
long d3 = db.KeyDelete(keys);     //返回的是删除成功的个数

//4. 判断key是否存在(不推荐使用,会有并发问题)
bool d4 = db.KeyExists("102");
bool d5 = db.KeyExists("105");

//5. 重命名key
bool d6 = db.KeyRename("108", "10086");

//6. 设置key的过期时间(1分钟后自动销毁)
bool d7 = db.KeyExpire("107", DateTime.Now.AddMinutes(1));

//7. 删除所有数据
db.Execute("FLUSHDB");

Hash类型

Api

(1).HashSet:存储单个 hashid-key-value
(2).HashGet:单个value的获取; 获取1个hashid对应的所有key集合; 获取1个hashid对应所有的key和value集合.
(3).HashDelete:删除1个hashid-key; 删除1个hashid-多个key
(4).HashIncrement:自增,返回自增后的值
(5).HashDecrement:自减,返回自减后的值
(6).HashExists:判断 hashid-key 是否存在,返回true和value

案例

//1.添加
db.HashSet("People_001", "id", 1);
db.HashSet("People_001", "gender", 1);
db.HashSet("People_001", "name", "fan");
db.HashSet("People_001", "birthday", DateTime.Now.ToString());
db.HashSet("People_001", "name", "fan1");  //会覆盖上面的值
//批量添加
var hashEntries = new HashEntry[] { new HashEntry("id", 2), new HashEntry("gender", 1), new HashEntry("name", "fan2"), new HashEntry("birthday", DateTime.Now.AddYears(-10).ToString()) };
db.HashSet("People_002", hashEntries);

//2.获取
//2.1 单个value的获取
int id = (int)db.HashGet("People_001", "id");
string name = db.HashGet("People_001", "name");
//2.2 获取1个hashid对应所有的key的集合
List<string> keyList = db.HashKeys("People_001").Select(k => (string)k).ToList();
//2.3 获取hashid对应的所有key和value
Dictionary<string, object> dic = new Dictionary<string, object>();
foreach (var item in db.HashGetAll("People_001"))
{
    dic.Add(item.Name, item.Value);
}
//没法一下获取一个实体

//3. 删除
//单个key
bool d1 = db.HashDelete("People_002", "name");
//多个key
string[] dataKeyArry = { "gender", "name", "birthday" };
RedisValue[] redisValueArry = dataKeyArry.Select(u => (RedisValue)u).ToArray();
long deleteNum = db.HashDelete("People_002", redisValueArry);

//4. 自增,自减, 返回自增或自减后的值
db.HashSet("People_002", "age", 20);
long d2 = db.HashIncrement("People_002", "age", 2); //自增2,返回值为22
long d3 = db.HashDecrement("People_002", "age", 3); //自减3,返回值为19

//5. 判断数据是否存在
bool d4 = db.HashExists("People_002", "age");
bool d5 = db.HashExists("People_002", "age2");
posted @ 2020-09-14 13:36  .Neterr  阅读(518)  评论(0编辑  收藏  举报