江南才子 发表于 2021-7-17 09:41:29

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

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; }
    }

   
    public class Books
    {
    }

   
    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//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();
            }
      }

      //
      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"]["title"];
            newBook.Author = (string)o["data"]["author_data"]["name"];
            newBook.Edition = (string)o["data"]["edition_info"];
            newBook.Publisher = (string)o["data"]["publisher_text"];
            newBook.Summary = (string)o["data"]["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("");
      }

      
      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
运行结果如图:




文档来源:51CTO技术博客https://blog.51cto.com/u_11990719/3101719
页: [1]
查看完整版本: .NET平台下Redis使用(三)【ServiceStack.Redis学习】