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

Redis入门:如何用C#/.NET Core与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; }
    }

 public class Person
    { 
        public int Id { get; set; }
        public string Name { get; set; }
    }

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

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

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

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

    }

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>

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>

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

运行结果如图:

这里写图片描述


这里写图片描述


这里写图片描述

在.NET中使用ServiceStack.Redis操作Redis缓存 Redis是一个开源的高性能键值存储数据库,常被用作数据结构服务器。由于其提供原子操作支持,并且在内存中执行所有操作,因此能够在极短的时间内完成大量的数据读写。ServiceStack.Redis库因其简洁直观的API设计而广受欢迎,其设计哲学使得开发者能够快速上手并高效地进行Redis操作。相比其他类似的库,ServiceStack.Redis在易用性方面做得很出色。 阅读详情

相关推荐

ServiceStack.Redis C#驱动实战指南:V3.9版本全面解析

本文还有配套的精品资源,点击获取 简介:ServiceStack.Redis是C#中集成Redis官方驱动,版本为 . .* . ,支持.NET应用高效使用Redis数据存储。涵盖键值操作、集合处理、发布订阅、事务、脚本处理、持久化和性能优化等。本指南提供详细知识点,帮助开发者提升.NET应用性能和扩展性。 1. ServiceStac...

weixin_30336531的博客 1445

ServiceStack.Redis 使用教程

环境准备 Redis (使用Windows版本做测试,运营环境建议使用Linux版本) ServiceStack.Redis-v3.00 在Windows上运行Redis服务器作开发和测试是很好的,但是在运营环境还是Linux版本靠谱,下面我们就先解压Redis到一个目录下: 运行redis-server.exe 看到如下Windows控制台: 上面我们可以看到Redis...

weixin_34292959的博客 407

基于Redis与ServiceStack.NET的高性能缓存优化方案

简单说,就是把一堆命令打包一次性发过去,Redis按顺序执行完后再把所有结果一起返回。原来是一问一答:Server: OKServer: OK...现在变成:数学模型上看:串行耗时 ≈ N × RTTPipeline耗时 ≈ RTT + Σ(执行时间)当N很大时,性能提升接近N倍!来看一组真实测试数据(局域网环境):并发数单条延迟(ms)Pipeline总延迟(ms)吞吐提升倍数1000.82.1~38x。

weixin_42146230的博客 1034

使用ServiceStackRedis操作redis

.net程序开发时你可以在nuget里面下载ServiceStackRedis包来完成操作redis的工作; 一、连接redis   (1)RedisClient RedisClient = new RedisClient("10.0.4.227", 6379);//redis服务IP和端口   (2)使用PooledRedisClientManager 连接缓冲池中获取连接,使用完毕后...

weixin_34383618的博客 264

通信原理期末考试试题及答案

五、(总分12分)设某信道具有均匀的的双边噪声功率谱密度在该信道中传输抑制载波的单边带(上边带)信号,并设调制信号m(t)的频带限制在5K HZ,而载波为100 K HZ,已调信号的功率为10KW。:(1)单边带信号的载频为100kHz,带宽B=5kHz,为使信号顺利通过,理想带通滤波器的中心频率为。8、对最高频率为fH的调制信号m(t)分别进行AM、DSB、SSB调制,相应已调信号的带宽分别为。7、设调制信号为f(t)载波为,则抑制载波双边带调幅信号的时域表达式为,频域表达式为。

qq_67692062的博客 2392

libcurl库使用详情、libcurl库的制作

​ libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。libcurl的官网 、库下载。这种库使用的时候就像使用wiringPi库一样,编写完代码需要链接这个库,所以要先下载这个库。libcurl的使用(其实和socket编程时一样,都需要一定的步骤):

qq_45698138的博客 5337

.Net Redis基本使用

在开发项目时,我们为了提高效率和性能,我们有时候会选择使用Redis中间件来进行临时的存储,再用。所以有些情况我们选择用Redis还是非常好的,特别是在的时候,我们可以先提到缓存上,每隔一段时间去更新缓存,用户从缓存提取,就会特别快。

weixin_59180442的博客 1598

Acute逻辑分析仪TL4134E实战:从触发电平到协议解析的完整避坑指南

本文是一份针对Acute逻辑分析仪TL4134E的实战避坑指南。文章深入解析了触发电平分组、采样率与存储深度权衡、高级触发等核心概念,并提供了混合电压系统测量、eMMC调试内存优化、SPI/I2C/UART协议解析排错等具体配置技巧,帮助硬件工程师和嵌入式开发者高效捕获与分析数字信号,快速定位通信问题。

weixin_29207149的博客 404

.Net使用Redis详解之ServiceStack.Redis(七)

序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习。 Redis官方推荐的.NET驱动类库为Service.Stack.Redis。然而网上对这个类库的中文文档不是很全面与合理,这篇文章主要就对这个类库做注释展现。不足遗漏之处还望见谅,海涵。 .Net使用...

weixin_34275734的博客 498

SAP PCE 到底有没有 AI 能力:从标准功能、Joule、ABAP 扩展到项目落地的完整解读

摘要:SAP S/4HANA Cloud Private Edition(PCE)已深度集成AI能力,主要体现在三个方面:1)标准业务流程中的AI辅助功能(如财务分录生成、维修单据处理);2)通过Joule提供的自然语言交互入口,支持业务导航和部分事务处理;3)开发者可通过ABAP AI SDK与BTP平台集成实现扩展。PCE不是独立AI平台,企业级自定义AI需结合SAP BTP实现。AI能力已深度融入财务、制造等业务场景,但关键业务仍需人工审核。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 330

Android 系统状态栏中实现高斯模糊背景

至此,我们已经完成了在 Android 系统的 SystemUI 中实现高斯模糊背景的过程。通过以上的布局和代码修改,我们可以在状态栏中看到具有高斯模糊效果的背景。同时,为了在不同版本的 Android 系统上适配高斯模糊效果,可能需要进行一些额外的代码调整和兼容性处理。希望本文能够帮助你理解如何在 Android 系统的 SystemUI 中实现高斯模糊背景,并通过提供的源代码进行相应的开发和调试。首先,我们需要在 SystemUI 的布局文件中添加一个用于展示高斯模糊背景的视图。属性来开启模糊效果。

CyberSparkZ的博客 869

C# 通过ServiceStack 操作Redis

nuget包是外国人写的,在国内并没有完整的中文文档,也没有专门的人来翻译、封装它,所以上面的代码方法不是很全,还有很多api方法需要自己去官网找然后自己封装。//删除不存在的数据,返回false。RedisBase-- 是redis操作的基类,继承自IDisposable接口,主要用于释放内存。//删除成功,返回true。//10. 设置key的过期时间(30秒后自动销毁)//5. 数值自增/减,返回自增、自减后的值。//8.获取多个key的 value值集合。//自增20,可以自增负值。

zhiqingcn的专栏 1987

【YOLO26实战全攻略】10——YOLO26+SAM3实战:从检测到像素级分割的全流程指南(含PCB缺陷检测案例)

本文聚焦YOLO26与SAM3的融合应用,系统讲解“检测+分割”的三种核心模式:YOLO26原生分割(轻量高效)、YOLO26检测+SAM3精细分割(精度极致)、SAM3自动标注+YOLO26蒸馏(低成本冷启动)。从环境搭建、数据集准备、模型训练、性能优化到边缘部署,提供 step-by-step 实操教程,配套完整可运行代码与执行结果。结合虚拟PCB缺陷检测案例,展示像素级缺陷识别与几何参数测量的工业级应用流程。本文兼顾新手入门与进阶提升,注重实用价值,读者可直接参考搭建自己的分割系统。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 623

使用 ServiceStack 构建跨平台 Web 服务

本文主要来自MSDN杂志《Building Cross-Platform Web Services with ServiceStack》,Windows Communication Foundation (WCF) 是一个相当优秀的服务框架,当我们讨论跨平台的服务的时候,虽然WCF对WebService的支持还行,在面对一些高级应用的不太好,微软重新发展了ASP.NET WebAPI框架,关于

hacksuper's blog 3425

scratch绘制四个三角形 2024年6月中国电子学会 图形化编程 scratch编程等级考试二级真题和答案解析

​ scratch绘制四个三角形 一、题目要求 2024年6月电子学会图形化编程Scratch等级考试二级真题 1、准备工作 1.保留默认角色小猫; 2.添加背景Stars。 2、功能实现 1 .隐藏角色小猫,设置画笔裙始位置为(0,0),画笔颜色为黄色,画笔的粗细为5; 2. 点击绿旗,绘制如下图所示图形,三角形的边长为50。 二、案例分析 1、角色分析 角色:小猫 2、背景分析 背景:Stars背景 3、前期准备 1. 保留默认的小猫不变 ​

青少年编程学习指导 1716

ARFoundation系列讲解 - 手部跟踪编程

通过使用ARFoundation的手部跟踪子系统,我们可以轻松地在AR应用程序中实现与用户手部的交互。通过设置AR环境、创建场景和相机、添加手部跟踪功能以及编写相应的脚本,我们可以开始在AR场景中跟踪和操作用户的手部。在Unity中创建一个新场景,并将AR Session组件添加到场景中的一个空对象上。手部跟踪的具体实现可能因AR设备和平台的不同而有所差异,你可能需要根据你的使用情况进行一些适配和调整。当你将手部放入AR场景中时,手部跟踪系统将触发相应的事件,并调用脚本中的回调函数。

2301_79325339的博客 355

ServiceStack.Redis完全指南:.NET平台首选的Redis客户端入门教程

ServiceStack.Redis作为.NET平台领先的Redis客户端,为开发者提供了高效、简洁的Redis数据库操作体验。本教程将带你从零开始,快速掌握这个强大工具的使用方法,让你的.NET应用轻松集成Redis缓存和数据存储功能。 ## 🚀 为什么选择ServiceStack.Redis? ServiceStack.Redis是.NET生态中最受欢迎的Redis客户端之一,它具有以下

gitblog_00645的博客 365

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ServiceStack.Redis——Redis在.net上的客户端解决方案

ServiceStack.Redis——Redis在.net上的客户端解决方案 源码及使用: https://github.com/ServiceStack/ServiceStack.Redis 例子: https://github.com/ServiceStack/ServiceStack.Examples/tree/master/src/RedisStackOverflow 上面的例子中container.Register<IRedisClientsManager>(c => new PooledRed

每一天都有新的希望 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ServiceStack.Redis

一、在Asp.net中使用Redis  StackExchange.Redis和ServiceStack.Redis是Redis的.net常用框架。因为StackExchange.Redis只支持.net4.0及以上版本,但是由于很多项目的后台框架都是.net3.x的版本,所以本文只介绍ServiceStack.Redis的安装和使用。 1.在Visual Studio的项目中添加引用2.选择使用

2001

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

.Net使用Redis详解之ServiceStack.Redis

序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习。 Redis官方推荐的.NET驱动类库为Service.Stack.Redis。然而网上对这个类库的中文文档不是很全面与合理,这篇文章主要就对这个类库做注释展现。不足遗漏之处还望见谅,海涵。 ...

weixin_30376323的博客 354

ServiceStack.Redis 的 ASP.NET Core 扩展库

给大家安利一款 ServiceStack.Redis 的 ASP.NET Core 扩展库,它是基于 ServiceStack.Redis.Core 开发的。 简单易用,开源免费,使用ASP.NET Core自身提供的DI容器来实现针对服务的注册和消费。直接在程序启动时注册到服务中即可完成全部配置,对于小白用户也可快速上手Redis缓存和Redis分布式缓存。 Install Package https://www.nuget.org/packages/ServiceStack.Redis.Extensio

sinat_36112136的博客 681

ServiceStack.OrmLite 使用教程

ServiceStack.OrmLite 是一个轻量级、高性能的对象关系映射(ORM)库,它是 ServiceStack 框架的一部分。OrmLite 设计用于简化 .NET 应用程序中的数据访问操作,它提供了一种简洁的方式来将对象映射到数据库表,并执行常见的数据库操作,如插入、更新、删除和查询。 ## 2. 项目快速启动 首先,确保您的开发环境中已安装了.NET Core SDK。接下来,通

gitblog_00639的博客 725
上一篇: .NET平台下Redis使用(二)【StackExchange.Redis学习】
下一篇: Python的ORM框架SQLAlchemy使用入门(三)
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值