REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。 Redis是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
Redis 最好的学习网站 ,链接直达 Redis中文网
Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库 Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即master-slave模式的数据备份。Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
Redis支持五种常见数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
Redis列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到列表的头部(左边)或者尾 部(右边)。 它的底层实际是个链表 !
Redis的Set是String类型的无序集合,它是通过HashTable实现的 !
Redis 的安装教程就不在这里介绍,如有需要可访问windows版本、Linux版本
因为本人采用的是Win版本,所以这里只介绍Windows系统的启动方式。 Redis 可分为redis-server服务 和 redis-cli客户端,在运行客户端之前先需要启动服务。
Redis-server服务启动方式 方式一:
双击redis-server即可启动然后双击redis-cli启动运行Redis (左图启动redis服务,右图客户端输入redis-cli 连接,输入ping 如果返回PONG则说明redis连接成功) 通过方式一即可启动服务,不过在关掉该窗口后redis服务就会关闭,我们也可以选择一直开启服务。方法二 redis作为windows服务启动方式
启动服务:redis-server --service-start停止服务:redis-server --service-stop在输入命令后,我们可以在任务管理器中看到redis的进程,然后dos窗口下输入redis-cli 就可以连接成功。(如果需要在任意目录启动服务,可以自行配置redis的环境变量)
Redis 键命令用于管理 redis 的键。
命令描述DEL key如果key 存在则删除 keykeys *查看所有的keyselect db选择转换数据库flushdb删除当前数据库里的文件flushall删除所有数据库文件exists key判断某个key是否存在move key db将该关键字从库中移除expire key second为当前key设置生存时间ttl key查看当前key还有多少秒过期TYPE key返回 key 所储存的值的类型rename key newkey修改 key 的名称如果需要了解更多命令请参考:Redis教程
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
127.0.0.1:6379[1]> lpush list 1 #将一个值插入到列表(左)头部。 (integer) 1 127.0.0.1:6379[1]> lpush list 2 (integer) 2 127.0.0.1:6379[1]> lpush list 3 (integer) 3 127.0.0.1:6379[1]> lrange list 0 -1 #lrange:返回列表中指定区间内的元素, 区间以偏移量 START 和 END 指定。 # 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素。 # 也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素 1) "3" 2) "2" 3) "1" 127.0.0.1:6379[1]> rpush list a #将一个=值插入到列表尾(右)部。 (integer) 4 127.0.0.1:6379[1]> rpush list b (integer) 5 127.0.0.1:6379[1]> rpush list c (integer) 6 127.0.0.1:6379[1]> lrange list 0 -1 #查看列表全部元素 1) "3" 2) "2" 3) "1" 4) "a" 5) "b" 6) "c" 127.0.0.1:6379[1]> 127.0.0.1:6379[1]> lpop list #移除并返回列表的第一个元素。当列表 key 不存在时,返回 nil "3" 127.0.0.1:6379[1]> rpop list #移除列表的最后一个元素,返回值为移除的元素。 "c" 127.0.0.1:6379[1]> lrange list 0 -1 #查看列表全部元素,会发现第一个元素3和最后一个元素c都删除了 1) "2" 2) "1" 3) "a" 4) "b" 127.0.0.1:6379[1]> lindex list 0 #Lindex,按照索引下标获得元素(-1代表最后一个,0代表是第一个) "2" 127.0.0.1:6379[1]> lindex list 1 "1" 127.0.0.1:6379[1]> lindex list 5 (nil) #没有该元素则返回null 127.0.0.1:6379[1]> lindex list -1 "b" 127.0.0.1:6379[1]> lrange list 0 -1 #查看列表所有元素 1) "2" 2) "1" 3) "a" 4) "b" 127.0.0.1:6379[1]> llen list # 返回列表的长度 (integer) 4 127.0.0.1:6379[1]> lrem list 1 a #根据参数 count 的值,移除列表中与参数 value 相等的元素 (integer) 1 127.0.0.1:6379[1]> lrange list 0 -1 #查看列表所有元素,可以看到元素a被移出了 1) "2" 2) "1" 3) "b" #lset key index value 将列表 key 下标为 index 的元素的值设置为 value 127.0.0.1:6379[1]> lset list 0 22 #将第一个元素值2改为22 OK 127.0.0.1:6379[1]> lrange list 0 -1 1) "22" 2) "1" 3) "b" 127.0.0.1:6379[1]> .....Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295,每个集合可存储40多亿个成员)。