Reputation: 8256
I am new to Redis and using VS 2015 and the ASP.NET Core app (v 1.0), I installed the nugget package:
Install-Package StackExchange.Redis
However I am not able to inject and configure it into my services, there is no RedisCache or "AddDistributedRedisCache" method.
How can I inject and use it?
Upvotes: 9
Views: 21767
Reputation: 1998
Install-Package StackExchange.Redis
Redis service:
public class RedisService : IDisposable
{
private readonly IConnectionMultiplexer Connection;
private readonly string _connectionString;
public RedisService(IConfiguration Configuration, ILogger<RedisService> logger)
{
_connectionString = Configuration.GetConnectionString("redis connection string");
var conn = new Lazy<IConnectionMultiplexer>(() => ConnectionMultiplexer.Connect(_connectionString));
Connection = conn.Value;
Main = Connection.GetDatabase(1);
logger.LogWarning("Redis Service Attached!");
}
public IDatabase Main { get; }
public void Dispose()
{
Connection?.Dispose();
}
}
add service in startup.cs
services.AddSingleton<RedisService>();
now use it in your Controller
Upvotes: 0
Reputation: 81
I used the following solution and got the answer.
1.Download Redis-x64-3.0.504.msi and install it (link)
2.Install Microsoft.Extensions.Caching.StackExchangeRedis
from Nuget Packge Manager
3.Inside the Startup.cs class ,In the ConfigureServices method, add this command:
services.AddStackExchangeRedisCache(options => options.Configuration = "localhost:6379");
inject IDistributedCache to the controller:
private readonly IDistributedCache _distributedCache;
public WeatherForecastController( IDistributedCache distributedCache)
{
_distributedCache = distributedCache;
}
5.In the end:
[HttpGet]
public async Task<List<string>> GetStringItems()
{
string cacheKey = "redisCacheKey";
string serializedStringItems;
List<string> stringItemsList;
var encodedStringItems = await _distributedCache.GetAsync(cacheKey);
if (encodedStringItems != null)
{
serializedStringItems = Encoding.UTF8.GetString(encodedStringItems);
stringItemsList = JsonConvert.DeserializeObject<List<string>>(serializedStringItems);
}
else
{
stringItemsList = new List<string>() { "John wick", "La La Land", "It" };
serializedStringItems = JsonConvert.SerializeObject(stringItemsList);
encodedStringItems = Encoding.UTF8.GetBytes(serializedStringItems);
var options = new DistributedCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromMinutes(1))
.SetAbsoluteExpiration(TimeSpan.FromHours(6));
await _distributedCache.SetAsync(cacheKey, encodedStringItems, options);
}
return stringItemsList;
}
Good luck!!!
Upvotes: 3
Reputation: 1349
01.Download latest redis from download ,install and start the redis service from services.msc
02.Add two library in project.json
"Microsoft.Extensions.Caching.Redis.Core": "1.0.3",
"Microsoft.AspNetCore.Session": "1.1.0",
03.Add you dependency injection in
public void ConfigureServices(IServiceCollection services)
{
services.AddApplicationInsightsTelemetry(Configuration);
services.AddMvc();
//For Redis
services.AddSession();
services.AddDistributedRedisCache(options =>
{
options.InstanceName = "Sample";
options.Configuration = "localhost";
});
}
and in Configure
method add top of app.UseMvc line
app.UseSession();
to use redis in session storage in asp.net core .Now you can use like this in HomeController.cs
public class HomeController : Controller
{
private readonly IDistributedCache _distributedCache;
public HomeController(IDistributedCache distributedCache)
{
_distributedCache = distributedCache;
}
//Use version Redis 3.22
//http://stackoverflow.com/questions/35614066/redissessionstateprovider-err-unknown-command-eval
public IActionResult Index()
{
_distributedCache.SetString("helloFromRedis", "world");
var valueFromRedis = _distributedCache.GetString("helloFromRedis");
return View();
}
}
Upvotes: 12