redis入门篇(基础笔记)

一、NOSQL数据库

1.1 NoSQL(非关系型数据库)分类

  • 键值存储数据库:主要使用哈希表,这个表中有一个特定的键和一个指针指向特定的数据。如Redis,Voldemort,Oracle BDB

  • 列存储数据库:通常用来应对分布式存储的海量数据。键仍然存在,但是他们的特点是指向了多个列,如HBase,Rlak

  • 文档型数据库:数据模型是版本化的文档,半结构化的文档已特定的格式存储,比如JSON.文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB,MongoDB基于分布式文件存储的数据库

  • 图形数据库:图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST格式的数据接口或者查询API,如Neo4J,InfoGrid,Infinite Graph


1.2 分类特定

在这里插入图片描述

小结:NOSQL的数据模型:KV键值、BSON、列族 和 图形


1.3 分布式数据库CAP原理

  • C: Consistency 一致性
  • A: Availability 可用性
  • P:Partition Tolerance分区容错性
    注:具体含义参看http://blog.51cto.com/cuchadanfan/1700711
    它的意思是,一个分布式系统不能同时满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个
    在这里插入图片描述

CA :满足一致性,可用性的系统,通常在可扩展性上不太强大:传统关系型数据库。

CP: 满足一致性,分区容忍必的系统,通常用户操作响应上不太稳定:Redis、MongoDB、HBase等

AP: 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些:使用在DNS上


分区容忍性是我们必须要实现的。也就是只能在一致性可用性之间权衡。没有NOSQL系统能同时保证这三点。


传统关系型数据库系统的事务都有ACID的属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)


1.4 分布式和集群的概念

  • 分布式:不同的多台服务器上面部署不同的服务模块,他们之间通过RPC/RMI通信和调用,对外提供服务和组内协作。
  • 集群: 不同的多台服务器上面部署相同的服务模块,通过分布式调用软件 进行统一的调度,对外提供服务和访问。

二、redis 基本概念

2.1 什么是redis

Redis是以key-value store存储,data structure service 数据结构服务器。键可以包含String字符串,哈希,list链表,set集合,zset有序集合。这些数据集合都支出push/pop、add/remove及取交集以及更丰富的操作,redis支持各种不同方式排序,为了保证效率,数据都是缓存在内存中,它可以周期性的把更新的数据写入磁盘或者把修改操作写入追加到文件里


2.2 redis 持久化方式

可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用

  • RDB:定期将数据刷入硬盘;
  • AOF:以日志的形式来记录每个写操作,AOF实时性较高

2.3 redis 的特点

  • Redis的所有操作都是原子性的; 多个操作也支持事务,通过MULTIEXEC指令包起来

2.4 redis面向分布式的解决方案

  • 主从模式: 有一个主节点用来写,两个主节点用来读,这三个节点中的数据都是一样的。
  • 哨兵模式: 哨兵模式 就是在主从模式上加一个哨兵节点,比如主节点挂了,那么哨兵节点就在从节点中选取一个作为主节点。
  • 集群模式: 集群模式支持多主多从,也就是有多个哨兵模式的节点组。集群模式对加主节点和减掉主节点的支持都很好。

三、redis 安装

  1. 在官网下载对应版本的安装包:http://redis.io/download ; 下载安装包上传到服务器。或者使用wget 命令下载。
#  使用wget 下载redis安装包
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
  1. 解压
# 通过 -C 指定到安装的目录
tar -zxvf redis-4.0.10.tar.gz  -C /usr/local/
  1. 进入redis的安装目录。然后执行make 命令。
#进入指定目录
cd /usr/local/redis-4.0.10/
#执行mark命令
make
  1. 修改配置。绑定ip。 然后可以设置端口

如果取消监听,可以去掉bind这一行。同时设置一个密码 requirepass 密码

vim /usr/local/redis-4.0.10/redis.conf

在这里插入图片描述

  1. 启动Redis服务:
 /usr/local/redis-4.0.10/src/redis-server  /usr/local/redis-4.0.10/redis.conf &  
# Redis服务端的默认连接端口是6379

在【】里面的内容只是简化安装过程。可以忽略

以上步骤就基本完成安装了:http://www.redis.cn/download.html

启动服务:

  • 二进制文件是编译完成后在src目录下,通过下面的命令启动Redis服务:
/usr/local/redis-4.0.10/src/redis-server
  • 可以使用内置的客户端命令redis-cli进行使用:
/usr/local/redis-4.0.10/src/redis-cli
#退出客户端quit
  • 但是上诉步骤只是启动了前台进程,且启动不方便。

  1. 启动时并指定配置文件:
#启动时指定配置文件
/usr/local/redis-4.0.10/src/redis-server   /usr/local/redis-4.0.10/redis.conf
#如果觉得命令太长,则可以将拷贝和移动文件。

(注意要使用后台启动,所以修改redis.conf里的 daemonize 改为yes)

#修改配置文件
vim  /usr/local/redis-4.0.10/redis.conf
#daemonize=yes

  1. 验证启动是否成功:
ps -ef | grep redis 查看是否有redis服务 或者 查看端口:
netstat -tunpl | grep 6379
  1. 退出redis服务:
pkill redis-server 、
kill 进程号、
/usr/local/redis-4.0.10/src/redis-cli  shutdown 

四、redis的数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

Redis 命令参考:http://redisdoc.com/


4.1 key(键)

redis 的索引都是从0开始; 默认有16个数据库

命令描述
select 0redis 默认开启16个database 。select index 选择数据库
dbsize数据库key的大小
keys *获取所有的key
flushdb清空当前库
flushall清空所有库
exists key判断某个key是否存在
move key db将当前数据库的 key 移动到给定的数据库 db 当中 。例如 move name 1 将name 移动到db 1
EXPIRE key seconds为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除
TTL key以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live);
当 key 不存在时,返回 -2 。
当 key 存在但没有设置剩余生存时间时,返回 -1 。
否则,以秒为单位,返回 key 的剩余生存时间
TYPE key返回 key 所储存的值的类型

4.2 String(字符串)

string 是 redis 最基本的类型,一个 key 对应一个 value,string 类型是 redis 最基本的数据类型,string 类型的值最大能存储 512MB

[root@101 src]# ./redis-cli 
127.0.0.1:6379> set name "redis"
OK
127.0.0.1:6379> get name
"redis"
127.0.0.1:6379> 

使用命令: setget

命令描述
SET key value [EX seconds] [PX milliseconds] [NX|XX]将字符串值 value 关联到 key;如果 key 已经持有其他值, SET 就覆写旧值,无视类型
NX:只在键不存在时,才对键进行设置操作 SET key value NX 效果等同于SETNX key value
XX :只在键已经存在时,才对键进行设置操作
GET key返回 key 所关联的字符串值。
如果 key 不存在那么返回特殊值 nil 。
假如 key 储存的值不是字符串类型,返回一个错误,因为 GET 只能用于处理字符串值
DEL key [key ...]删除给定的一个或多个 key 。不存在的 key 会被忽略
APPEND key value如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
STRLEN key返回 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。
SETEX key seconds value将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。如果 key 已经存在, SETEX 命令将覆写旧值
MGET key [key ...]返回所有(一个或多个)给定 key 的值。如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。因此,该命令永不失败
更多命令查看参考链接……

4.2 Hash(哈希)

Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

#语法格式如下:
HMSET key field value [field value ...]

同时将多个 field-value (域-值)对设置到哈希表 key 中。
此命令会覆盖哈希表中已存在的域。
如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作

redis> HMSET website google www.google.com yahoo www.yahoo.com
OK
redis> HGET website google
"www.google.com"
redis> HGET website yahoo
"www.yahoo.com"

4.3 List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

#语法格式如下:
LPUSH key value [value ...]

127.0.0.1:6379> lpush language redis python java
(integer) 3
127.0.0.1:6379> lrange language 0 3
1) "java"
2) "python"
3) "redis"
127.0.0.1:6379> 

4.4 Set(集合)

set集合是string类型的无效集合,set是通过hashtable实现的,对集合我们可以取交集、并集、差集

#sadd 添加一个 string 元素到 key 对应的 set 集合中,成功返回1,如果元素已经在集合中返回 0,
#如果 key 对应的 set 不存在则返回错误

127.0.0.1:6379> sadd books jianai biancheng 
(integer) 2
127.0.0.1:6379> smembers books
1) "biancheng"
2) "jianai"
127.0.0.1:6379> 


4.5 SortedSet(有序集合)

#语法格式:
ZADD key score member [[score member] [score member] ...]

将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。

127.0.0.1:6379> zadd page_rank 1 google.com 2 baidu.com 3 bing.com
(integer) 3
127.0.0.1:6379> zrange page_rank 0 -1 withscores
1) "google.com"
2) "1"
3) "baidu.com"
4) "2"
5) "bing.com"
6) "3"
127.0.0.1:6379> 


五、配置文件redis.conf

redis.conf 配置项说明如下:

  1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
    daemonize no

  2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
    pidfile /var/run/redis.pid

  3. 指定Redis监听端口,默认端口为6379,

  4. 绑定的主机地址
    bind 127.0.0.1

  5. 当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
    timeout 300

  6. 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose

  7. 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null

    logfile stdout

  8. 设置数据库的数量,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id

  9. 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区
    maxmemory

  10. 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
    appendonly no

  11. 设置密码,requirepass 增加一个行

例如:增加密码参数:requirepass 密码

详细内容参见:http://www.runoob.com/redis/redis-conf.html


参考

http://blog.51cto.com/cuchadanfan/1700711
http://www.runoob.com/redis/redis-intro.html
http://redisdoc.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值