Redis学习笔记整理
- 格式:doc
- 大小:118.00 KB
- 文档页数:33
尚硅⾕Redis学习笔记(6)--Redis主从复制1.是什么主机数据更新后根据配置和策略,⾃动同步到备机的master/slaver机制,Master以写为主,Slave以读为主2.能⼲嘛读写分离,性能扩展容灾快速恢复3.具体操作:主从复制1、创建myredis⽂件夹2、复制redis.conf配置⽂件到⽂件夹中3、配置⼀主多从,创建三个配置⽂件创建新的配置⽂件:redis6379.conf,redis6380.conf,redis6381.conf3.1 新建redis6379.conf,填写以下内容include /myredis/redis.confpidfile /var/run/redis_6379.pidport 6379dbfilename dump6379.rd在myredis⽂件夹下⾯的⽂件3.2 新建redis6380.conf,填写以下内容3.3 新建redis6381.conf,填写以下内容slave-priority 10设置从机的优先级,值越⼩,优先级越⾼,⽤于选举主机时使⽤。
默认1003.4 启动三台Redis服务器3.5 查看系统进程,看看三台服务器是否启动3.6 查看三台主机运⾏情况info replication打印主从复制的相关信息三台都显⽰⾃⼰是主机,没有从机3.7 配从(库)不配主(库)slaveof ip port成为某个实例的从服务器1. 在6380和6381上执⾏: slaveof 127.0.0.1 6379role的⾓⾊变成slave从机,master_host, master_port等等是主机信息主服务器信息connected_slaves连接两台从机2. 在主机上写,在从机上可以读取数据在从机上写数据报错3. 主机挂掉,重启就⾏,⼀切如初4. 从机重启需重设:slaveof 127.0.0.1 6379可以将配置增加到⽂件中。
永久⽣效。
edis入门笔记1. Redis 简介•Redis是一款开源的、高性能的键-值存储(key-value store)。
它常被称作是一款数据结构服务器(data structure server)。
Redis的键值可以包括字符串(strings)类型,同时它还包括哈希(hashes)、列表(lists)、集合(sets)和有序集合(sorted sets)等数据类型。
对于这些数据类型,你可以执行原子操作。
例如:对字符串进行附加操作(append);递增哈希中的值;向列表中增加元素;计算集合的交集、并集与差集等。
•为了获得优异的性能,Redis采用了内存中(in-memory)数据集(dataset)的方式。
同时,Redis支持数据的持久化,你可以每隔一段时间将数据集转存到磁盘上(snapshot),或者在日志尾部追加每一条操作命令(appendonly file,aof)。
•Redis同样支持主从复制(master-slave replication),并且具有非常快速的非阻塞首次同步(non-blocking first synchronization)、网络断开自动重连等功能。
同时Redis还具有其它一些特性,其中包括简单的事物支持、发布订阅(pub/sub)、管道(pipeline)和虚拟内存(vm)等。
•Redis具有丰富的客户端,支持现阶段流行的大多数编程语言。
(http://redis.io/clients)2. Redis安装•下载最新稳定版redis-2.2.11 (http://redis.io/download)tar zxvf redis-2.2.11 解压缩•cdsrc进入src目录•make编译Redis•make test可以测试一下(本步可省略)•make install安装,默认安装目录是/usr/local/bin,生成如下图中的5个二进制文件,可以将其拷到新建目录下,例如: /usr/local/redis/bin•cp源码/src/redis.conf /usr/local/redis/etc 配置文件复制•cd/usr/local/redis•./bin/redis-server ./etc/redis.conf启动Redis服务•此时redis已经运行,但要获得好的性能,还需要对配置文件进行合理的配置3. Redis配置•1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes 启用守护进程• daemonize no•2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定• pidfile /var/run/redis.pid•3. 指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女AlessiaMerz的名字• port 6379•4.绑定的主机地址• bind 127.0.0.1•5.当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能• timeout 300•6. 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verboseloglevel verbose•7. 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null• logfilestdout•8. 设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id• databases 16•9. 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合• save<seconds><changes>• Redis默认配置文件中提供了三个条件:• save 900 1• save 300 10• save 60 10000•分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。
StackExchange.Redis学习笔记(⼆)Redis查询五种数据类型的应⽤ConnectionMultiplexerConnectionMultiplexer 是StackExchange.Redis的核⼼对象,⽤这个类的实例来进⾏Redis的⼀系列操作,对于⼀个整个应⽤程序应该只有⼀个ConnectionMultiplexer 类的实例。
上⼀章中StackExchangeRedisHelper 的相关代码如下private static ConnectionMultiplexer _instance = null;///<summary>///使⽤⼀个静态属性来返回已连接的实例,如下列中所⽰。
这样,⼀旦 ConnectionMultiplexer 断开连接,便可以初始化新的连接实例。
///</summary>public static ConnectionMultiplexer Instance{get{if (_instance == null){lock (_locker){if (_instance == null || !_instance.IsConnected){_instance = ConnectionMultiplexer.Connect(Coonstr);}}}//注册如下事件_instance.ConnectionFailed += MuxerConnectionFailed;_instance.ConnectionRestored += MuxerConnectionRestored;_instance.ErrorMessage += MuxerErrorMessage;_instance.ConfigurationChanged += MuxerConfigurationChanged;_instance.HashSlotMoved += MuxerHashSlotMoved;_instance.InternalError += MuxerInternalError;return _instance;}}String string类型应该是最长⽤到的了,⽤法也很简单,下⾯展⽰了⽤Redis来进⾏基本的字符串数字存储public static IDatabase GetDatabase(){return Instance.GetDatabase();}///<summary>///设置缓存///</summary>///<param name="key"></param>///<param name="value"></param>public static void Set(string key, object value, TimeSpan? expiry = default(TimeSpan?), When when = When.Always, CommandFlags flags = CommandFlags.None) {key = MergeKey(key);GetDatabase().StringSet(key, Serialize(value), expiry, when, flags);}///<summary>///根据key获取缓存对象///</summary>///<typeparam name="T"></typeparam>///<param name="key"></param>///<returns></returns>public static T Get<T>(string key){key = MergeKey(key);return Deserialize<T>(GetDatabase().StringGet(key));}///<summary>///移除指定key的缓存///</summary>///<param name="key"></param>///<returns></returns>public static bool Remove(string key){key = MergeKey(key);return GetDatabase().KeyDelete(key);}除了基本的string类型操作,Redis同时⽀持以下⼏种类型的操作List 列表Set ⽆序集合SortedSet 有序集合Hash 哈希表下⾯我依次来介绍下这四种类型在StackExchange.Redis中的基本⽤法关于代码中的KeyDelete为删除对应的键,我这⾥是因为测试防⽌重复才加上的。
redis学习笔记Redis是一款开源的内存数据库,它被广泛应用在高性能网站开发中,用于表示、存储和查询数据。
本文主要介绍redis的基本概念、常用数据类型、持久化、主从复制及集群等方面的技术知识。
一、Redis基本概念Redis是一款轻量级的开源内存数据库,它被用来存储键值对,且它的数据模型是哈希表,可以用键来关联不同的值,这些值可以是任何数据类型,如整数、浮点数、字符串等等。
另外,Redis还支持数据的持久化,即把redis的数据持久化到文件中,以便当服务停止时,记录可以保留。
二、Redis常用数据类型Redis支持五种常用的数据类型:1.符串(String):可以用来存储任何形式的简单数据,比如:字符串、整数、浮点数等等。
2.表(List):存储有序的字符串列表,可用于表示简单的列表或复杂的队列,可以插入、取出数据等操作。
3.希(Hash):哈希表可以存储多组数据,哈希表是一个键/值对的集合,每一对键/值可以存储一个对象。
4.合(Set):集合是一个无序列表,可以用来存储唯一的值。
5.序集合(Sorted Set):有序集合可以用来存储排序好的唯一值,和集合不同,有序集合为每个成员关联一个数字,根据这个数字进行排序。
三、Redis久化Redis支持数据的持久化,这样即使redis宕机,也可以将之前的数据恢复回来。
Redis支持两种持久化机制:快照(snapshotting)和追加文件(append-only file)。
快照持久化机制:快照持久化是通过将Redis的内存数据快速移动到磁盘来实现的,有一个定时任务会自动地进行快照持久化,该定时任务的运行间隔可以在配置文件中设定,也可以在命令行中通过“BGSAVE”命令来手动触发快照持久化。
追加文件持久化机制:追加文件持久化是指通过将Redis执行的命令记录到一个追加文件(append-only file)中来实现的,此文件保存了Redis执行的所有指令,一旦redis宕机,可以通过重新安装此文件来恢复数据。
Redis学习笔记:事务详解一、概述:和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制。
在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事务的基石。
相信对有关系型数据库开发经验的开发者而言这一概念并不陌生,即便如此,我们还是会简要的列出Redis中事务的实现特征:1). 在事务中的所有命令都将会被串行化的顺序执行,事务执行期间,Redis不会再为其它客户端的请求提供任何服务,从而保证了事物中的所有命令被原子的执行。
2). 和关系型数据库中的事务相比,在Redis事务中如果有某一条命令执行失败,其后的命令仍然会被继续执行。
3). 我们可以通过MULTI命令开启一个事务,有关系型数据库开发经验的人可以将其理解为BEGIN TRANSACTION语句。
在该语句之后执行的命令都将被视为事务之内的操作,最后我们可以通过执行EXEC/DISCARD命令来提交/回滚该事务内的所有操作。
这两个Redis 命令可被视为等同于关系型数据库中的COMMIT/ROLLBACK语句。
4). 在事务开启之前,如果客户端与服务器之间出现通讯故障并导致网络断开,其后所有待执行的语句都将不会被服务器执行。
然而如果网络中断事件是发生在客户端执行EXEC命令之后,那么该事务中的所有命令都会被服务器执行。
5). 当使用Append-Only模式时,Redis会通过调用系统函数write将该事务内的所有写操作在本次调用中全部写入磁盘。
然而如果在写入的过程中出现系统崩溃,如电源故障导致的宕机,那么此时也许只有部分数据被写入到磁盘,而另外一部分数据却已经丢失。
Redis服务器会在重新启动时执行一系列必要的一致性检测,一旦发现类似问题,就会立即退出并给出相应的错误提示。
此时,我们就要充分利用Redis工具包中提供的redis-check-aof工具,该工具可以帮助我们定位到数据不一致的错误,并将已经写入的部分数据进行回滚。
redis整理笔记Redis整理笔记1.Redis简介:-特点:Redis是一种开源的、基于内存的数据结构存储系统,支持多种数据结构,如字符串、哈希表、列表、集合等。
-应用场景:常用于缓存、会话存储、实时分析、排行榜等场景。
2.安装和启动:-安装:使用包管理工具如apt、yum安装Redis。
-启动:使用`redis-server`启动服务,默认端口为6379。
3.数据类型:-字符串(String):基本的键值对存储。
```bashSET key valueGET key```-哈希表(Hash):存储字段和与字段相关联的值。
```bashHSET myhash field1"value1"HGET myhash field1```-列表(List):有序的字符串元素集合。
```bashLPUSH mylist"value1"LRANGE mylist0-1```-集合(Set):无序的字符串元素集合。
```bashSADD myset"value1"SMEMBERS myset```-有序集合(Sorted Set):类似集合,每个元素都关联一个分数,用于排序。
```bashZADD myzset1"value1"ZRANGE myzset0-1WITHSCORES```4.持久化:-RDB快照:定期将内存中的数据快照到磁盘。
```bashSAVE```-AOF日志:记录每个写操作,以重放来恢复数据。
```bashAPPENDONLY yes```5.主从复制:-配置:在从服务器配置文件中设置主服务器的地址和端口。
```bashreplicaof<masterip><masterport>```6.安全性:-密码保护:在配置文件中设置密码。
```bashrequirepass yourpassword```7.性能优化:-持久化选择:根据业务需求选择RDB或AOF,或两者结合使用。
Redis学习笔记文档整理Falcon.C官方网站QQ/Email 389321746 falcon@时间2010.08一、Redis介绍二、Redis性能介绍三、Redis功能四、Redis安装及配置五、Redis启动六、Redis的数据类型七、Redis的master/slave配置声明:本文档仅供学习参考之用,如有错误和其他观点,请访问或Email本人Redis介绍Redis本质上一个Key/Value数据库,与Memcached类似的NoSQL型数据库,但是他的数据可以持久化的保存在磁盘上,解决了服务重启后数据不丢失的问题,他的值可以是string (字符串)、list(列表)、sets(集合)或者是ordered sets(被排序的集合),所有的数据类型都具有push/pop、add/remove、执行服务端的并集、交集、两个sets集中的差别等等操作,这些操作都是具有原子性的,Redis还支持各种不同的排序能力Redis 2.0更是增加了很多新特性,如:提升了性能、增加了新的数据类型、更少的利用内存(AOF和VM)Redis支持绝大部分主流的开发语言,如:C、Java、C#、PHP、Perl、Python、Lua、Erlang、Ruby等等Redis性能:根据Redis官方的测试结果:在50个并发的情况下请求10w次,写的速度是110000次/s,读的速度是81000次/s测试环境:1.50个并发,请求100000次2.读和写大小为256bytes的字符串3.Linux2.6 Xeon X3320 2.5GHz的服务器上4.通过本机的loopback interface接口上执行地址:/p/redis/wiki/BenchmarksRedis的功能:1、Redis的Sharding:Redis支持客户端的Sharding功能,通过一致性hash算法实现,当前Redis不支持故障冗余,在集群中不能在线增加或删除Redis2、Redis的master/slave复制:1.一个master支持多个slave2.Slave可以接受其他slave的连接来替代他连接master3.复制在master是非阻塞的,而在slave是阻塞的4.复制被利用来提供可扩展性,在slave端只提供查询功能及数据的冗余3、Redis的Virtual Memory功能:vm是Redis2.0新增的一个非常稳定和可靠的功能,vm的引入是为了提高Redis的性能,也就是把很少使用的value保存到disk,而key保存在内存中。
Redis学习手册文中的内容和数据主要来自于Redis官方文档,作者仅仅是根据自己的经验对常用的内容做了进一步的解释和归纳。
有兴趣的网友也可以直接阅读Redis的官方文档。
由于作者的翻译和理解能力有限,如有不到之处,欢迎指正。
最后需要说的是,如果这个系列的博客能够让您在阅读后有所收获,那么就请继续关注作者后面有关新主题的系列博客。
目录PHP学习手册 (1)Redis学习手册(开篇) (3)一、简介: (3)二、Redis的优势: (3)三、目前版本中Redis存在的主要问题: (4)四、和关系型数据库的比较: (4)五、如何持久化内存数据: (4)Redis学习手册(String数据类型) (5)一、概述: (5)二、相关命令列表: (5)三、命令示例: (8)Redis学习手册(List数据类型) (14)一、概述: (14)二、相关命令列表: (14)三、命令示例: (17)四、链表结构的小技巧: (21)Redis学习手册(Set数据类型) (22)一、概述: (22)二、相关命令列表: (22)三、命令示例: (24)四、应用范围: (27)Redis学习手册(Hashes数据类型) (28)一、概述: (28)二、相关命令列表: (28)三、命令示例: (30)Redis学习手册(Sorted-sets数据类型) (32)一、概述: (32)二、相关命令列表: (32)三、命令示例: (36)四、应用范围: (39)Redis学习手册(Key操作命令) (39)一、概述: (39)二、相关命令列表: (39)三、命令示例: (42)Redis学习手册(事物) (45)一、概述: (45)二、相关命令列表: (46)三、命令示例: (47)四、WATCH命令和基于CAS的乐观锁: (48)Redis学习手册(主从复制) (49)一、Redis的Replication: (49)二、Replication的工作原理: (50)三、如何配置Replication: (50)四、应用示例: (50)Redis学习手册(持久化) (52)一、Redis提供了哪些持久化机制: (52)二、RDB机制的优势和劣势: (52)三、AOF机制的优势和劣势: (52)四、其它: (53)Redis学习手册(虚拟内存) (54)一、简介: (54)二、应用场景: (54)三、配置: (55)Redis学习手册(管线) (56)一、请求应答协议和RTT: (56)二、管线(pipelining): (56)三、Benchmark: (57)Redis学习手册(服务器管理) (58)一、概述: (58)二、相关命令列表: (58)Redis学习手册(内存优化) (61)一、特殊编码: (61)二、BIT和Byte级别的操作: (61)三、尽可能使用Hash: (61)Redis学习手册(实例代码) (62)Redis学习手册(开篇)一、简介:在过去的几年中,NoSQL数据库一度成为高并发、海量数据存储解决方案的代名词,与之相应的产品也呈现出雨后春笋般的生机。
Redis学习笔记(十七)集群(上)Redis集群是Redis提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移操作。
一个Redis集群通常由多个节点组成,在刚开始的时候每个节点都是相互独立的,他们处于一个只包含自己的集群当中,我们通过使用CLUSTER MEET命令将节点连接到一起,构成一个包含多节点的集群。
集群的数据结构:clusterNode结构保存了一个节点的当前状态,比如节点创建时间、节点名称、节点当前的配置纪元、节点的ip端口。
每个节点都会使用一个clusterNode结构记录自己的状态,并为集群中的所有其他节点都创建一个相应的clusterNode结构。
struct clusterNode{//创建节点的时间mstime_t ctime;//节点的名称,由40个十六进制字符组成char name[REDIS_C:USTER_NAMELEN]//节点标识(标识节点的角色以及节点目前状态)inf flags;//节点当前的配置纪元uint64_t configEpochl;//节点的ip地址char ip;//节点的端口号int port;//保存连接节点所需要的有关信息clusterLink *link;}typedef struct clusterLink{//连接的创建时间mstime_t ctime;//TCP 套接字描述int fd;//输出缓冲区,保存着等待发送给其他节点的消息sds sndbuf;//输入缓冲区,保存着从其他节点接收到的消息sds rcvbuf;//与这个连接相关联的节点,如果没有的话为NULLstruct clusterNode *node;} clusterLink;每个节点都保存着一个clusterState结构,这个结构记录了在当前节点的视角下,集群目前所处的状态,typedef struct clusterState{//指向当前节点的指针clusterNode *myself;//集群当前的配置纪元,用于实现故障转移。
redis学习笔记整理一、redis 环境搭建 (2)二、redis学习笔记之数据类型 (3)三、redis学习笔记之排序 (11)四、redis学习笔记之事务 (16)五、redis学习笔记之pipeline (20)六、redis学习笔记之发布订阅 (23)七、redis学习笔记之持久化 (28)八、redis学习笔记之主从复制 (30)九、redis学习笔记之虚拟内存 (31)一、redis 环境搭建1.简介redis是一个开源的key-value数据库。
它又经常被认为是一个数据结构服务器。
因为它的value 不仅包括基本的string类型还有list,set ,sorted set和hash类型。
当然这些类型的元素也都是strin g类型。
也就是说list,set这些集合类型也只能包含string 类型。
你可以在这些类型上做很多原子性的操作。
比如对一个字符value追加字符串(APPEND 命令)。
加加或者减减一个数字字符串(INCR命令,当然是按整数处理的).可以对list类型进行push,或者pop元素操作(可以模拟栈和队列)。
对于set类型可以进行一些集合相关操作(intersection uni on difference)。
memcache也有类似与++,--的命令。
不过memcache的value只包括string类型。
远没有redis的value类型丰富。
和memcahe一样为了性能。
redis的数据通常都是放到内存中的。
当然redis可以每间隔一定时间将内存中数据写入到磁盘以防止数据丢失。
redis也支持主从复制机制(master-slave replication)。
redis的其他特性包括简单的事务支持和发布订阅(pub/sub)通道功能,而且redis配置管理非常简单。
还有各种语言版本的开源客户端类库。
(源码网教程下载,)2.安装下载地址:/files/redis-2.0.4.tar.gz2.0目前是最新稳定版可以在linux下运行如下命令进行安装$ tar xzf redis-2.0.4.tar.gz$ cd redis-2.0.4$ makemake完后redis-2.0.4目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli下面启动redis服务.$./redis-server注意这种方式启动redis 使用的是默认配置。
redis学习笔记整理一、redis 环境搭建 (2)二、redis学习笔记之数据类型 (3)三、redis学习笔记之排序 (11)四、redis学习笔记之事务 (16)五、redis学习笔记之pipeline (20)六、redis学习笔记之发布订阅 (23)七、redis学习笔记之持久化 (28)八、redis学习笔记之主从复制 (30)九、redis学习笔记之虚拟内存 (31)一、redis 环境搭建1.简介redis是一个开源的key-value数据库。
它又经常被认为是一个数据结构服务器。
因为它的value 不仅包括基本的string类型还有list,set ,sorted set和hash类型。
当然这些类型的元素也都是strin g类型。
也就是说list,set这些集合类型也只能包含string 类型。
你可以在这些类型上做很多原子性的操作。
比如对一个字符value追加字符串(APPEND 命令)。
加加或者减减一个数字字符串(INCR命令,当然是按整数处理的).可以对list类型进行push,或者pop元素操作(可以模拟栈和队列)。
对于set类型可以进行一些集合相关操作(intersection uni on difference)。
memcache也有类似与++,--的命令。
不过memcache的value只包括string类型。
远没有redis的value类型丰富。
和memcahe一样为了性能。
redis的数据通常都是放到内存中的。
当然redis可以每间隔一定时间将内存中数据写入到磁盘以防止数据丢失。
redis也支持主从复制机制(master-slave replication)。
redis的其他特性包括简单的事务支持和发布订阅(pub/sub)通道功能,而且redis配置管理非常简单。
还有各种语言版本的开源客户端类库。
()2.安装下载地址:/files/redis-2.0.4.tar.gz2.0目前是最新稳定版可以在linux下运行如下命令进行安装$ tar xzf redis-2.0.4.tar.gz$ cd redis-2.0.4$ makemake完后redis-2.0.4目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli下面启动redis服务.$./redis-server注意这种方式启动redis 使用的是默认配置。
也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动.$ ./redis-server redis.confredis.conf是一个默认的配置文件。
我们可以根据需要使用自己的配置文件。
启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了.比如$ ./redis-cliredis> set foo barOKredis> get foo"bar"这里演示了get和set命令操作简单类型value的例子。
foo是key ,bar是个string类型的value没linux的可以通过这个在线的来练习,当然在线版的很多管理相关的命令是不支持的。
/3.java客户端hello,world客户端jar包地址/downloads/alphazero/jredis/jredis-1.0-rc2.jar。
版本目前有点老,支持到Redis 1.2.6。
最新版2.0的还没release在eclipse中新建一个java项目,然后添加jredis包引用。
下面是个hello,world程序package jredisStudy;import org.jredis.*;import org.jredis.ri.alphazero.JRedisClient;public class App {public static void main(String[] args) {try {JRedis jr = new JRedisClient("192.168.56.55",6379); //redis服务地址和端口号String key = "mKey";jr.set(key, "hello,redis!");String v = new String(jr.get(key));String k2 = "count";jr.incr(k2);jr.incr(k2);System.out.println(v);System.out.println(new String(jr.get(k2)));} catch (Exception e) {// TODO: handle exception}}}好了redis环境已经搭建好了。
后面会写写redis的各种类型和类型相关的命令和一些具体的应用场景二、redis学习笔记之数据类型本文介绍下redis支持的各种数据类型包括string,list ,set ,sorted set 和hash1. keysredis本质上一个key-value db,所以我们首先来看看他的key.首先key也是字符串类型,但是key中不能包括边界字符由于key不是binary safe的字符串,所以像"my key"和"mykey\n"这样包含空格和换行的key是不允许的顺便说一下在redis内部并不限制使用binary字符,这是redis协议限制的。
"\r\n"在协议格式中会作为特殊字符。
redis 1.2以后的协议中部分命令已经开始使用新的协议格式了(比如MSET)。
总之目前还是把包含边界字符当成非法的key 吧,免得被bug纠缠。
另外关于key的一个格式约定介绍下,object-type:id:field。
比如user:1000:password,blog:xxidxx:title还有key的长度最好不要太长。
道理很明显占内存啊,而且查找时候相对短key也更慢。
不过也推荐过短的key,比如u:1000:pwd,这样的。
显然没上面的user:1000:password可读性好。
下面介绍下key相关的命令exits key 测试指定key是否存在,返回1表示存在,0不存在del key1 key2 ....keyN 删除给定key,返回删除key的数目,0表示给定key都不存在type key 返回给定key的value类型。
返回none 表示不存在key,string字符类型,list 链表类型set 无序集合类型... keys pattern 返回匹配指定模式的所有key,下面给个例子redis> set test dsfOKredis> set tast dsafOKredis> set tist adffOKredis> keys t*1. "tist"2. "tast"3. "test"redis> keys t[ia]st1. "tist"2. "tast"redis> keys t?st1. "tist"2. "tast"3. "test"randomkey 返回从当前数据库中随机选择的一个key,如果当前数据库是空的,返回空串rename oldkey newkey 原子的重命名一个key,如果newkey存在,将会被覆盖,返回1表示成功,0失败。
可能是oldkey不存在或者和newkey相同renamenx oldkey newkey 同上,但是如果newkey存在返回失败dbsize 返回当前数据库的key数量expire key seconds 为key指定过期时间,单位是秒。
返回1成功,0表示key已经设置过过期时间或者不存在ttl key 返回设置过过期时间的key的剩余过期秒数-1表示key不存在或者没有设置过过期时间select db-index 通过索引选择数据库,默认连接的数据库所有是0,默认数据库数是16个。
返回1表示成功,0失败move key db-index 将key从当前数据库移动到指定数据库。
返回1成功。
0 如果key不存在,或者已经在指定数据库中flushdb 删除当前数据库中所有key,此方法不会失败。
慎用flushall 删除所有数据库中的所有key,此方法不会失败。
更加慎用2. string 类型string是redis最基本的类型,而且string类型是二进制安全的。
意思是redis的string可以包含任何数据。
比如jpg图片或者序列化的对象。
从内部实现来看其实string可以看作byte数组,最大上限是1G字节。
下面是string类型的定义。
struct sdshdr {long len;long free;char buf[];};buf是个char数组用于存贮实际的字符串内容。
其实char和c#中的byte是等价的,都是一个字节len是buf数组的长度,free是数组中剩余可用字节数。
由此可以理解为什么string类型是二进制安全的了。
因为它本质上就是个byte数组。
当然可以包含任何数据了。
另外string类型可以被部分命令按int处理.比如incr等命令,下面详细介绍。
还有redis的其他类型像list,set,sorted set ,hash它们包含的元素与都只能是string类型。
如果只用string类型,redis就可以被看作加上持久化特性的memcached.当然redis对string类型的操作比memcached 多很多啊。
如下:set key value 设置key对应的值为string类型的value,返回1表示成功,0失败setnx key value 同上,如果key已经存在,返回0 。
nx 是not exist的意思get key 获取key对应的string值,如果key不存在返回nilgetset key value 原子的设置key的值,并返回key的旧值。
如果key不存在返回nilmget key1 key2 ... keyN 一次获取多个key的值,如果对应key不存在,则对应返回nil。
下面是个实验,首先清空当前数据库,然后设置k1,k2.获取时k3对应返回nilredis> flushdbOKredis> dbsize(integer) 0redis> set k1 aOKredis> set k2 bOKredis> mget k1 k2 k31. "a"2. "b"3. (nil)mset key1 value1 ... keyN valueN 一次设置多个key的值,成功返回1表示所有的值都设置了,失败返回0表示没有任何值被设置msetnx key1 value1 ... keyN valueN 同上,但是不会覆盖已经存在的keyincr key 对key的值做加加操作,并返回新的值。