redis简介:
redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型。是一个速度非常快的非关系数据库(non-relational database),它可以存储键(key)与5种不同类型的值(value)之间的映射(mapping)。可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以客户端分片来扩展性能。
如果你熟悉关系数据库,那么你肯定写过用来关联两个表的数据的SQL查询。而redis则属于人们常说的NOSQL数据库或非关系数据库:redis不使用表,它的数据库也不会预定义或者强制去要求用户对redis存储的不同数据进行关联。
高性能键值缓存服务器memcached也经常被拿来与redis进行比较:这两者都可用于存储键值映射,彼此的性能也相差无几,但是redis能够自动以两种不同的方式将数据写入硬盘,并且redis除了能存储普通的字符串键之外,还可以存储其他4种数据结构,而memcached只能存储普通的字符串键。这些不同之处使得redis可以用于解决更为广泛的问题,并且既可以用作主数据库(primary database)使用,又可以作为其他存储系统的辅助数据库(auxiliary database)使用。
redis数据结构简介:
redis可以存储键与5种不同的数据结构类型之间的映射,这5种数据结构类型分别为STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)和ZSET(有序集合):
STRING(字符串):可以是字符串、整数或者浮点数,可以对整个字符串或者字符串的其中一部分执行操作,也可以对整数或浮点数执行自增(increment)或者自减(decrement);
LIST(列表):一个链表,链表上的每个节点都包含了一个字符串,从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim);读取单个或多个元素;根据值查找或者移除元素;
SET(集合):包含字符串的无序收集器(unordered collection),并且被包含的每个字符串都是独一无二、各不相同的;
HASH(散列):包含对键值的无序散列,用于添加、获取、移除单个键值对;获取所有键值对;
ZEST(有序集合):字符串成员(member)与浮点数分值(socre)之间的有序映射,元素的排列顺序由分值的大小决定,用于添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素。
(一、)redis的安装:
安装环境:redhat 7.0
节点:192.168.3.132
1.获取源码安装包:
在redis的官方网站上下载redis源码安装包,地址如下:
安装包如下所示:
redis-3.0.7.tar.gz
2.解压安装包并进行安装:
解压:
[root@localhost mnt]# tar xvf redis-3.0.7.tar.gz
安装:
3.在redis的src目录中有两个可执行文件redis-cli和redis-server分别代表redis的客户端和服务端:
4.建立redis-cli和redis-server文件的软链接到/usr/bin目录下:
[root@localhost src]# ln /mnt/redis-3.0.7/src/redis-cli /usr/bin/redis-cli
[root@localhost src]# ln /mnt/redis-3.0.7/src/redis-server /usr/bin/redis-server
5.开启redis-server服务:
6.查看服务开启端口:
7.开启redis客户端连接服务器:
T
至此,redis的安装完成!!!!
(二、)redis中的字符串:
STRING拥有一些和其他键值存储相似的命令,比如GET(获取值)、SET(设置值)和DEL(删除值)。
SET、GET、DEL使用示例:
redis-cli -h 192.168.3.132 -p 6379 该指令用于启动redis-cli客户端;
set hello world :将键hello的值设为world,SET命令在执行成功后返回OK,Python客户端会将这个OK转换成True;
get hello:获取存储在键hello中的值;由其执行结果可得键的值为world,跟我们刚才设置的一样‘;
del hello:用于删除这个键值对,在对值进行删除时,DEL命令将返回被成功删除的值的数量。
因为键的值已经不存在,所以尝试获取键的值将得到一个nil,Python客户端会将这个nil转换为None。
(三、)redis中的列表:
redis对链表(linked-list)结构的支持使得它在键值存储的世界中独树一帜。一个列表结构可以有序的存储多个字符串,redis的列表操作和很多编程语言中的列表操作非常相似:LPUSH命令和RPUSH命令分别用于将元素推入列表的左端(left end)和右端(right end);LPOP命令和RPOP命令分别用于从列表的左端和右端弹出元素;LINDEX命令用于获取列表在给定位置上的一个元素;LRANGE命令用于获取列表在给定范围上的所有元素。
下面给出使用示例:
\
(1)rpush list-key :用于向列表推入新元素,在推入新元素之后,该命令会返回列表当前的长度。
(2)lrange list-key 0 -1:使用0为范围的起始索引,-1为范围的结束索引,可以取出列表包含的所有元素。
(3)lindex:使用LINDEX可以从列表里面取出单个元素。
(4)lpop list-key :从列表里面弹出一个元素,被弹出的元素将不再存在于列表。
(四、)redis的集合:
redis集合和列表都可以存储多个字符,它们之间的不同在于,列表可以存储多个相同的字符串,而集合则通过使用散列表来保证自己的存储的每个字符串都是个不相同的(这些散列表只有键,但没有与键相关联的值)。由于redis的集合使用无序(unordered)方式存储元素,所以用户不能像列表那样,将元素推入集合的某一端,或者从集合的某一端弹出元素。不过用户可以使用SADD命令将元素添加到列表,或者使用SRAM命令将元素从集合里面移除元素。另外还可以通过SISMEMBER命令快速地检查一个元素是否已经存在于集合,或者使用SMEMBERS命令获取集合包含的所有元素(如果集合包含的元素非常多,那么SMEMBERS命令的执行速度可能会变慢,所以要谨慎地使用这个命令。)
下面给出使用示例:
(1)sadd set-key :将一个元素添加到集合,在尝试将一个元素添加到集合的时候,命令返回1表示这个元素被成功地添加到了集合里面,而返回0则表示这个元素已经存在于集合中。
(2)smember set-key :获取集合包含的所有元素将得到一个由元素组成的序列,Python客户端将个序列转换成Python集合。
(3)sismember set-key :检查一个元素是否存在于集合中,Python客户端一个布尔值来表示检查结果。
(4)srem set-key :用于删除集合的元素,在使用命令移除集合中的元素时,命令会返回移除元素的数量。
(五、)redis的散列:
redis的散列可以存储多个键值对之间的映射。和字符串一样,散列存储的值即可以是字符串也可以是数字值,并且用户同样可以对散列存储的数字值执行自增或自减操作。
HSET:在散列里面关联起给定的键值对;
HGET:获取指定散列键的值;
HGETALL:获取散列包含的所有键值对
HDEL:如果给定键值存在于散列里面,那么移除这个键。
下面给出具体的示例:
(1)hset hash-key :用于添加键值对到散列中,在尝试添加键值对到散列的时候,命令会返回一个值来表示给定的键是否已经存在于散列里面;
(2)hgetall hash-key:用于获取所有的键值对,在获取散列包含的所有的键值对时,Python客户端会把整个散列表转换成一个Python字典;
(3)hdel hash-key :在删除键值对时,命令会返回一个键值来表示给定的键在删除之前是否存在于散列里面;
(4)hget hash-key :从散列里面获取某个键的值。
(六、)redis的有序集合:
有序集合和散列一样,都用于存储键值对:有序集合的键被称为成员(member),每个成员都是独一无二的;而有续集合的值被称为分值(score),分值必须为浮点数。有续集合是redis里面唯一一个既可以根据成员访问元素,又可以根据分值以及分值的排列顺序来访问元素的结构。
ZADD:将一个带有指定分值的成员添加到有序集合里面;
ZRANGE:根据元素在有序排列中所处的位置,从有序集合里面获取多个元素;
ZRANGEBYSCORE:获取有序集合在给定分值范围内的所有元素;
ZREM:如果给定成员存在于有序集合,那么移除这个成员。
下面给出具体的示例:
(1)zadd zset-key :向有序集合中添加元素,在尝试相有序集合添加元素时,命令会返回新添加元素的数量;
(2)zrange zset-key 0 -1 withscores :在获取有序集合包含的所有的元素时,这多个元素会按照分值的大小会进行排序,并且Python客户端会将元素的分值转换成浮点数;
(3)zrangebyscores zset-key 0 800 withscores :用户也可以根据分值来获取有序集合中的一部分元素;
(4)zrem zset-key :在删除有序集合元素的时候,命令会返回移除元素的数量。
至此,redis的一些基本的知识已和大家分享完,redis的命令远不止此,这些只是一些基本的操作,后序还会和大家分享更多的有关redis的内容,敬请期待!!!!