评论

收藏

[NoSQL] .NET平台下Redis使用(三)【ServiceStack.Redis学习】

数据库 数据库 发布于:2021-07-17 09:41 | 阅读数:538 | 评论:0

MVC4项目下对redis进行增删该查Models文件下实体类:
public class Book
  {
    public string BookName {get;set;}
    public string Author {get;set;}
    public string Edition {get;set;}
    public string Publisher {get;set;}
    public string Summary { get; set; }
    public long Id { get; set; }
    public int InStock { get; set; }
  }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
public class Person
  { 
    public int Id { get; set; }
    public string Name { get; set; }
  }

  • 1
  • 2
  • 3
  • 4
  • 5


  • 1
  • 2
  • 3
  • 4
  • 5
BookService.cs代码:
public class BookService : Service
  {
    public IRepository Repository { get; set; }
    public object Post(AddBook request)
    {
      var id = Repository.AddBook(request.ISBN, request.BookName, request.Author, request.Edition, request.Publisher, request.Summary);
      return new AddBookResponse { ISBN = id };
    }
    public object Get(Books request)
    {
      return new BooksResponse{ books = Repository.GetBooks()};
    }
  }
  public class BooksResponse
  {
    public IEnumerable<Book> books { get; set; }
  }
  [Route("/books", "GET")]
  public class Books
  {
  } 
  [Route("/books", "POST")]
  public class AddBook
  {
    public long ISBN { get; set; }
    public string BookName { get; set; }
    public string Author { get; set; }
    public string Edition { get; set; }
    public string Publisher { get; set; }
    public string Summary { get; set; }
    public int InStock { get; set; }
  }

  public class AddBookResponse
  {
    public long ISBN { get; set; }
  }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
Repository.cs代码:
public interface IRepository
  {
    long AddBook(long ISBN, string BookName, string Author, string Edition, string Publisher, string Summary);
    IEnumerable<Book> GetBooks();
    Book GetBooks(long isbn);
    void UpdateStock(Book book);
  }
  public class Repository : IRepository
  {
    IRedisClientsManager RedisManager { get; set; }
    public Repository(IRedisClientsManager redisManager)
    {
      RedisManager = redisManager;
    }
    public IEnumerable<Book> GetBooks()
    {
      using (var redisClient = RedisManager.GetClient())
      {
        var redisUsers = redisClient.As<Book>();
        return redisUsers.GetAll();
      }
    }
    public Book GetBooks(long isbn)
    {
      using (var redisClient = RedisManager.GetClient())
      {
        var redisUsers = redisClient.As<Book>();
        return redisUsers.GetById(isbn);
      }
    }

    public long AddBook(long isbn, string bookName, string author, string edition, string publisher, string summary)
    {
      using (var redisClient = RedisManager.GetClient())
      {
        var redisUsers = redisClient.As<Book>();

        if(redisUsers.GetById(isbn) !=null)
        {
          var book = GetBooks(isbn);
          book.InStock++;
          UpdateStock(book);
          return isbn;
        }
        else
        {
          var book = new Book() { Id = isbn, BookName = bookName, Author = author, Edition = edition, Publisher = publisher, Summary = summary, InStock = 1 };
          redisUsers.Store(book);
          return isbn;
        }
      }
    }

    public void UpdateStock(Book book)
    {
      using (var redisClient = RedisManager.GetClient())
      {
        var redisUsers = redisClient.As<Book>();
        redisUsers.Store(book);
      };
    }
  }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
HomeController.cs代码:
public class HomeController : Controller
  {
    //
    // GET: /Home/
    public ViewResult Index(int? page)
    {
      using (var redisClient = new RedisClient("127.0.0.1", 6379, "123456", 1))
      {
        var pageIndex = page ?? 1;
        var pageSize = 20;
        var redisUsers = redisClient.As<Book>();
        var books = redisUsers.GetAll().OrderByDescending(a => a.Id).ToPagedList(pageIndex, pageSize);
        ViewBag.pageOfBooks = books;
        return View();
      }   
    }
  }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
AdminController.cs代码:
public class AdminController : Controller
  {
    private readonly static string getBookInfoUri = "http://isbndb.com/api/v2/json/KWC08NFB/book/";
    //http://isbndb.com/api/v2/json/[your-api-key]/book/9780849303159 

    // GET: /Admin/
    public ActionResult Index()
    {
      using (var redisClient = new RedisClient("127.0.0.1",6379,"123456",1))
      {
        var redisUsers = redisClient.As<Book>();
        ViewBag.pageOfBooks = redisUsers.GetAll();
        return View();
      }
    }
    public ActionResult PersonList()
    {
      using (var redisClient = new RedisClient("127.0.0.1", 6379, "123456", 1))
      {
        var redisPerson = redisClient.As<Person>();
        ViewBag.pageOfPersons = redisPerson.GetAll();
        return View();
      }
    }
    //[HttpPost]
    public ActionResult CreateFromId(string isbn)
    {
      string fullUri = getBookInfoUri + isbn;
      HttpWebRequest webRequest = GetWebRequest(fullUri);
      HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
      string jsonResponse = string.Empty;
      using (StreamReader sr = new StreamReader(response.GetResponseStream()))
      {
        jsonResponse = sr.ReadToEnd();
      }
      JObject o = JObject.Parse(jsonResponse);

      Book newBook = new Book();
      newBook.Id = long.Parse(isbn);
      newBook.BookName = (string)o["data"][0]["title"];
      newBook.Author = (string)o["data"][0]["author_data"][0]["name"];
      newBook.Edition = (string)o["data"][0]["edition_info"];
      newBook.Publisher = (string)o["data"][0]["publisher_text"];
      newBook.Summary = (string)o["data"][0]["summary"];
      using (var redisClient = new RedisClient("127.0.0.1", 6379, "123456", 1))
      {
        var redisUsers = redisClient.As<Book>();
        //添加单条数据
        redisUsers.Store(newBook);
        //添加多条数据
        //redisUsers.StoreAll(ListBook);
        //查询
        //Linq支持
        ViewBag.pageOfBooks = redisUsers.GetAll();
        //return View();
      }
      return View("Index");

    }
    public ActionResult CreatePerson()
    {
      Person p1 = new Person() { Id = 1, Name = "刘备" };
      Person p2 = new Person() { Id = 2, Name = "关羽" };
      Person p3 = new Person() { Id = 3, Name = "张飞" };
      Person p4 = new Person() { Id = 4, Name = "曹操" };
      Person p5 = new Person() { Id = 5, Name = "典韦" };
      Person p6 = new Person() { Id = 6, Name = "郭嘉" };
      List<Person> ListPerson = new List<Person>() { p2, p3, p4, p5, p6 };
      using (IRedisClient RClient = new RedisClient("127.0.0.1", 6379, "123456", 1))
      {
        IRedisTypedClient<Person> IRPerson = RClient.As<Person>();
        IRPerson.DeleteAll();
        //------------------------------------------添加--------------------------------------------
        //添加单条数据
        IRPerson.Store(p1);
        //添加多条数据
        IRPerson.StoreAll(ListPerson);
        //------------------------------------------查询--------------------------------------------
        //Linq支持
        Response.Write(IRPerson.GetAll().Where(m => m.Id == 1).First().Name);     //刘备
        //注意,用IRedisTypedClient的对象IRPerson的Srore()添加的才能用IRPerson()方法读取
        Response.Write(IRPerson.GetAll().First(m => m.Id == 2).Name);     //关羽
        //------------------------------------------删除--------------------------------------------
        /*
        IRPerson.Delete(p1);  //删除 刘备
        Response.Write(IRPerson.GetAll().Count());    //5
        IRPerson.DeleteById(2); //删除 关羽
        Response.Write(IRPerson.GetAll().Count());    //4
        IRPerson.DeleteByIds(new List<int> { 3, 4 });  //删除张飞 曹操
        Response.Write(IRPerson.GetAll().Count());    //2
        IRPerson.DeleteAll();   //全部删除
        Response.Write(IRPerson.GetAll().Count());    //0
        */
      }
      return Content("");
    }
    [HttpPost]
    public ActionResult Create(Book bookInfo)
    {

      return RedirectToAction("Index");

    }
    private static HttpWebRequest GetWebRequest(string formattedUri)
    {
      Uri serviceUri = new Uri(formattedUri, UriKind.Absolute);
      return (HttpWebRequest)System.Net.WebRequest.Create(serviceUri);
    }
  }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
Admin视图文件夹:Index.cshtml内容:
@{
  ViewBag.Title = "Index";
  Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Admin</h2>

<table>
  <tr>
    <th>
      ISBN
    </th>
    <th>
      Book Name
    </th>
    <th>
      Author
    </th>
    <th>
      Edition
    </th>
    <th>
      Number In Stock
    </th>
    <th></th>
  </tr>
@foreach (var item in ViewBag.pageOfBooks)
{
  <tr>
    <td>
      @item.Id
    </td>
    <td>
      @item.BookName
    </td>
    <td>
      @item.Author
    </td>
    <td>
      @item.Edition
    </td>
     <td>
      @item.InStock
    </td>
    <td>
      @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
      @Html.ActionLink("Details", "Details", new { id=item.Id }) |
      @Html.ActionLink("Delete", "Delete", new { id=item.Id })
    </td>
  </tr>
}
</table>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
PersonList.cshtml内容:
@model dynamic
@{
  ViewBag.Title = "Person";
  Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Admin</h2>
<table>
  <tr>
    <th>
      ID
    </th>
    <th>
      名字
    </th>
    <th>
      功能
    </th>
  </tr>
  @foreach (var item in ViewBag.pageOfPersons)
  {
    <tr>
      <td>
        @item.Id
      </td>
      <td>
        @item.Name
      </td>
      <td>
        @*@Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
        @Html.ActionLink("Details", "Details", new { id = item.Id }) |
        @Html.ActionLink("Delete", "Delete", new { id = item.Id })*@
      </td>
    </tr>
  }
</table>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
Home视图文件夹:Index.cshtml内容:
@{
  ViewBag.Title = "Index";
  Layout = "~/Views/Shared/_Layout.cshtml";
}
@using PagedList.Mvc;
@using PagedList;
       @foreach (var item in ViewBag.pageOfBooks)
       {
         <div class ="bookSmall">
           <h3>@item.BookName</h3>
           <p>@item.Author</p>
           <p>@item.Edition</p>
           <p>@item.InStock</p>
           @Html.ActionLink("More Details", "Details", new { Id = item.Id})
         </div>
       }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
运行结果如图:
DSC0000.png

DSC0001.png

DSC0002.png



关注下面的标签,发现更多相似文章