什么是redis
redis是一个key-value内存数据库,是一个速度非常快的非关系型数据库(non-relational database),它可以存储键(key)与5种不同类型的值(value)之间的映射(mapping),可以将内存中存储的键值对数据持久化到硬盘,使用复制特性来扩展读性能,使用客户端分片来扩展写性能。
redis的特性
redis与我们常见的oracle与mysql等关系型数据库有非常大的区别,redis是一个nosql数据库(非关系型数据库),redis不使用表,数据库不会定义或者强制要求用户对redis存储不同的数据进行关联。redis经常与memcached比较,两者都被用来存储键值映射,彼此的性能相差无几,但是redis能自动以两种不同的方式将数据写入硬盘,并且redis除了能存储普通的字符串键以外,还可以存储其它四种数据结构,而memcached只能存储普通字符串键。下面是几个常见的数据库对比
redis拥有两种不同形式的持久化方式,它们都可以用小而紧凑的方式将存储到内存的数据写入到硬盘:第一种方式为时间点转储,转储方式可以在满足“指定时间内有指定的数量写操作执行,也可以调用两条转储到到硬盘的命令中的一条来执行;第二种方式为将所有修改了数据库的命令都写入一个只追加文件里,用户可以将数据根据重要程度设置为从不同步或者每秒同步或者每写入一个命令就执行一次。
受限于redis的内存存储设计,一台redis服务器无法处理所有请求,为了扩展redis的读性能,并且提供故障转移支持,redis实现了主从复制特性:执行复制的服务器会连接上主服务器,接收主服务器发送的整个数据库的初始副本,之后主服务器执行写命令,都会发送给所有连接主服务器的从服务器去执行,从而实时去更新从服务器的数据集,所有客户端可以向任意的从服务器发送读请求,避免造成对主服务器的集中访问。
redis的数据结构
redis存储键可以映射5种不同的数据结构类型,这五种数据结构类型为string(字符串),list(列表),set(集合),hash(散列)和zset(有序集合)。有一部分redis命令对于这五种数据类型是通用的,如del,type,rename等。有些命令只针对于一种或者两种数据类型使用。下面是redis的数据结构:
redis中的字符串
字符串常见命令
windows 安装redis:
windows-redis
安装msi版本可以自动将服务设置为系统服务,如果将redis路径加到系统环境变量中,则可以方便的在命令行里启动客户端
命令实例:
客户端是redis-cli 命令行交互式,set命令为一个键设置一个值 返回OK,get命令查看一个键对应的值,del命令删除一个键对应的值。
redis中的列表
一个列表结构和可以有序的存储多个字符串。redis列表的操作和许多编程语言类似,LPUSH命令和RPUSH 命令分别用于将元素推入列表的左端和右端。LPOP和RPOP分别用于从列表对的左边和右边将元素弹出,LINDEX用于获取指定位置的元素,LRANGE用于获取指定范围内的所有元素。
命令对应的功能如下:
操作实例:
redis的集合
redis的集合和列表都可以存储多个字符串,他们之间的不同在于,列表可以存储多个相同的字符串,而集合则通过散列表来保证每个自己存储的字符串都是不同的。redis集合使用无序的方式来存储元素,所以元素不能像列表那样将从一端推入,也不能从一端弹出,用户可以使用SADD命令将元素添加到集合中,使用SREM命令将元素从集合中移除。
操作实例:
redis的散列
redis散列可以存储多个键值对之间的映射
命令操作如下:
操作实例:
redis的有序集合
有序集合和散列一样都用于存储键值对:有序集合的键被称为成员,每个成员都是各不相同的,而有序集合的值则被称为分值,分值必须为浮点数。有序集合时redis中唯一一个既可以根据成员访问元素,又可以根据分值以及分值的排列顺序来访问元素的结构。
命令操作如下:
操作实例: