
Nosql之Redis数据库
文章平均质量分 83
.NET跨平台
比较认真。编程就是算法和数据结构,算法和数据结构是编程的灵魂。
展开
-
Redis的通信协议
Redis的通信协议全称是 REdis Serialization Protocol(RESP)它有5种通信格式。转载 2025-02-26 23:05:24 · 53 阅读 · 0 评论 -
CSRedisCore基本使用示例
是一个高效且易用的 Redis 客户端库,在 .NET Core 项目中可以方便地使用它进行 Redis 操作。通过依赖注入和配置连接池,它可以轻松扩展到高并发和大规模的应用场景中。原创 2024-11-14 10:18:54 · 1218 阅读 · 0 评论 -
如何解决高并发下的超卖问题?
如果为第二种方式,如果在第一个线程提交事务之前,第二个线程也执行了相同的sql拿到了version值(也就是线程1和线程2拿到了相同的。在众多抢购活动中,在有限的商品数量的限制下如何保证抢购到商品的用户数不能大于商品数量,也就是不能出现超卖的问题;排他锁又称为写锁,简称X锁,顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据就行读取和修改。的时候,只有其中一个先update了,同时更新了版本号。转载 2024-07-13 23:57:10 · 144 阅读 · 0 评论 -
Redis持久化 - RDB和AOF
持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化Redis所有数据保持在内存中,对数据的更新将异步地保存到磁盘上。RDB简介RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。在默认情况下, Redis 将数据库快照保存在名字为dump.rdb的二进制文件中。在 Redis 运行时, RDB 程序将当前内存中的数据库快照保存到磁盘文件中, 在 Redis 重启动时, RDB 程序可以通过载入 RDB 文件来还原数据库的状态。转载 2023-11-07 00:53:48 · 327 阅读 · 0 评论 -
redis使用
,第二个数组是扫描到的值(默认10个值,没有到尾部时,可能会+1个,到尾部是剩余的值的个数)文档地址 https://redis.io/commands/append。文档地址 https://redis.io/commands/bzmpop。文档地址 https://redis.io/commands/copy。文档地址 https://redis.io/commands/hdel。文档地址 https://redis.io/commands/sadd。扫描前10条,只有2条匹配的。转载 2023-08-27 17:17:20 · 99 阅读 · 0 评论 -
Redis(2)——跳跃表
跳跃表(skiplist)是一种随机化的数据结构,由 William Pugh 在论文《Skip lists: a probabilistic alternative to balanced trees》中提出,是一种可以于平衡树媲美的层次化链表结构——查找、删除、添加等操作都可以在对数期望时间下完成,以下是一个典型的跳跃表例子:我们在上一篇中提到了 Redis 的五种基本结构中,有一个叫做有序列表 zset的数据结构,它类似于 Java 中的SortedSet和HashMap的结合体,一方面它是一个。转载 2023-08-09 22:06:51 · 416 阅读 · 0 评论 -
Redis 的底层数据结构(跳跃表)
我们都知道单链表有一个致命的弱点,查找任一节点都至少O(n)的时间复杂度,它需要遍历一遍整个链表,那么有没有办法提升链表的搜索效率?跳跃表(SkipList)这种数据结构使用空间换时间的策略,通过给链表建立多层索引来加快搜索效率,我们先介绍跳跃表的基本理论,再来看看redis中的实现情况。转载 2023-08-04 15:03:23 · 345 阅读 · 0 评论 -
Redis list源码分析
RedisList是一种基于双向链表实现的数据结构,其底层数据结构由两个指针指向前一个元素和后一个元素,以此构成一个双向链表。在Redis中,List提供了一系列的操作方法,例如添加元素、删除元素、获取元素等。原创 2023-06-19 23:13:57 · 465 阅读 · 0 评论 -
一起看懂Redis两种持久化方式的原理
本文将通过下面内容的介绍,希望能够让大家更全面、清晰的认识这两种持久化方式,同时理解这种保存数据的思路,应用于自己的系统设计中。转载 2023-06-10 18:38:32 · 145 阅读 · 0 评论 -
十个Redis面试题和答案
Redis 是一种基于内存的key-value存储系统,支持多种数据结构,如字符串、列表、哈希、集合、有序集合等。它通常被用作数据库、缓存和消息代理。原创 2023-03-12 22:05:27 · 73 阅读 · 0 评论 -
Redis的String源码分析
Redis的字符串类型是实现的基础,因为在Redis中几乎所有的数据都是以字符串的形式存储和操作的。在Redis中,字符串被看作是二进制安全的字符数组,这意味着字符串可以包含任何数据,包括空字节。以上是Redis字符串类型的一些基本操作函数的实现。Redis字符串类型的源码比较简单,主要就是对字符串的编码方式、存储和操作进行了封装,方便Redis对字符串类型进行高效的存储和操作。的类型是否为字符串类型,然后将要追加的字符串和原字符串连接起来,并更新。的类型是否为字符串类型,然后返回字符串的长度。原创 2023-03-10 18:43:59 · 660 阅读 · 0 评论 -
为什么要用Redis
在面试的时候,常被问比较下Redis与Memcache的优缺点,个人觉得这二者并不适合一起比较,一个是非关系型数据库不仅可以做缓存还能干其它事情,一个是仅用做缓存。比如,用Redis去保存用户的基本信息,虽然它能够支持持久化,但是它的持久化方案并不能保证数据绝对的落地,并且还可能带来Redis性能下降,因为持久化太过频繁会增大Redis服务的压力。转载 2022-10-29 15:42:16 · 309 阅读 · 0 评论 -
50道Redis面试题
同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。有很多用户都只使用AOF持久化,但并不推荐这种方式:因为定时生成RDB快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比AOF恢复的速度要快,除此之外, 使用RDB还可以避免之前提到的AOF程序的bug。可以在同一个服务器部署多个Redis的实例,并把他们当作不同的服务器来使用,在某些时候,无论如何一个服务器是不够的, 所以,如果你想使用多个CPU,你可以考虑一下分片(shard)。转载 2022-10-20 16:22:07 · 70 阅读 · 0 评论 -
深入学习Redis高可用架构:哨兵原理及实践
本文将要介绍的哨兵,它基于 Redis 主从复制,主要作用便是解决主节点故障恢复的自动化问题,进一步提高系统的高可用性。文章将首先介绍哨兵的作用和架构;然后讲述哨兵系统的部署方法,以及通过客户端访问哨兵系统的方法;然后简要说明哨兵实现的基本原理;最后给出关于哨兵实践的一些建议。(注:文章内容基于 Redis 3.0 版本)哨兵的作用和架构哨兵的作用在介绍哨兵之前,首先从宏观角度回顾一下 Redis 实现高可用相关的技术。它们包括:持久化、复制、哨兵和集群,其主要作用和解决的问题是:持久化:持久转载 2022-05-06 00:41:51 · 520 阅读 · 0 评论 -
Redis是单线程的,但Redis为什么这么快?
近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”、什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis、Memcached等,而笔者目前最常用的也只有Redis这一种。如果你在以前面试的时候还没有遇到过面试官问你《为什么说Redis是单线程的以及Redis为什么这么快!》,那么你看到这篇文章的时候,你应该觉得是一件很幸运的事情!如果你刚好是一位高逼转载 2022-02-17 23:45:55 · 4075 阅读 · 1 评论 -
redis集群选举机制
概要当redis集群的主节点故障时,Sentinel集群将从剩余的从节点中选举一个新的主节点,有以下步骤:故障节点主观下线故障节点客观下线Sentinel集群选举LeaderSentinel Leader决定新主节点选举过程1、主观下线Sentinel集群的每一个Sentinel节点会定时对redis集群的所有节点发心跳包检测节点是否正常。如果一个节点在down-after-milliseconds时间内没有回复Sentinel节点的心跳包,则该redis节点被该Sentinel节点主观转载 2021-03-31 16:20:02 · 687 阅读 · 0 评论 -
redis之key过期源码分析
简述redis的所有数据结构都可以设置过期时间,当key过期后再查询该key返回null。redis实现key自动过期是通过额外保存需要自动过期的key和该key的过期时间,然后通过主动删除和定时任务删除两种机制来将过期的key移除并回收内存。在redis4.0版本引入了异步删除的机制,对于删除对象大小大于64字节的key,先通过Unlink方法软删除后放入回收队列中,由其他线程异步回收内存空间,减少主线程的在内存回收上消耗的时间。typedef struct redisDb { dict *转载 2021-03-31 16:18:42 · 568 阅读 · 1 评论 -
redis之hash源码分析
hash的对象编码hash数据类型的对象编码有两种,分别是OBJ_ENCODING_ZIPLIST和OBJ_ENCODING_HT,即一种是以压缩数组;一种是哈希字典。两者的数据格式见下图:图2:编码转换redis的hash数据之所以使用OBJ_ENCODING_ZIPLIST和OBJ_ENCODING_HT两种编码格式,是为了当一个hash对象的键值对数据量比较小时,使用紧凑的数组格式来节省内存空间。因此,当一个hash对象的键值对数据量增加到临界值时,就会触发编码转换,将该hash对象的键转载 2021-03-31 15:30:03 · 332 阅读 · 0 评论 -
redis之list源码分析
list的数据结构redis的list的结构为quicklist,并非简单的类似java的LinkedList链表或者ArrayList数组,而是将链表和数值结合的一种数据结构。宏观上list是一个quicklist链表,通过双向指针前后连接,但是链表的每一个节点是一个ziplist字节数组,在字节数组上保存list的数据。默认配置下,每个ziplist最大为8K字节,在向满了的ziplist插入新数据时或拆分或新建ziplist来存放新数据。typedef struct quicklist {转载 2021-02-23 16:27:57 · 232 阅读 · 0 评论 -
redis之string源码分析
string的对象编码string数据类型的对象编码有两种,分别是embstr和raw。两种编码的区别并不大,embstr相对于raw,内存空间连续。两者的数据格式见下图:redis的string数据之所以使用embstr和raw两种编码格式,是为了当一个string对象的值比较小时,使用一个连续的内存分区存放redisObject对象和sdshdr对象,减少内存分配和回收的消耗。embstr编码的string数据只需要创建分配一个内存空间,用于同时存放redisObject对象和sdshdr对象;转载 2021-02-23 15:49:39 · 365 阅读 · 0 评论 -
Redis使用场景
版本: redis 3.0Redis是一种基于键值对的NoSQL数据库,它的值主要由string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)五种基本数据结构构成,除此之外还支持一些其他的数据结构和算法。对于redis的五种基本数据结构列出下面几种使用场景字符串字符串类型是Redis最基础的数据结构,字符串类型可以是JSON、XML甚至是二进制的图片等数据,但是最大值不能超过512MB。1.1 内部编码Redis会根据当前值的类型和长度决定使用哪种内部编码来实转载 2021-02-01 23:02:10 · 235 阅读 · 0 评论 -
Redis基础及数据类型
Redis是什么Redis(Remote Dictionary Server):远程字典服务是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、key-Value数据库,提供有多种语言的API当下最热门的NoSQL技术之一,也被人们称之为结构化数据库Redis能干什么内存存储、持久化(内存中是断电即失,所以持久化很重要)效率高,可以用于高速缓存发布订阅系统地图信息分析计时器、计数器、浏览量Redis的特性多样的数据类型可以持久化事务功能可以做集群Wi转载 2021-02-01 22:56:43 · 190 阅读 · 0 评论 -
Redis知识总结
Redis的全称是:Remote Dictionary ServerRedis是一个开源(BSD许可),内存数据结构存储,可以用作数据库,缓存和消息代理。它支持数据结构,如字符串,散列,列表,集合,带有范围查询的排序集,位图,超级日志,具有半径查询和流的地理空间索引。Redis具有内置复制,Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性,并通过Redis Sentinel提供高可用性和使用Redis Cluster自动分区。一、基本类型及数据结构String字符串可以存储字符串、整数、浮点数、J转载 2021-02-01 22:54:01 · 534 阅读 · 0 评论 -
Redis监控
Redis介绍Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表、哈希、集合和有序集合5种。支持在服务器端计算集合的并、交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务器。Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模转载 2017-04-26 13:54:07 · 1426 阅读 · 0 评论 -
Mvc 5和Redis(ServiceStack.Redis)实现自定义会话提供程序
Models文件夹 public class HomeViewModel { public string ValueStoredInRedis { get; set; } } public class RefreshMeViewModel : HomeViewModel { } public class ResultViewModel : HomeV转载 2017-04-19 14:21:25 · 1076 阅读 · 0 评论 -
云数据库 Redis 版
.net 客户端测试代码示例:using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ServiceStack.Redis; namespace Serv转载 2017-03-11 12:07:15 · 1734 阅读 · 0 评论 -
Redis学习手册(Key操作命令)
一、概述:在该系列的前几篇博客中,主要讲述的是与Redis数据类型相关的命令,如String、List、Set、Hashes和Sorted-Set。这些命令都具有一个共同点,即所有的操作都是针对与Key关联的Value的。而该篇博客将主要讲述与Key相关的Redis命令。学习这些命令对于学习Redis是非常重要的基础,也是能够充分挖掘Redis潜力的利器。 在该篇博客中,我们将一如既往的给出所有相转载 2017-03-10 22:48:45 · 563 阅读 · 0 评论 -
redis-cli 命令总结
Redis提供了丰富的命令(command)对数据库和各种数据类型进行操作,这些command可以在Linux终端使用。在编程时,比如使用Redis 的Java语言包,这些命令都有对应的方法。下面将Redis提供的命令做一总结。1、连接操作相关的命令 quit:关闭连接(connection) auth:简单密码认证2、对value操作的命令 exists(key):确认一个ke转载 2017-03-09 14:19:43 · 698 阅读 · 0 评论 -
.NET平台下Redis使用(六)【ServiceStack.Redis发布、订阅服务示例】
#订阅者首先创建RedisClient,然后调用CreateSubscription()方法创建订阅客户端,然后设置订阅客户端的几个事件:OnMessage:接受到消息时。OnSubscribe:订阅频道时。OnUnSubscribe:取消订阅频道时。最后,调用subscribeToChannels(channelName),订阅频道。 class Program { sta原创 2016-09-30 17:34:02 · 14526 阅读 · 4 评论 -
.NET平台下Redis使用(五)【StackExchange.Redis和Protobuf-net】
没有应该获得的成功,只有不肯放弃的梦想Models层实体类:[ProtoContract] public class People { [ProtoMember(1)] public int ID { get; set; } [ProtoMember(2)] public string FirstName { get; s原创 2016-09-27 17:45:20 · 10622 阅读 · 0 评论 -
.NET平台下Redis使用(四)【StackExchangeRedisHelper助手类】
敢为自己目标行动的人,整个世界都会为你让路Program.cs主程序: class Program { static void Main(string[] args) { List<User> userList =new List<User>() { new User { UserName = "che原创 2016-09-27 15:37:48 · 12326 阅读 · 0 评论 -
.NET平台下Redis使用(七)【StackExchange.Redis测试Redis五种数据类型】
信念之于人,犹翅膀之于鸟,信念是飞翔的翅膀Program.cs代码: class Program { static void Main(string[] args) { //字符串 //RedisDemo.StringTest(); //Hash //RedisD原创 2016-10-10 23:31:41 · 11847 阅读 · 0 评论 -
.NET平台下Redis使用(一)【自己写驱动类】
这个世界并不是掌握在那些嘲笑者的手中,而恰恰掌握在能够经受得住嘲笑与批评仍不断往前走的人手中。Redis.cs代码类:#define DEBUGusing System;using System.Collections;using System.Collections.Generic;using System.Diagnostics;using System.IO;using Syste原创 2016-09-21 23:34:58 · 3332 阅读 · 0 评论 -
Redis使用入门(一)【配置文件】
redis.windows.conf内容如下:# redis 配置文件示例# 当你需要为某个配置项指定内存大小的时候,必须要带上单位,# 通常的格式就是 1k 5gb 4m 等酱紫:## 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 100000000原创 2016-09-07 13:18:15 · 13137 阅读 · 1 评论 -
.NET平台下Redis使用(二)【StackExchange.Redis学习】
思想→观念→行动→习惯→个性→命运Program.cs内容:using Newtonsoft.Json;using StackExchange.Redis;using System;using System.Data;using System.IO;using System.Runtime.Serialization.Formatters.Binary;namespace stackex原创 2016-09-23 13:29:26 · 15589 阅读 · 0 评论 -
使用ServiceStack.Redis实现Redis数据读写
User.cs实体类public class User{ public string Name { get; set; } public int Id { get; set; }}Program.cs class Program { private static readonly RedisHelper redisHelper = new转载 2017-04-26 14:32:13 · 6403 阅读 · 1 评论 -
.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原创 2016-09-23 16:08:42 · 15114 阅读 · 2 评论 -
Redis监控Web版管理工具
HomeController.csusing RedisMonitor.Core.Model;using RedisMonitor.Core.RedisServer;using System.Linq;using System.Web.Mvc;namespace RedisManager{ public class HomeController : Controller {原创 2017-06-15 13:33:11 · 6699 阅读 · 3 评论 -
高可用Redis服务架构分析与搭建
基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量级的提升),做简单的消息队列(LPUSH和BRPOP)、订阅发布(PUB/SUB)系统等等。规模比较大的互联网公司,一般都会有专门的团队,将Redis存储以基础服务的形式提供给各个业务调用。不过任何...转载 2019-09-19 09:52:28 · 175 阅读 · 0 评论 -
redis简单应用
启动和结束–启动redis服务E:\redis>redis-server.exe redis.windows.conf–结束redis服务127.0.0.1:6379> shutdownnot connected>3、修改配置文件的两种方式3.1、运行中使用config set命令修改–连接redis,-h -a E:\redis>redis-cli.e...转载 2019-06-18 10:58:25 · 850 阅读 · 0 评论