Redis实战与 Session缓存
来源:互联网 发布:手机淘宝怎么换皮肤 编辑:程序博客网 时间:2024/05/22 14:30
C#操作Redis的库有很多,比如C# Redis Client就很好用,在NuGet上搜索 ServiceStack.Redis 安装到项目中,将会添加以下引用 ServiceStack.Redis 库为我们提供了RedisClient类,其继承了IDisposable接口,所以可用using块来代替try-catch-finally.Redis有几种常用的数据类型: 1.String 2.Hash(Hash表) 3.List(双向链表) 4.Set(集合类型) 5.Sorted setRedisClient中常用的方法方法 说明Add 根据传入的key-value添加一条记录,当key已存在返回falseFlushAll 使所有缓存失效(清除Redis所有数据库的所有Key)Get 根据传入的key获取一条记录的值GetAll 根据传入的多个key获取多条记录的值Remove 根据传入的key移除一条记录RemoveAll 根据传入的多个key移除多条记录Replace 根据传入的key覆盖一条记录的值,当key不存在不会添加Set 根据传入的key修改一条记录的值,当key不存在则添加SetAll 根据传入的多个key覆盖多条记录Increment Decrement 针对实体对象的存储,RedisClient提供了: public bool Set(string key, T value); public bool Set(string key, T value, TimeSpan expiresIn); public bool Set(string key, T value, DateTime expiresAt); public T Get(string key);泛型方法,可以方便的存储实体对象。针对某些事务,RedisClient提供了:方法 说明AcquireLock 申请对一个Key加锁(期间其他对象不能访问)CreateTransaction 创建一个事务,返回一个IRedisTransaction对象CreateSubscription 创建一个订阅事件返回一个IRedisSubscription对象CreatePipeline 返回一个IRedisPipeline对象 下面我们写一个简单Redis操作的帮助类 命名为RedisHelper,为SessionHelper做准备. 其中_ip = "127.0.0.1"表示本机回传地址,_port = 6379为Redis服务端口.复制代码 public class RedisHelper : IRedisHelper { private readonly string _ip = "127.0.0.1"; private readonly int _port = 6379; private readonly string _passWord = string.Empty; public int Expire { get; set; } public RedisHelper(int expireTime=1200) { Expire = expireTime; } public RedisHelper(string ip, int port, string passWord, int expireTime=1200) { _ip = ip; _port = port; _passWord = passWord; Expire = expireTime; } public T GetValue(string key) { using (var redisClient = GetRedisClient()) { return redisClient.Get(key); } } public bool SetValue(string key,string value) { using (var redisClient = GetRedisClient()) { if (!redisClient.Set(key, value)) return false; SetExpire(redisClient, key); return true; } } public void SetValue(string key,T value) { using (var redisClient = GetRedisClient()) { if (redisClient.Set(key, value)) SetExpire(redisClient, key); } } public void Delete(string key) { using (var redisClient = GetRedisClient()) { redisClient.Remove(key); } } private RedisClient GetRedisClient() { return new RedisClient(_ip, _port, _passWord); } private void SetExpire(IRedisNativeClient redisClient,string key) { redisClient.Expire(key, Expire); } }复制代码 有了RedisHelper 我们再来写一个管理Session的类:复制代码 public class SessionHelper:RedisHelper, ISessionHelper { public T GetSession(string token) { return !string.IsNullOrEmpty(token) ? GetValue(token) : default(T); } public string CreateSession(T value) { var guid = Guid.NewGuid().ToString("D"); SetValue(guid,value); return guid; } public void RemoveSession(string token) { Delete(token); } }复制代码 至此 我们在Controller中写一个Login方法来测试一下。复制代码 public ActionResult Login() { //登录逻辑 var userLoginInfo = new UserSession { Id = 12, Name = "Test", Permissions = new List{"Home.page"} }; var token = _sessionHelper.CreateSession(userLoginInfo); var cookie = new HttpCookie("User") { Expires = DateTime.Now.AddMinutes(20), Value = token }; Response.AppendCookie(cookie); return View(); }复制代码 当然 结果是成功的图就不贴了,这就是 Cookie+缓存 实现一套最基本的会话管理机制。
0 0
- Redis实战与 Session缓存
- Redis缓存Session
- redis做session缓存,打包
- Spring Boot缓存实战 Redis
- ajax缓存与session
- memcache缓存与redis缓存
- 分布式缓存技术redis学习系列(五)——redis实战(redis与spring整合,分布式锁实现)
- 分布式缓存技术redis学习系列(五)——redis实战(redis与spring整合,分布式锁实现)
- 分布式缓存技术redis学习系列(五)——redis实战(redis与spring整合,分布式锁实现)
- Golang web 开发实战之 session 缓存:如何使用 redigo 将一个结构体数据保存到 redis?
- Redis缓存与 Java
- 基于redis缓存的session共享
- 负载均衡session共享redis缓存
- 整合spring session 用redis 做缓存
- redis缓存和cookie实现Session共享
- 实战 Redis 缓存(初级篇)
- Redis实战(一) 使用缓存合理性
- Redis实战(一) 使用缓存合理性
- PHP学习笔记——循环结构for语句应用
- 四大组件 — Activity启动模式
- Base64编码原理与应用
- IDG资本牛奎光:人工智能创业的机会和坑
- auto_ptr-----智能指针
- Redis实战与 Session缓存
- 四大组件 — Activity启动方式
- Mysql Group Replication 简介及单主模式组复制配置
- pwnable之input
- 关于Html5
- Java程序开发体验——Hello World
- 四大组件 — Activity视图动画
- codeforces 789/problem/B [map][坑]
- java设计模式之过滤器模式