NoSql数据库redis基本知识

Redis

一、NoSql介绍

      能干嘛

           KV+Cache+Persistence

      NoSql=Not Only SQL

           泛指非关系型的数据库

           这些类型的数据存储不需要固定的模式,无需多余的操作就可以横向扩展

      CAP

           redis

           mongdb

           memcached

      mysql慢的原因

           1、做大数据的时候,cpu慢

           2、频繁的访问mysql,io慢

      Memcashed(缓存)+mysql+垂直拆分

      mysql主从复制读写分离

      分表分库+水平拆分+mysql集群

           水平拆分降低了单张表的故障发生率和数据的冗余程度

      今天我们可以通过第三方平台(如:google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,SQL数据库已经不适合这些应用了,NoSql数据库的发展也却能很好的处理这些大数据

      3v+3高

           大数据时代的3v

                 海量Volume

                 多样Variety

                 实时Velocity

           互联网需求的3高

                 高并发

                 高可扩

                 高性能

      总结大型互联网应用(大数据、高并发、多样数据类型)的难点和解决方案

           难点

                 数据类型的多样性

                 数据源多样性和变化结构

                 数据源改造而数据服务平台不需要大面积重构

           解决办法

                 统一数据访问层

 

二、CAP+BASE

      传统的ACID分别是什么

           A(Atomicity)原子性

           C(Consistency)一致性

           I(Isolation)独立性

           D(Durability)持久性

      CAP

           C:Consistency(强一致性)

           A:Availability(可用性)

           P:Partition tolerance(分区容错性)

      CAP的3进2

           最多只能同时较好的满足两个

                 CAP的核心理论是:一个分布式系统不可能同时很好的满足一致性,可用性,和分区容错性这三个需求,因此,根据CAP原理将NoSql数据库分成了满足CA原则,满足CP原则和满足AP原则三大类

                      CA -- 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大

                            RDBMS

                      CP -- 满足一致性,分区容错性的系统,通常性能不是特别的高

                            MongoDB、HBase、Redis

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

                            CouchDB、Cassandra、DynamoDB、Riak

                 分区容忍性是我们必须要实现的

                      分布式架构的时候必须做出取舍:

一致性和可用性之间必须做出一个平衡。多余大多数web应用,其实并不需要强一致性。

因此牺牲C换取P,这是目前分布式数据库产品的方向

     三、BASE

           术语

                 基本可用(Basically Available)

                 软状态(Soft state)

                 最终一致(Eventually consistent)

           它的思想是通过让系统放松某一时刻数据一致性的要求来换取系统整体伸缩性和性能上的改观

四、redis的安装

      redis

           REmote DIctionary Server(远程字典服务器)

           完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(Key/Value)分布式内存数据库,基于内存运行并支持持久化的NoSql数据库,是当前最热门的NoSql数据库之一,也被人们称之为数据结构服务器

           和其它redis相比三个特点

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

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

                 redis支持数据的备份,即master-slave模式的数据备份

           作用

                 内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务

                 会话缓存(session cache)

                 队列

                 排名点赞

      安装过程

           1、解压

           2、gcc -v

           3、进入redis目录

           4、make

           5、make install

           6、查看默认目录/usr/local/bin

                 Redis-benchmark:性能测试工具,可以在自己的本子运行,看看自己本子性能如何

                 Redis-check-aof:修复有问题的AOF文件

                 Redis-check-dump:修复有问题的dump.rdb文件

                 Redis-cli:客户端,操作入口

                 Redis-sentinel:redis集群使用

                 Redis-server:Redis服务器启动命令

      安装错误

           1、没有gcc,C语言编译工具

                 安装gcc

           2、安装gcc后再make报没有那个文件或目录

                 make disclean后再重新装

五、简单操作

      redis-conf

           37行daemonize  no改成daemonize yes

      查进程ps -ef|grep redis

           不显示其它ps -ef|grep redis|grep -v grep

                 查6379端口是否占用netstat -anp|grep 6379

                      lsof -i:6379

      启动服务端  /usr/local/bin    redis-server /myredis/redis.conf

      启动客户端 redis-cli -p 6379

           ping返回pong就成功了

      增删改查

           set k1 helloword

           get k1

           DEL k1

           set k1 hellobird

      查看所有记录

           keys *

      退出客户端

           quit

      关服务器再退出

           先SHUTDOWN

           再quit

六、杂项基础知识

      单进程

      默认16个数据库,类似数据下标从零开始,初始默认使用零号库

           redis.conf

                 118行 database 16

      select 命令切换数据库

           启动   select 3  进入4号数据库

      删除当前库

           FLUSHDB

      删全部库命令,清空

           FLUSHALL

      查看有几条记录

           DESIZE

      统一密码管理,16个库都是同样密码,要么都OK要么一个也连接不上

      redis索引都是从零开始

      默认端口都是6379

           意大利女歌手merz

七、redis的数据类型及常用命令

      key

           key *

           exists key的名字,判断某个key是否存在

           move key db ---> 当前库就没有了,被移除了

           expire key 秒钟:为给定的key设置过期时间

           ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期

           type key 查看你的key是什么类型

      String(字符串)

           认知

                 redis最基本的类型

                 二进制安全的,可以包含任何数据,比如jpg图片或者序列化的对象

                 一个redis字符串value理论最多可以使512m

            单值单value

           set/get/del/append/strlen

           incr/decr/incrby/decrby,一定要是数字才能进行加减

           getrange/setrange

                 获取指定区间范围内的值,类似between....and的关系 --------->  从零到负一表示全部

           setex(set with expire)键秒值/setnx(set if not exist)

           mset/mget/msetnx

                 mset k1 v1 k2 v2

           getset 先获取再设置

      List(列表)

           单值多value

           lpush/rpush/lrange

                 lpush list01 1 2 3 4 5 5 5 5

                 rpush list03 1 2 3 4 5 5 5 5

                 lrange list01 0 -1

           lpop/rpop

                 弹出元素

           lindex,按照索引下标获得元素(从上到下)

                 lindex list01 4

           llen

           lrem key 数字N 给定值v1 

解释(删除N个值等于v1的元素)

           rpoplpush源列表 目的列表

                 rpoplpush list01 list04

                 set key index value

                 lset list01 0 404

           linsert key  before/after 已有值  插入的新值

                 linsert list01 before 404 java

                 linsert list01 after404 java

           它的底层实际上是一个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会比较差

      Set(集合)

           单值多value

           sadd/smembers/sismember

                 sadd set01 1 1 12 2

                 smembers set01

                 sismember set01 3

           scard,获取集合里面的元素个数

           srem key value 删除集合中元素

           srandmember key 某个随机数(随机出几个数)

           spop key 随机出栈

           smove key1 key2 在key1里某个值

作用是将key1里已存在的某个值赋给key2

           数学集合类

                 差集:sdiff

                 交集:sinter

                 并集:sunion

      Hash(哈希,类似java里的map)

           KV模式不变,但V是一个键值对

           hset/hget/hmset/hmget/hgetall/hdel

                 hset customer id 11

hset customer name z3

hset customer age 23

                 hget customer id

hget customer name

hget customer age

                 hmset customer id 11 name l4 age 11

                 hmget cistomer id name age

                 hgetall customer

                 hdel customer id

           hlen

                 hlen customer

           hexists key 在key里面的某个值的key

           hkeys/hvals

                 hkeys customer

                 hvals customer

           hincrby/hincrbyfloat

                 hincrby customer age 2

                 hincrbyfloat customer score 0.5

           hsetnx

                 hsetnx customer weixin rrr

      Zset(sorted set:有序集合)

           zadd/zrange

                 zadd zset01 60 v1 70 v2 80 v3 

                 zrange zset01 0 -1

           zrangebyscore key 开始score  结束score

                 zrangebyscore zset01 60 90

                 withscores

                      zrangebyscore zset01 60 90 withscores

                 (  不包含

                      zrangebyscore zset01 (60 90 withscores

                 limit 作用是返回限制

                      zrangebyscore zset01 60 90 withscores limit 0 2

                      0开始后面两个

           zerm key 某score下对应的value值,作用是删除元素

                 zrem zset01 v3

           zcard key 获得几个元素

                 zcard zset01

           zcount key score区间

                 zcount zset01 60 90

           zrank key values值,作用是获得下标值

                 zrank zset01 v3

           zscore key 对应值,获得分数

                 zscore zset01 v1

           zrevrank key values值,作用是逆序获得下标值

                 zrevrank zset01 0 -1

           zrevrangebyscore key 结束score 开始score

                 zrevrangebyscore zset01 90 60

redis命令文档大全网址          

http://redisdoc.com/

你可能感兴趣的:(redis)