redis 小结

1.1 什么是NoSQL

Not Only SQL 泛指非关系型数据库。

随着web2.0的快速发展,非关系型、分布式数据存储得到了快速的发展,它们不保证关系数据的ACID特性。NoSQL概念在2009年被提了出来。NoSQL最常见的解释是“non-relational”,“Not Only SQL”也被很多人接受。(“NoSQL”一词最早于1998年被用于一个轻量级的关系数据库的名字。)

1.2 为什么要使用NoSQL

1.2.2 NoSql数据库的优势

  • 易扩展

  NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。

  • 大数据量,高性能

  NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了。

  • 灵活的数据模型

  NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。这点在大数据量的web2.0时代尤其明显。

  • 高可用

NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如Cassandra,HBase模型,通过复制模型也能实现高可用。

2 redis

2.1 redis简介

全称:REmote DIctionary Server(远程字典服务器)。是完全开源免费的,用C语言编写的, 遵守BCD协议。是一个高性能的(key/value)分布式内存数据库,

基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。

    redis的特点:

i)Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用

ii)Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储

2) Redis支持数据的备份,即master-slave模式的数据备份

2.1 Redis优势

性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。

丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性

2.2 redis应用场景

      新浪微博、facebook、电商系统的商品查询……

2.3 redis下载

(1)Http://redis.io/

(2)Http://www.redis.cn/

2.4 redis版本

3.x(支持集群)  2.x不支持集群   (课程中是用3.0版本)

    副版本号为偶数时,表示是稳定版本,建议在生产环境中使用

    副版本号为基数时,表示是测试版本,不建议在生产环境中是用

2.5 redis安装

     redis没有基于windows的版本。在Linux系统中使用。课程中是用centOS。

2.5.1 单机版安装

2.5.1.1 安装gcc

安装文件是一个压缩包,但由于redis本身是采用c++ 编写的,所以解压完成后,需要编译和安装。所以先要在系统中安装 c++的编译器 gcc-c++

gcc的安装方式分为两种:

在线安装(有网络环境)

  yum install -y gcc-c++

2离线安装(无网络环境)

      可以到 http://vault.centos.org/6.5/os/x86_64/Packages/

      下载需要的安装文件。

       需要的安装文件如下:

ppl-0.10.2-11.el6.x86_64.rpm

ppl-devel-0.10.2-11.el6.x86_64.rpm

gmp-devel-4.3.1-7.el6_2.2.x86_64.rpm

       cloog-ppl-devel-0.15.7-1.2.el6.x86_64.rpm

cpp-4.4.7-4.el6.x86_64.rpm

glibc-devel-2.12-1.132.el6.x86_64.rpm

glibc-headers-2.12-1.132.el6.x86_64.rpm

libstdc++-4.4.7-4.el6.x86_64.rpm

libstdc++-devel-4.4.7-4.el6.x86_64.rpm

gcc-4.4.7-4.el6.x86_64.rpm

gcc-c++-4.4.7-4.el6.x86_64.rpm

kernel-headers-2.6.32-431.el6.x86_64.rpm

mpfr-2.4.1-6.el6.x86_64.rpm

逐个安装:

使用命令为:

 rpm ivh ***.rpm

2.5.1.2 安装redis

1 使用 root 用户登录,把redis安装文件(压缩文件)拷贝到linux系统中

(这里拷贝到了root用户的opt目录中)

2 解压这个文件  tar –zxvf redis-3.0.0.tar.gz

3 进入解压后的目录,对里面的文件进行编译和安装

这里采用编译和安装同时进行的方式

命令:

     make install PREFIX=/usr/local/redis

/usr/local/redis是redis的安装路径,目录名不是一定要叫redis可以自己定义

4 进入redis的安装路径中bin路径,查看里面的文件

其中 redis-server文件就是redis的启动文件

5 ./redis-server 运行这个文件,如果看到一个图形界面,界面中显示redis的版本、软件位数、监听的端口(6379)、PID等信息

说明redis的安装和启动成功。

 

注意: 这里的启动叫做前置启动。

       前置启动的特点,当redis 启动后,linux操作界面将不能输入执行其他命令!!!

2.5.2 redis启动

      redis启动分为前置启动和后置启动。

2.5.2.1 前置启动(一般不用)

./redis-server

特点: redis启动后,将不能输入其他命令。

退出前置启动的方式 ctrl+c

 

2.5.2.2后置启动

1 到redis的解压目录中拷贝 redis.conf 到 redis的安装目录中(和redis-server在同一个目录)

2打开这个文件(vim命令),修改这个文件中 daemonize 的值为yes(默认为no)

 

3在启动redis时, 使用 ./redis-server redis.conf(启动时,指定配置文件)

4测试后置启动是否成功:多种方式

(1) ps aux|grep redis   查看这个进程是否存在

(2) 使用redis自带的客户端工具

10.0.1 redis清空 

redis清空 

进入redis目录下 
redis-cli 
flushall 

 

./redis-cli进入

输入ping 如果返回一个pong 则表示redis启动成功

退出redis客户端的方式:  1 ctrl+c  2 quit 3 exit  

2.5.3 停止redis

l 强制结束程序。强制终止redis进程可能会导致redis持久化数据丢失。

 

l 正确停止redis的方式应该是向redis发送SHUTDOWN命令,方法为(关闭默认的端口)

[root@zrgk redis]# ./bin/redis-cli shutdown

2.6 redis文件介绍 (redis.conf)

     1) daemonize yes         修改启动方式

     2) port 6379             redis端口

     3) database 16           redis默认开启16个库,也就是16个存储空间来存储数据

        注意:16个之间是数据隔离的

     4) cluster-enabled yes    配置redis集群 ,这个配置默认是被注释的,也就是默认不开启集群

     5) save 900 1            这个表示redis的持久化方案 (RDB)

     6)dbfilename dump.rdb    redis持久化时,存放数据的文件

     7)appendonly no          是否开启redis的aof 持久化方案

     8) appendfilename “appendonly.aof”  aof持久化方案存放的文件

2.7 redis持久化方案

     redis的持久化方案:两种 RDB方案 和 AOF方案

2.7.1 什么是redis的持久化方案

     redis 除了可以作为缓存技术,也可以作为非关系型数据库。

     作为缓存技术,数据默认是存放在内存中的,(这样可以提升存取速度)

     但内存不是持久化设备,不能永久保存数据,一旦机器发生问题,

将会造成数据丢失。因此,redis为了解决这个文件,提供了数据的持久化方案(memcahe 没有这个能力)

2.7.2 RDB方案

     默认开启的一种持久化方案。它会根据时间轴,以及key的数量改变,来完成持久化动作。

save 900 1 该备份策略表示 在 900 秒内,如果有一个或多个key的值发生了变化就触发redis的持久化机制。

2.7.3 AOF方案

      该持久化方案,redis默认情况下没有开启。需要手动开启。

      redis.conf   appendonly no 配置成 yes

aof的持久化策略为:redis会记录当前用户执行的,且改变数据的命令。

这种持久化的密度会更细。当然也会对redis的性能产生影响。

注意:即使采用aof的持久化策略,一旦内存崩溃,也会至少丢失一秒的数据。

因此,在很多系统中RDB方案和AOF方案,同时开启

2.8 redis常用命令

2.8.1redis的常用类型

     String(字符串)

      Hash(哈希)

      List(链表)

      Set(集合)

      SortSet(有序集合)

2.8.2 常用命令展示

  set 将一个键值对以字符串类型存储

get 通过key获取value 。只能操作字符串类型

ping 测试redis是否链接 如果已链接返回 PONG

echo 测试redis是否链接 如果已链接返回 echo命令后给定的值

keys 返回所有的key 可以加*通配

exists 判断string类型一个key是否存在 如果存在返回1 否则返回0

del 删除一个key或者多个

expire 设置一个key的过期时间

ttl 查看建的失效时间

select 选择数据库(0-15)

move 将当前数据库中的key转移到其他数据库中

persist 移除给定key的过期时间

randomkey 随机返回key空间的一个key

type 返回值的类型

quit 退出连接

dbsize 返回当前数据库中的key的数目

info 获取服务器的信息和统计

flushdb 删除当前选择的数据库中的key

flushall 删除所有数据库中的所有key

 

如何使用以上命令?

先进入redis客户端

./redis-cli,在客户端中使用以上命令

2.8.3 String(字符串)  

key  value形式存储数据

关于key的说明

1 key 不要太长,不要超过1024个字节。这样会消耗内存,也会降低查询效率

2 key 不要太短。这样会降低可读性。

3一个项目中,key的命名采用同一的规范。

 

   关于value说明:

      String类型存储时,value的最大长度为512M

 

命令:

1、 set (set key value)   键值对到redis中

set name “zhangsan”   “” 可加可不加

set password 123

set aa bb

2、 get (get key)       根据键取值

get name

   

3、 incr 让当前键值以1的数量递增,并返回递增后的值

set  aa  11

incr  aa   返回 12

4、 incrby  可以指定参数一次增加的数值,并返回递增后的值

set aa 11

incrby aa 10 返回 21

5、 decr 让当前键值以1的数量递减 并返回递减后的值

6、 decrby 可以指定参数一次递减的数值,并返回递减后的值

7、 incrbyfloat 可以递增一个双精度浮点数

8、 append 作用是向键值的末尾追加value。如果键不存在则将该键的值设置为value。返回值是追加后字符串的总长度。

set aa hello

append aa world  返回10 表示拼接后的值得长度

get aa 返回helloworld

9、 mget/mset 作用与get/set相似,不过mget/mset可以同时获得/设置多个键的键值

mset xxx 111 yyy 222 zzz 333

mget xxx yyy zzz

返回

“111”

“222”

“333”

转载自  :https://www.cnblogs.com/zls1024/articles/9614412.html

猜你喜欢

转载自www.cnblogs.com/kisshappyboy/p/10449473.html