因为本身当前作的项目过程当中间接的利用到了Redis,对其产生了一点兴趣,就买了本Redis入门指南(李子骅编著)看了下,虽然实际上这本书已经买了半年了,==,但最近仍是忽然痛定思痛决定把这本书好好看看而后写个总结,这里就先写一点基础的知识好了。html
提及Redis首先得提一下NoSQL数据库,什么是NoSQL?查询wiki能够知道其定义:node
NoSQL是对不一样于传统的关系数据库的数据库管理系统的统称。
NoSQL的全名叫作Not Only SQL,与咱们经常使用的MySQL,Oracle等数据库不一样,它叫作非关系型数据库,那么问题来了,咱们为何须要NoSQL呢?缘由能够用四个H表示:linux
在咱们开发有大数据或高并发的网站时,每每关系型数据库在这个时候的性能会显得捉襟见肘,然而非关系型的数据库在这个时候就能发挥其做用,好比咱们本文将会提到的Redis,其数据是存储在内存当中,因为内存的读写速度远快于硬盘,所以其性能固然会具备明显的优点。再者其简单的存储结构使得程序与其之间的交互十分简单,高扩展性和可用性在此也可体现出来。所以其特色十分鲜明,即:redis
NoSQL数据库的分类大体有四种:shell
咱们这里介绍的Redis就是属于其中的键值存储这个分类的数据库。数据库
Redis是一个开源的、高性能的、基于键值对的缓存与操做系统,经过提供多种键值数据类型来适应不一样场景下的缓存与存储需求。同时Redis的诸多高层级功能使其能够胜任消息队列、任务队列等不一样的角色。
Redis是REmote DIctionary Server(远程字典服务器)的缩写,它以字典结构存储数据,并容许其余应用经过TCP协议读写字典中的内容。目前为止Redis支持的键值数据类型以下:编程
后文中咱们会详细介绍这些数据类型的基本使用方法。centos
本人使用的是centos7系统进行操做的,Redis兼容大部分POSIX系统,包括Linux和OS X等,安装步骤以下:缓存
wget http://download.redis.io/redis-stable.tar.gz tar xzf redis-stable.tar.gz cd redis-stable make
Redis没有其余外部依赖,因此安装过程很简单,建议在实际运行前使用make test命令来测试Redis是否编译正确,编译后还能够直接执行make install命令来将这些程序复制到/usr/local/bin目录中以便之后执行程序时不用输入完整的路径。
本人以前有在一个Ubuntu系统上安装过一次,执行make的时候报出以下错误:服务器
[root@node1 redis]# make cd src && make all make[1]: Entering directory `/usr/local/redis/src' CC adlist.o 在包含自 adlist.c:34 的文件中: zmalloc.h:50:31: 错误:jemalloc/jemalloc.h:没有那个文件或目录 zmalloc.h:55:2: 错误:#error "Newer version of jemalloc required" make[1]: *** [adlist.o] 错误 1 make[1]: Leaving directory `/usr/local/redis/src' make: *** [all] 错误 2
这个问题能够看一下readme里面的一段话
Selecting a non-default memory allocator when building Redis is done by setting the `MALLOC` environment variable. Redis is compiled and linked against libc malloc by default, with the exception of jemalloc being the default on Linux systems. This default was picked because jemalloc has proven to have fewer fragmentation problems than libc malloc. To force compiling against libc malloc, use: % make MALLOC=libc To compile against jemalloc on Mac OS X systems, use: % make MALLOC=jemalloc
意思是关于分配器allocator, 若是有MALLOC 这个 环境变量, 会有用这个环境变量的 去创建Redis,并且libc 并非默认的分配器, 默认的是 jemalloc, 由于 jemalloc 被证实相对于libc有更少的 fragmentation problems。若是你又没有jemalloc而只有libc就会make 出错。因此加这么一个参数,即执行:
make MALLOC=libc
再者后来执行make test的时候也颇有可能会报一个错误:
make[1]: *** [test] 错误 1 make[1]: Leaving directory `/usr/local/src/redis-stable/src' make: *** [test] 错误 2
这个意思是说没安装tcl,去官网 http://www.linuxfromscratch.o... 上按照说明安装便可。(其实我也不知道这玩意干吗的,照着官网把命令复制出来执行如下就行了==)
好了,至此,Redis就成功安装了,接下来就是启动它了,直接启动的话运行redis-server便可,贼简单:
$ redis-server 3850:C 08 Sep 00:39:53.036 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 3850:C 08 Sep 00:39:53.036 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=3850, just started ...... 3850:M 08 Sep 00:39:53.084 * DB loaded from disk: 0.033 seconds 3850:M 08 Sep 00:39:53.084 * Ready to accept connections
Redis服务器默认端口号为6379,固然你也能够经过--port参数自定义端口号:
$redis-server --port 6380
咱们能够经过PING命令来测试链接是否正常,链接正常会返回PONG:
$redis-cli PING PONG
中止Redis的命令是:
$redis-cli SHUTDOWN
Redis收到SHUTDOWN命令后,会先断开全部客户端连接,而后根据配置执行持久化,最后完成退出。
咱们这里举例几个Redis常见的基础命令:
得到符合规则的键名列表:KEYS pattern
判断一个键是否存在,存在返回1,不然返回0: EXISTS key
删除键,返回删除的键的个数: DEL key [key ...]
得到键值的数据类型: TYPE key
字符串类型是Redis中最基本的数据类型。一个字符串类型键容许存储的数据的最大容量是512MB。
命令:
赋值与取值:SET key value GET key 递增数字: INCR key ------- 若key不存在,则赋值0再加1,decr同理 增长指定的整数: INCRBY key increment 减小指定的整数: DECR key (decrement) 增长指定浮点数: INCRBYFLOAT key increment 向尾部追加值: APPEND key value -------key不存在会建立 返回字符串长度 获取字符串长度: STRLEN key 同时得到/设置多个键值: MGET key [key…] MSET key value [key value …] 位操做: GETBIT key offset ---得到一个字符串类型键指定位置的二进制位的值(0或1) SET BIT key offset value --设置字符串类型键指定位置的二进制位的值,返回值是该位置的旧值。 BITCOUNT key [start] [end] ---得到字符串类型键中值是1的二进制位的个数 BITOP operation destkey key [key …] ---对多个字符串类型键进行位运算,并将结果存储在destkey参数指定的键中。
散列(hash)的键值也是一种字典结构,其存储了字段和字段值的映射,但字段值只支持字符串,不支持其余数据类型。一个散列类型键能够包含最多2^32-1个字段。
散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。
命令:
赋值取值: HSET key field value HGET key field HMSET key field value [field value …] HGETALL key 判断字段是否存在 HEXISTS key field 当字段不存在时赋值 HSETNX key field value 增长数字 HINCREBY key field increment 删除字段 HDEL key field [field …] 只获取字段名或字段值 HKEYS key HVALS key 得到字段数量
HLEN key
列表类型能够存储一个有序的字符串列表,经常使用的操做是向列表两端添加元素,或者得到列表的某一个片断。
列表类型内部是使用双向链表实现的(经过索引访问元素比较慢),因此向列表两端添加元素的时间复杂度为O(1),获取越接近两端的元素就越快。
一个列表类型键能够包含至多2∧32-1个字段。
命令:
向列表两端增长元素
LPUSH key value [value…] ---- > 左边增长,返回值表示增长元素后列表的长度 lpushx key value ------key必须存在 RPUSH key value [value…] ---- > 右边增长,返回值表示增长元素后列表的长度 rpushx key value -----key必须存在
从列表两端弹出元素
LPOP key RPOP key
获取列表中元素的个数
LLEN key
得到列表片断(包含两端)
LRANGE key start stop
删除列表中指定的值 返回实际删除的元素个数
LREM key count value count为负则从后往前删,若为0则删除全部对应value
得到/设置指定索引的元素值
LINDEX key index LSET key index value
只保留列表指定片断
LTRIM key start end
向列表中插入元素
LINSERT 能够BEFORE|AFTER pivot value
将元素从一个列表转到另外一个列表
REOPLPUSH source destination
集中中的每一个元素都是不一样的,且没有顺序,一个集合类型(set)键能够存储2∧32-1个字符串。
集中类型的经常使用操做是向集合中加入或删除元素、判断某个元素是否存在等。集合类型在Redis内部是用值为空的散列表(hash table)实现的,因此这些操做的时间复杂度是O(1)。最方便的是多个集合类型键之间能够进行并集、交集和差集运算。
命令:
增长/删除元素
SADD key member [member …] SREM key member [member …]
得到集合中的全部元素
SMEMBERS key
判断元素是否在集合中
SISMEMBER key member
集合间运算
SDIFF key [key …] 多个集合执行差集运算 A-B SINTER key [key …] 交集运算 A∩B SUNION key [key …] 并集运算 A∪B
得到集合中元素个数
SCARD key
进行集合运算并将结果存储
SDIFFSTORE destination key [key …] SINTERSTORE destination key [key …] SUNIONSTORE destination key [key …]
随机得到集合中的元素
SRANDMEMBER key [count] count>0 count个不重复元素 count<0 |count|个有可能相同的元素
从集合中弹出一个元素
SPOP key
有序集合(sorted set)在集合类型的基础上为集合中的每一个元素都关联了一个分数。
有序集合类型和列表类型类似点:
• 两者都是有序的; • 两者均可以得到某一范围的元素;
区别:
• 列表类型是经过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会较慢,因此它更加适合实现如“新鲜事”或“日志”这样不多访问中间元素的应用; • 有序集合类型是使用散列表和跳跃表实现的,因此即便读取位于中间的数据速度也是很快,时间复杂度O(log(N)); • 列表中不能简单的调整某个元素的位置,可是有序集合能够(更改这个元素的分数);
有序集合要比列表类型更耗费内存;
命令:
增长元素
ZADD key score member [score member …] (也可用于修改)
得到元素的分数
ZSCORE key member
得到排名在某个范围的元素列表
ZRANGE key start stop [WITHSCORES] --按照元素分数从小到大的顺序返回从start到stop之间的全部元素。负数表明从后向前;加上WITHSCORES返回据格式编程元素1,分数1,元素2,分数2.。。;时间复杂度O(log n+m)(n为有序集合的基数,m为返回的元素个数) ZREVRANGE key start stop [WITHSCORES] 从大到小
得到指定分数范围的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
增长某个元素的分数
ZINCREBY key increment member
得到集合中元素的数量
ZCARD key
得到指定分数范围内的元素个数
ZOUNT key min max
删除一个或多个元素
ZREM key member [member…]
按照排名范围删除元素
ZREMRANGEBYRANK key start stop
按照分数范围删除元素
ZREMRANGEBYSCORE key min max
得到元素的排名
ZRANK key member 从小到大 ZREVRANK key member 从大到小
计算有序集合的交集
ZINTERSTORE destination numkeys key [key…] [WEIGHT weight [weight …]] [AGGREGATE SUM|MIN|MAX] 计算多个有序集合的交集并将结果存储在destination键中(一样以有序集合类型存储)
以上,为Redis入门的基础知识,但愿能有所帮助。