1.37k likes | 1.65k Views
NoSQL 数据库之 Redis 数据库管理. 主讲 : 李捷 QQ:86267659 个人主页 :www.lamplijie.com 邮箱 :86267659@qq.com 微博 :weibo.com/lamplijie. 单元目标. 1.NoSQL 介绍 2.Redis 的介绍 3.Redis 适用场合 4.Redis 的安装与部署 5.Redis 的数据类型 6.Redis 的常用命令 7.Redis 的高级应用. NoSQL 介绍.
E N D
NoSQL数据库之Redis数据库管理 主讲:李捷 QQ:86267659 个人主页:www.lamplijie.com 邮箱:86267659@qq.com 微博:weibo.com/lamplijie
单元目标 • 1.NoSQL介绍 • 2.Redis的介绍 • 3.Redis适用场合 • 4.Redis的安装与部署 • 5.Redis的数据类型 • 6.Redis的常用命令 • 7.Redis的高级应用
NoSQL介绍 NoSQL(NoSQL = Not Only SQL),意为反SQL运动,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。它指的是非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。
NoSQL介绍 NoSQL是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准、ACID属性、表结构等等,这类数据库主要有以下特点:非关系型的、分布式的、开源的、水平可扩展的。
NoSQL特点 1.处理超大量的数据 2.运行在便宜的PC服务器集群上 3.击碎了性能瓶颈
NoSQL适用场景 1.对数据高并发读写 2.对海量数据的高效率存储和访问 3.对数据的高可扩展性和高可用性
Redis的介绍 Redis is an open source, advanced key-valuestore. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets. Redis是一个开源的,先进的key-value存储。它通常被称为数据结构服务器,因为键可以包含字符串,哈希,链表,集合和有序集合。
Redis的介绍 Redis是一个Key-Value存储系统。它支持存储的value类型很多,包括string(字符串)、list(链表)、哈希、set(集合)、zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集和并集及更丰富的操作, Redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中,它也可以周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
Redis的介绍 提供的API语言包括:C、C++、C#、Clojure Common Lisp、Erlang、Haskell、Java、Javascript、 Lua、Objective-C、Perl、PHP、Python、Ruby Scala、Go、Tcl
Redis适用场合 • 目前全球最大的Redis用户是新浪微博,在新浪有200多台物理机,400多个端口正在运行着Redis,有+4G的数据在Redis上来为微博用户提供服务。
Redis适用场合 • 在新浪微博Redis的部署场景很多,大概分为如下的2种: • 1.应用程序直接访问Redis 数据库
Redis适用场合 • 2.应用程序直接访问Redis,只有当Redis 访问失败时才访问MySQL
Redis适用场合 Redis数据库提供多种灵活的数据结构和数据操作,为不同的大象构建不同的冰箱。 • 把大象装冰箱的过程: • 1、打开冰箱门 • 2、把大象装进去 • 3、把冰箱门关上
Redis适用场合 • 1.取最新N个数据的操作 • 2.排行榜应用,取TOP N 操作 • 3.需要精确设定过期时间的应用 • 4.计数器应用 • 5.Uniq操作,获取某段时间所有数据排重值 • 6.实时系统,反垃圾系统
Redis适用场合 • 7.Pub/Sub构建实时消息系统 • 8.构建队列系统 • 9.缓存
Redis的安装与部署 • Redis的官方下载站是http://redis.io/download
Redis的安装与部署 • 步骤一: • 下载安装包: • wgethttp://redis.googlecode.com/files/redis-2.4.17.tar.gz • 步骤二: • 编译源程序: • tar zxvf redis-2.4.17.tar.gz • cd redis-2.4.17 • make • make install PREFIX=/usr/local/redis
Redis的安装与部署 • 步骤三: • 启动Redis服务: • /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf • Redis服务端的默认连接端口是6379
Redis的安装与部署 • 默认情况下,Redis不是在后台运行的,我们需要把开启Redis的后台运行。 • vi /usr/local/redis/redis.conf • 将daemonize的值改为yes
Redis的安装与部署 • 步骤四: • 客户端连接 • /usr/local/redis/bin/redis-cli • 步骤五: • 停止Redis实例 • 我们可以使用/usr/local/redis/bin/redis-cli shutdown • 也可以使用 pkill redis-server
Redis的配置 • daemonize如果需要在后台运行,把该项改为yes • pidfile配置多个pid的地址 默认在/var/run/redis.pid • bind绑定ip,设置后只接受来自该ip的请求 • port监听端口,默认为6379 • timeout 设置客户端连接时的超时时间,单位为秒 • loglevel 分为4级,debug、verbose、notice、warning • logfile 配置log文件地址 • databases设置数据库的个数,默认使用的数据库为0 • save设置redis进行数据库镜像的频率
Redis的配置 • rdbcompression 在进行镜像备份时,是否进行压缩 • Dbfilename 镜像备份文件的文件名 • Dir数据库镜像备份的文件放置路径 • Slaveof 设置数据库为其他数据库的从数据库 • Masterauth 主数据库连接需要的密码验证 • Requirepass 设置登录时需要使用的密码 • Maxclients 限制同时连接的客户数量 • Maxmemory 设置redis能够使用的最大内存 • Appendonly 开启append only模式
Redis的配置 • Appendfsync 设置对appendonly.aof文件同步的频率 • vm-enabled 是否开启虚拟内存支持 • vm-swap-file 设置虚拟内存的交换文件路径 • vm-max-memory 设置redis使用的最大物理内存大小 • vm-page-size 设置虚拟内存的页大小 • vm-pages设置交换文件的总的page数量 • vm-max-threads 设置VM IO同时使用的线程数量 • Glueoutputbuf 把小的输出缓存存放在一起 • hash-max-zipmap-entries 设置hash的临界值 • Activerehashing 重新hash
Redis的数据类型 • Strings类型及操作 • String是最简单的类型,一个Key对应一个Value,string类型是二进制安全的。Redis的string可以包含任何数据,比如jpg图片或者序列化的对象。
Strings类型 • Set • 设置key对应的值为string类型的value • 例如:我们添加一个name=lijie的键值对 • redis 127.0.0.1:6379> set name lijie • OK
Strings类型 • Setnx • 设置key对应的值为string类型的value,如果key已经存在,返回0,nx是not exist的意思 • 例如:我们添加一个name=lijie_new的键值对。
Strings类型 redis 127.0.0.1:6379> get name “lijie" redis 127.0.0.1:6379> setnx name lijie_new (integer) 0 redis 127.0.0.1:6379> get name “lijie"
Strings类型 Setex 设置key对应的值为string类型的value,并指定此键值对应的有效期。 例如:我们添加一个haircolor=red的键值对,并指定有效期为10秒
Strings类型 redis 127.0.0.1:6379> setex haircolor 10 red OK redis 127.0.0.1:6379> get haircolor "red" redis 127.0.0.1:6379> get haircolor (nil)
Strings类型 Setrange 设置指定key的value值的子字符串 例如:我们希望将lijie的126邮箱替换为gmail邮箱
Strings类型 redis 127.0.0.1:6379> get name “lijie@126.com" redis 127.0.0.1:6379> setrange name 6 gmail.com (integer) 15 redis 127.0.0.1:6379> get name “lijie@gmail.com"
Strings类型 mset 一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置。
Strings类型 redis 127.0.0.1:6379> msetkey1 lijie1 key2 lijie3 OK redis 127.0.0.1:6379> get key1 “lijie1" redis 127.0.0.1:6379> get key2 “lijie2"
Strings类型 msetnx 一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置,但是不会覆盖已经存在的key。
Strings类型 get 获取key对应的string值,如果key不存在返回nil。 getset 设置key的值,并返回key的旧值。
Strings类型 getrange 获取key的value值的子字符串。 getrange name 0 5 mget 一次获取多个key的值,如果对应key不存在则对应返回nil。
Strings类型 incr 对key的值做加加操作,并返回新的值。 incrby 同incr类似,加指定值,key不存在时候会设置key,并认为原来的value是0。
Strings类型 decr 对key的值做减减操作。 decrby 同decr类似,减指定值。
Strings类型 append 给指定key的字符串追加value,返回新字符串值的长度。 append name @li-jie.me
Strings类型 strlen 取指定key的value值的长度。
hashes类型 • hashes类型及操作 • Redis hash是一个string类型的field和value的映射表。它的添加、删除操作都是0(1)(平均)。hash特别适合用于存储对象。相较于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。
hashes类型 • hset • 设置hash field为指定值,如果key不存在,则先创建。 redis 127.0.0.1:6379> hset user1 username lijie (integer) 1 redis 127.0.0.1:6379>
hashes类型 • hsetnx • 设置hash field为指定值,如果key不存在,则先创建。如果存在返回0。 redis 127.0.0.1:6379> hsetnx myhash field "Hello" (integer) 1 redis 127.0.0.1:6379> hsetnx myhash field "Hello" (integer) 0
hashes类型 • hmset • 同时设置hash的多个field。 redis 127.0.0.1:6379> hmset myhash field1 "Hello" field2 world OK redis 127.0.0.1:6379>
hashes类型 • hget • 获取指定的hash field。 redis 127.0.0.1:6379> hget myhash field1 “Hello” redis 127.0.0.1:6379> hget myhash field2 “World” redis 127.0.0.1:6379>
hashes类型 • hmget • 获取全部指定的hash field。 redis 127.0.0.1:6379> hmget myhash field1 field2 1)“Hello” 2)“World” redis 127.0.0.1:6379>
hashes类型 • hincrby • 指定的hash field加上给定值。 redis 127.0.0.1:6379> hincrby myhash age -8 (integer) 12 redis 127.0.0.1:6379>
hashes类型 • hexists • 测试指定field是否存在。 redis 127.0.0.1:6379> hexists myhash age (integer) 1 redis 127.0.0.1:6379>
hashes类型 • hlen • 返回指定hash的field数量。 redis 127.0.0.1:6379> hlen myhash (integer) 4 redis 127.0.0.1:6379>