Redis简介与安装
1. Redis简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
2. Redis作者
redis的作者,他叫Salvatore Sanfilippo,来自意大利的西西里岛,现在居住在卡塔尼亚。目前供职于Pivotal公司。
3. NoSQL介绍
NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
4. NoSQL数据库的四大分类
键值(Key-Value)存储数据库
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
列存储数据库
这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.
文档型数据库
文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。
图形(Graph)数据库
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J, InfoGrid, Infinite Graph.
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,集群等高可用功能。
5. Redis特点
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持的类型 String, List, Hash, Set 及 Ordered Set 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis是一个简单的,高效的,分布式的,基于内存的缓存工具。
架设好服务器后,通过网络连接(类似数据库),提供Key-Value式缓存服务。
简单,是Redis突出的特色。
简单可以保证核心功能的稳定和优异。
6. Redis安装
下载网址:
http://www.redis.cn/
http://redis.io/
安装过程:
1.redis-5.0.7.tar.gz安装包传到/opt/
2.tar -zxvf redis-5.0.7.tar.gz,进入redis-5.0.7目录
3.安装gcc 命令: yum install gcc-c++(确定root登录,并且可以连网)
4.执行make distclean
5.执行make
6.执行make install
配置过程:
将解压目录中的redis.conf (/opt/redis-5.0.7)复制到安装目录/usr/local/bin/ 便于操作,也便于备份.
修改配置文件redis.conf
daemonize no 修改为 daemonize yes
bind 127.0.01 注释掉
requirepass 设置密码
启动关闭过程:
启动redis:在bin目录下执行 ./redis-server ./redis.conf
连接redis命令:bin目录下执行 ./redis-cli –h IP地址 –p 端口 -a 密码
因为在本机直接./redis-cli -a sqdaben 检查是否成功,输入ping,返回值pong
退出redis客户端:ctrl+c
关闭redis:
第一种关闭方式:(断电、非正常关闭。容易数据丢失)
查询PID ps -ef | grep -i redis
kill -9 PID
第二种关闭方式(正常关闭、数据保存)
./bin/redis-cli shutdown 关闭redis服务,通过客户端进行shutdown
如果redis设置了密码,需要先在客户端通过密码登录,再进行shutdown即可关闭服务端
操作命令:
更多的命令查询:http://redisdoc.com/
1.string类型
赋值语法:
SET KEY_NAME VALUE
Redis SET 命令用于设置给定 key 的值。如果 key 已经存储值, SET 就覆写旧值,且无视类型
SETNX key value //解决分布式锁 方案之一
只有在 key 不存在时设置 key 的值。Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值
MSET key value [key value ...]
同时设置一个或多个 key-value 对
取值语法:
GET KEY_NAME
Redis GET命令用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。
GETRANGE key start end
用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)
GETBIT key offset
对 key 所储存的字符串值,获取指定偏移量上的位(bit)
MGET key1 [key2..]
获取所有(一个或多个)给定 key 的值
GETSET语法: GETSET KEY_NAME VALUE
Getset 命令用于设置指定 key 的值,并返回 key 的旧值,当 key 不存在时,返回 nil
STRLEN key
返回 key 所储存的字符串值的长度
删除语法:
DEL KEY_Name
删除指定的KEY,如果存在,返回值数字类型。
自增/自减:
INCR KEY_Name
Incr 命令将 key 中储存的数字值增1。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作
自增:INCRBY KEY_Name 增量值
Incrby 命令将 key 中储存的数字加上指定的增量值
自减:DECR KEY_NAME 或 DECYBY KEY_NAME 减值
decR 命令将 key 中储存的数字减1
字符串拼接:APPEND KEY_NAME VALUE
Append 命令用于为指定的 key 追加至未尾,如果不存在,为其赋值
2.hash类型
赋值语法:
HSET KEY FIELD VALUE //为指定的KEY,设定FILD/VALUE
HMSET KEY FIELD VALUE [FIELD1,VALUE1]…… 同时将多个 field-value (域-值)对设置到哈希表 key 中。
取值语法:
HGET KEY FIELD //获取存储在HASH中的值,根据FIELD得到VALUE
HMGET key field[field1] //获取key所有给定字段的值
HGETALL key //返回HASH表中所有的字段和值
HKEYS key //获取所有哈希表中的字段
HLEN key //获取哈希表中字段的数量
删除语法:
HDEL KEY field1[field2] //删除一个或多个HASH表字段
其它语法:
HSETNX key field value
只有在字段 field 不存在时,设置哈希表字段的值
HINCRBY key field increment
为哈希表 key 中的指定字段的整数值加上增量 increment 。
HINCRBYFLOAT key field increment
为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
HEXISTS key field //查看哈希表 key 中,指定的字段是否存在
3.List类型
赋值语法:
LPUSH key value1 [value2] //将一个或多个值插入到列表头部(从左侧添加)
RPUSH key value1 [value2] //在列表中添加一个或多个值(从右侧添加)
LPUSHX key value //将一个值插入到已存在的列表头部。如果列表不在,操作无效
RPUSHX key value //一个值插入已存在的列表尾部(最右边)。如果列表不在,操作无效。
取值语法:
LLEN key //获取列表长度
LINDEX key index //通过索引获取列表中的元素
LRANGE key start stop //获取列表指定范围内的元素
描述: 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
删除语法:
LPOP key 移出并获取列表的第一个元素(从左侧删除)
RPOP key 移除列表的最后一个元素,返回值为移除的元素(从右侧删除)
4.set类型
赋值语法:
SADD key member1 [member2] 向集合添加一个或多个成员
取值语法:
SCARD key 获取集合的成员数
SMEMBERS key 返回集合中的所有成员
SISMEMBER key member 判断 member 元素是否是集合 key 的成员(开发中:验证是否存在判断)
SRANDMEMBER key [count] 返回集合中一个或多个随机数
删除语法:
SREM key member1 [member2] 移除集合中一个或多个成员
SPOP key [count] 移除并返回集合中的一个随机元素
SMOVE source destination member
将 member 元素从 source 集合移动到 destination 集合
补充:默认16个数据库,类似数组下表从0开始
统一密码管理,16个库都是同样密码,要么都OK要么一个也连接不上
select命令切换
dbsize查看当前数据库的key的数量
flushdb清空当前库
flushall通杀全部库