一、Redis是什么
Redis是一种远程内存数据库,有5种不同类型数据结构,可以通过复制、持久化和客户端分片等特性扩展Redis,使其能够包含数百GB数据,每秒处理上百万次请求。
Redis是一种非关系数据库,可存储键(key)和5种不同类型的值(value)之间的映射,可将存储在内存中的键值对持久化到硬盘。
Redis在Python或Java示例:https://github.com/josiahcarlson/redis-in-action
Redis在spring框架下示例:http://www.springsource.org/spring-data/redis
二、使用Redis的理由
memcached只能使用append命令将数据添加到字符串末尾,通过黑名单(blacklist)来隐藏列表元素;Redis使用list和set直接添加和删除元素。
Redis存储的数据执行随机写的速度非常迅速,因为在Redis中,用户可直接使用原子的(atomic)INCR命令及其变种来计算聚合数据,并且Redis将数据存储在内存中,而且发送给Redis的命令请求不需要经过典型的查询分析器(parser)或查询优化器(optimizer)进行处理。
使用Redis可以避免写入不必要的临时数据,免去了对临时数据的扫描或删除操作,从而改善了程序的性能。
Redis存储聚合数据好处:Redis可将彼此相关的聚合数据放在同一结构中,以便访问聚合数据;使用Redis可以将聚合数据放到有序集合里面,构建出一个实时的排行榜;Redis的聚合数据可以是整数或者是浮点数,而memcached的聚合数据只能是整数。
三、Redis数据结构
Redis可存储键和5种不同数据结构类型之间的映射,这5种数据结构类型分别是STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)和ZSET(有序集合)。
Redis命令列表:https://redis.io/commands
字符串:GET 获取存储在给定键中的值
SET 设置存储在给定键中的值
DEL 删除存储在给定键中的值
列表: RPUSH 将给定值推入列表的右边
LRANGE 获取列表在给定范围上的所有值
LINDEX 获取列表在给定位置上的单个元素
LPOP 从列表的左端弹出一个值,并返回弹出的值
集合: SADD 将给定元素添加到集合
SMEMBERS 返回集合包含的所有元素
SISMEMBER 检查给定元素是否存在于集合中
SREM 如果给定元素存在于集合中,那么移除这个元素
SINTER、SUNION、SDIFF 交集计算、并集计算和差集计算
散列: HSET 在散列里面关联起给定的键值对
HGET 获取指定散列键的值
HGETALL 获取散列包含的所有键值对
HDEL 如果给定键存在于散列中,那么移除这个键
有序集合:ZADD 将一个带有给定分值的成员添加到有序集合里面
ZRANGE 根据元素在有序排列中所处位置,从有序集合中获取多个元素
ZRANGEBYSCORE 获取有序集合在给定分值范围内的所有元素
ZREM 如果给定成员存在于有序集合,那么移除这个成员
四、总结
Redis是一个可以用来解决问题的工具,既拥有其他数据库不具备的数据结构,有拥有内存存储(这使得Redis的速度非常快)、远程(这使得Redis可以与多个客户端和服务器进行连接)、持久化(这使得服务器重启后数据仍存在)和可扩展(通过主从复制和分片)等多个特性,这使得用户可以以熟悉的方式为各种不同的问题构建解决方案。