Presentation is loading. Please wait.

Presentation is loading. Please wait.

NoSQL数据库之Redis数据库管理 主讲:李捷 QQ: 个人主页:www.lamplijie.com

Similar presentations


Presentation on theme: "NoSQL数据库之Redis数据库管理 主讲:李捷 QQ: 个人主页:www.lamplijie.com"— Presentation transcript:

1 NoSQL数据库之Redis数据库管理 主讲:李捷 QQ:86267659 个人主页:www.lamplijie.com
微博:weibo.com/lamplijie

2 单元目标 1.NoSQL介绍 2.Redis的介绍 3.Redis适用场合 4.Redis的安装与部署 5.Redis的数据类型

3 NoSQL介绍 NoSQL(NoSQL = Not Only SQL),意为反SQL运动,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。它指的是非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。

4 NoSQL介绍 NoSQL是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准、ACID属性、表结构等等,这类数据库主要有以下特点:非关系型的、分布式的、开源的、水平可扩展的。

5 NoSQL特点 1.处理超大量的数据 2.运行在便宜的PC服务器集群上 3.击碎了性能瓶颈

6 NoSQL适用场景 1.对数据高并发读写 2.对海量数据的高效率存储和访问 3.对数据的高可扩展性和高可用性

7 Redis的介绍 Redis is an open source, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets. Redis是一个开源的,先进的key-value存储。它通常被称为数据结构服务器,因为键可以包含字符串,哈希,链表,集合和有序集合。

8 Redis的介绍 Redis是一个Key-Value存储系统。它支持存储的value类型很多,包括string(字符串)、list(链表)、哈希、set(集合)、zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集和并集及更丰富的操作, Redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中,它也可以周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。

9 Redis的介绍 提供的API语言包括:C、C++、C#、Clojure Common Lisp、Erlang、Haskell、Java、Javascript、 Lua、Objective-C、Perl、PHP、Python、Ruby Scala、Go、Tcl

10 Redis适用场合 目前全球最大的Redis用户是新浪微博,在新浪有200多台物理机,400多个端口正在运行着Redis,有+4G的数据在Redis上来为微博用户提供服务。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

11 Redis适用场合 在新浪微博Redis的部署场景很多,大概分为如下的2种: 1.应用程序直接访问Redis 数据库
大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

12 Redis适用场合 2.应用程序直接访问Redis,只有当Redis 访问失败时才访问MySQL
大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

13 Redis适用场合 把大象装冰箱的过程: 1、打开冰箱门 2、把大象装进去 3、把冰箱门关上
大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

14 Redis适用场合 1.取最新N个数据的操作 2.排行榜应用,取TOP N 操作 3.需要精确设定过期时间的应用 4.计数器应用
5.Uniq操作,获取某段时间所有数据排重值 6.实时系统,反垃圾系统 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

15 Redis适用场合 7.Pub/Sub构建实时消息系统 8.构建队列系统 9.缓存
大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

16 Redis的安装与部署 Redis的官方下载站是http://redis.io/download
大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

17 Redis的安装与部署 步骤一: 下载安装包:
wget 步骤二: 编译源程序: tar zxvf redis tar.gz cd redis make make install PREFIX=/usr/local/redis 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

18 Redis的安装与部署 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用
在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

19 Redis的安装与部署 步骤三: 移动文件,便于管理: mkdir -p /usr/local/redis/bin
mkdir -p /usr/local/redis/etc mv /lamp/redis /redis.conf /usr/local/redis/etc cd /lamp/redis /src mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

20 Redis的安装与部署 步骤三: 启动Redis服务:
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf Redis服务端的默认连接端口是6379 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

21 Redis的安装与部署 默认情况下,Redis不是在后台运行的,我们需要把开启Redis的后台运行。
vi /usr/local/redis/redis.conf 将daemonize的值改为yes 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

22 Redis的安装与部署 步骤四: 客户端连接 /usr/local/redis/bin/redis-cli 步骤五: 停止Redis实例
我们可以使用/usr/local/redis/bin/redis-cli shutdown 也可以使用 pkill redis-server 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

23 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进行数据库镜像的频率 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

24 Redis的配置 rdbcompression 在进行镜像备份时,是否进行压缩 Dbfilename 镜像备份文件的文件名
Dir 数据库镜像备份的文件放置路径 Slaveof 设置数据库为其他数据库的从数据库 Masterauth 主数据库连接需要的密码验证 Requirepass 设置登录时需要使用的密码 Maxclients 限制同时连接的客户数量 Maxmemory 设置redis能够使用的最大内存 Appendonly 开启append only模式 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

25 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 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

26 Redis的数据类型 Strings类型及操作
String是最简单的类型,一个Key对应一个Value,string类型是二进制安全的。Redis的string可以包含任何数据,比如jpg图片或者序列化的对象。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

27 Strings类型 Set 设置key对应的值为string类型的value 例如:我们添加一个name=lijie的键值对
redis :6379> set name lijie OK 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

28 Strings类型 Setnx 设置key对应的值为string类型的value,如果key已经存在,返回0,nx是not exist的意思
例如:我们添加一个name=lijie_new的键值对。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

29 Strings类型 redis 127.0.0.1:6379> get name “lijie"
redis :6379> setnx name lijie_new (integer) 0 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

30 Strings类型 Setex 设置key对应的值为string类型的value,并指定此键值对应的有效期。
例如:我们添加一个haircolor=red的键值对,并指定有效期为10秒 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

31 Strings类型 redis 127.0.0.1:6379> setex haircolor 10 red OK
redis :6379> get haircolor "red" (nil) 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

32 Strings类型 Setrange 设置指定key的value值的子字符串 例如:我们希望将lijie的126邮箱替换为gmail邮箱
大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

33 Strings类型 redis 127.0.0.1:6379> get name “lijie@126.com"
redis :6379> setrange name 6 gmail.com (integer) 15 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

34 Strings类型 mset 一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置。
大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

35 Strings类型 redis 127.0.0.1:6379> mset key1 lijie1 key2 lijie3 OK
redis :6379> get key1 “lijie1" redis :6379> get key2 “lijie2" 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

36 Strings类型 msetnx 一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置,但是不会覆盖已经存在的key。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

37 Strings类型 get 获取key对应的string值,如果key不存在返回nil。 getset 设置key的值,并返回key的旧值。
大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

38 Strings类型 getrange 获取key的value值的子字符串。 getrange name 0 5 mget
一次获取多个key的值,如果对应key不存在则对应返回nil。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

39 Strings类型 incr 对key的值做加加操作,并返回新的值。 incrby
同incr类似,加指定值,key不存在时候会设置key,并认为原来的value是0。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

40 Strings类型 decr 对key的值做减减操作。 decrby 同decr类似,减指定值。
大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

41 Strings类型 append 给指定key的字符串追加value,返回新字符串值的长度。 append name @li-jie.me
大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

42 Strings类型 strlen 取指定key的value值的长度。
大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

43 hashes类型 hashes类型及操作 Redis hash是一个string类型的field和value的映射表。它的添加、删除操作都是0(1)(平均)。hash特别适合用于存储对象。相较于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

44 hashes类型 hset 设置hash field为指定值,如果key不存在,则先创建。
redis :6379> hset user1 username lijie (integer) 1 redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

45 hashes类型 hsetnx 设置hash field为指定值,如果key不存在,则先创建。如果存在返回0。
redis :6379> hsetnx myhash field "Hello" (integer) 1 (integer) 0 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

46 hashes类型 hmset 同时设置hash的多个field。
redis :6379> hmset myhash field1 "Hello" field2 world OK redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

47 hashes类型 hget 获取指定的hash field。
redis :6379> hget myhash field1 “Hello” redis :6379> hget myhash field2 “World” redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

48 hashes类型 hmget 获取全部指定的hash field。
redis :6379> hmget myhash field1 field2 1)“Hello” 2)“World” redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

49 hashes类型 hincrby 指定的hash field加上给定值。
redis :6379> hincrby myhash age -8 (integer) 12 redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

50 hashes类型 hexists 测试指定field是否存在。
redis :6379> hexists myhash age (integer) 1 redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

51 hashes类型 hlen 返回指定hash的field数量。 redis 127.0.0.1:6379> hlen myhash
(integer) 4 redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

52 hashes类型 hdel 删除指定hash的field。 redis 127.0.0.1:6379> hdel myhash age
(integer) 1 redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

53 hashes类型 hkeys 返回hash的所有field。 redis 127.0.0.1:6379> hkeys myhash
大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

54 hashes类型 hvals 返回hash的所有value。 redis 127.0.0.1:6379> hvals myhash
”World” “Hello” “12” redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

55 hashes类型 hgetall 获取某个hash中全部的field及value。
redis :6379> hgetall myhash ”field1” “world” “field2” “hello” “field3” “12” 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

56 lists类型 lists类型及操作 List是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中key理解为链表的名字。Redis的list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过push、pop操作从链表的头部或者尾部添加删除元素,这样list既可以作为栈,又可以作为队列。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

57 lists类型 lpush 在key对应list的头部添加字符串元素。
redis :6379> lpush mylist "world" (integer) 1 redis :6379> lpush mylist "hello" (integer) 2 redis :6379> lrange mylist 0 -1 "hello“ “world” 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

58 lists类型 rpush 在key对应list的尾部添加字符串元素。
redis :6379> rpush mylist2 "world" (integer) 1 redis :6379> rpush mylist2 "hello" (integer) 2 redis :6379> lrange mylist2 0 -1 " world“ “hello” 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

59 lists类型 linsert 在key对应list的特定位置前或后添加字符串元素。
redis :6379> rpush mylist3 "world" (integer) 1 redis :6379> linsert mylist3 before “world” “hello” (integer) 2 redis :6379> lrange mylist3 0 -1 "hello“ “world” 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

60 lists类型 Lset 设置list中指定下标的元素值。
redis :6379> rpush mylist4 “hello" (integer) 1 redis :6379> lset mylist4 0 “world” OK redis :6379> lrange mylist4 0 -1 “world” 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

61 lists类型 lrem 从key对应list中删除n个和value相同的元素。(n<0从尾删除,n=0全部删除)
redis :6379> rpush mylist5 “hello" (integer) 1 (integer) 2 redis :6379> lrem mylist5 1 “hello” 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

62 lists类型 ltrim 保留指定key的值范围内的数据
redis :6379> rpush mylist8 “one" (integer) 1 redis :6379> rpush mylist8 “two" (integer) 2 redis :6379> ltrim mylist8 1 -1 redis :6379> lrange mylist8 0 -1 1) "two“ 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

63 lists类型 lpop 从list的头部删除元素,并返回删除元素
redis :6379> lrange mylist 0 -1 1) "hello" 2) "world" redis :6379> lpop mylist "hello" 1) "world" redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

64 lists类型 rpop 从list的尾部删除元素,并返回删除元素
redis :6379> lrange mylist2 0 -1 1) "hello" 2) "world" redis :6379> rpop mylist2 “world" 1) “hello" redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

65 lists类型 rpoplpush 从第一个list的尾部移除元素并添加到第二个list的头部。
redis :6379> lrange mylist5 0 -1 1) "three" 2) "hello" redis :6379> lrange mylist6 0 -1 1) "hello" 2) "foo" redis :6379> rpoplpush mylist5 mylist6 "hello" 1) “hello" 3) "foo“ 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

66 lists类型 lindex 返回名称为key的list中index位置的元素
redis :6379> lrange mylist5 0 -1 1) "three" 2) "foo" redis :6379> lindex mylist5 0 "three" redis :6379> lindex mylist5 1 "foo" redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

67 lists类型 llen 返回key对应list的长度 redis 127.0.0.1:6379> llen mylist5
(integer) 2 redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

68 sets类型 sets类型及操作 Set是集合,它是string类型的无序集合。set是通过hash table实现的,添加、删除和查找的复杂度都是0(1)。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现sns中的好友推荐和blog的tag功能。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

69 sets类型 sadd 向名称为key的set中添加元素
redis :6379> sadd myset “hello” (integer) 1 redis :6379> sadd myset “world” (integer) 0 redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

70 sets类型 srem 删除名称为key的set中的元素
redis :6379> sadd myset2 “one” (integer) 1 redis :6379> sadd myset2 “two” redis :6379> srem myset2 “one” redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

71 sets类型 spop 随机返回并删除名称为key的set中一个元素
redis :6379> sadd myset3 “one” (integer) 1 redis :6379> sadd myset3 “two” redis :6379> spop myset3 “two” redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

72 sets类型 sdiff 返回所有给定key与第一个key的差集
redis :6379> smembers myset2 “three” “two” redis :6379> smembers myset3 “one” redis :6379> sdiff myset2 myset3 1) “three” 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

73 sets类型 sdiffstore 返回所有给定key与第一个key的差集,并将结果存为另一个key
redis :6379> smembers myset2 “three” “two” redis :6379> smembers myset3 “one” redis :6379> sdiffstore myset4 myset2 myset3 (integer) 1 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

74 sets类型 Sinter 返回所有给定key的交集 redis 127.0.0.1:6379> smembers myset2
“three” “two” redis :6379> smembers myset3 “one” redis :6379> sinter myset2 myset3 1) “two” 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

75 sets类型 sinterstore 返回所有给定key的交集,并将结果存为另一个key
redis :6379> smembers myset2 “three” “two” redis :6379> smembers myset3 “one” redis :6379> sinterstore myset6 myset2 myset3 (integer) 1 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

76 sets类型 sunion 返回所有给定key的并集 redis 127.0.0.1:6379> smembers myset2
1) "three" 2) "two" redis :6379> smembers myset3 "two" 2) "one" redis :6379> sunion myset2 myset3 3) "two" 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

77 sets类型 sunionstore 返回所有给定key的并集
redis :6379> smembers myset2 1) "three" 2) "two" redis :6379> smembers myset3 "two" 2) "one" redis :6379> sunionstore myset6 myset2 myset3 (integer) 3 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

78 sets类型 smove 从第一个key对应的set中移除member并添加到第二个对应的set中
redis :6379> smembers myset2 1) "three" 2) "two" redis :6379> smembers myset3 "two" 2) "one" redis :6379> smove myset2 myset7 three (integer) 1 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

79 sets类型 scard 返回名称为key的set的元素个数 redis 127.0.0.1:6379> scard myset2
(integer) 1 redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

80 sets类型 sismember 测试member是否是名称为key的set的元素
redis :6379> smembers myset2 1) “two” redis :6379> sismember myset2 two (integer) 1 redis :6379> sismember myset2 one (integer) 0 redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

81 sets类型 srandmember 随机返回名称为key的set的一个元素,但不删除元素
redis :6379> smembers myset3 1) "two" 2) "one" redis :6379> srandmember myset3 "two" "one" redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

82 sorted sets类型 sorted sets类型及操作
sorted set是set的一个升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

83 Sorted sets类型 zadd 向名称为key的zset中添加元素member,score用于排序。如果该元素存在,则更新其顺序
redis :6379> zadd myzset 1 "one" (integer) 1 redis :6379> zadd myzset 2 "two" redis :6379> zadd myzset 3 "two" (integer) 0 redis :6379> zrange myzset 0 -1 withscores 1) "one" 2) "1" 3) "two" 4) "3" 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

84 Sorted sets类型 zrem 删除名称为key的zset中的元素member
redis :6379> zrange myzset 0 -1 withscores 1) "one" 2) "1" 3) "two" 4) "3" redis :6379> zrem myzset two (integer) 1 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

85 Sorted sets类型 zincrby 如果在名称为key的zset中已经存在元素member,则该元素的score增加increment否则向该集合中添加该元素,其score的值为increment redis :6379> zadd myzset2 1 "one" (integer) 1 redis :6379> zadd myzset2 2 "two" redis :6379> zincrby myzset2 2 "one" "3" redis :6379> zrange myzset withscores 1) "two" 2) "2" 3) "one" 4) "3" 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

86 Sorted sets类型 zrank 返回名称为key的zset中member元素的排名(按score从小到大排序)即下标
redis :6379> zrange myzset withscores 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" 7) "five" 8) "5" redis :6379> zrank myzset3 two (integer) 1 redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

87 Sorted sets类型 zrevrank 返回名称为key的zset中member元素的排名(按score从大到小排序)即下标
redis :6379> zrange myzset withscores 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" 7) "five" 8) "5" redis :6379> zrevrank myzset3 two (integer) 2 redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

88 Sorted sets类型 zrevrange
返回名称为key的zset(按score从大到小顺序)中的index从start到end的所有元素 redis :6379> zrevrange myzset withscores 1) "five" 2) "5" 3) "three" 4) "3" 5) "two" 6) "2" 7) "one" 8) "1" redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

89 Sorted sets类型 zrangebyscore 返回集合中score在给定区间的元素
redis :6379> zrange myzset withscores 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" redis :6379> zrangebyscore myzset3 2 3 withscores 1) "two" 2) "2" 3) "three“ 4) "3" 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

90 Sorted sets类型 zcount 返回集合中score在给定区间的数量
redis :6379> zrange myzset withscores 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" 7) "five" 8) "5" redis :6379> zcount myzset3 2 3 (integer) 2 redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

91 Sorted sets类型 zcard 返回集合中元素个数
redis :6379> zrange myzset withscores 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" 7) "five" 8) "5" redis :6379> zcard myzset3 (integer) 4 redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

92 Sorted sets类型 zremrangebyrank 删除集合中排名在给定区间的元素
redis :6379> zrange myzset withscores 1) "one" 2) "1" 3) "two" 4) "2" redis :6379> zremrangebyrank myzset3 1 1 (integer) 1 redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

93 Sorted sets类型 zremrangebyscore 删除集合中score在给定区间的元素
redis :6379> zrange myzset withscores 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" redis :6379> zremrangebyscore myzset3 1 2 (integer) 2 1) "three" 2) "3" 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

94 Redis常用命令 Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在Linux终端使用。 1.键值相关命令
2.服务器相关命令 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

95 键值相关命令 Keys 返回满足给定pattern的所有key 用表达式*,代表取出所有的key
redis :6379> keys * 1) "myzset2" 2) "myzset3" 3) "mylist" 4) "myset2" 5) "myset3" 6) "myset4" 7) "k_zs_1" 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可 用表达式*,代表取出所有的key

96 键值相关命令 exists 确认一个key是否存在 从结果来看,name键不存在,age键存在
redis :6379> exists name (integer) 0 redis :6379> exists age (integer) 1 redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可 从结果来看,name键不存在,age键存在

97 键值相关命令 del 删除一个key redis 127.0.0.1:6379> del age (integer) 1
redis :6379> exists age (integer) 0 redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

98 键值相关命令 expire 设置一个key的过期时间
redis :6379> expire addr 10 (integer) 1 redis :6379> ttl addr (integer) 8 (integer) -1 redis :6379> 在本例中,我们设置addr 这个key 的过期时间是10 秒,然后我们不断的用ttl 来获取这个key 的有效时长,直至为-1 说明此值已过期 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

99 键值相关命令 move 将当前数据库中的key转移到其它数据库中 redis 127.0.0.1:6379> select 0 OK
redis :6379> set age 30 redis :6379> get age "30" redis :6379> move age 1 (integer) 1 (nil) redis :6379> select 1 redis :6379[1]> get age 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

100 键值相关命令 persist 移除给定key的过期时间 redis 127.0.0.1:6379[1]> expire age 300
(integer) 1 redis :6379[1]> ttl age (integer) 294 redis :6379[1]> persist age (integer) -1 redis :6379[1]> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

101 键值相关命令 randomkey 随机返回key空间的一个key redis 127.0.0.1:6379> randomkey
"mylist7" "mylist5" redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

102 键值相关命令 rename 重命名key redis 127.0.0.1:6379[1]> keys * 1) "age"
redis :6379[1]> rename age age_new OK 1) "age_new" redis :6379[1]> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

103 键值相关命令 type 返回值的类型 redis 127.0.0.1:6379> type addr string
redis :6379> type myzset2 zset redis :6379> type mylist list redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

104 服务器相关命令 ping 测试连接是否存活 redis 127.0.0.1:6379> ping PONG
Could not connect to Redis at :6379: Connection refused //执行下面命令之前,我们启动redis 服务器 not connected> ping redis :6379> 第一个ping 时,说明此连接正常 第二个ping 之前,我们将redis 服务器停止,那么ping 是失败的 第三个ping 之前,我们将redis 服务器启动,那么ping 是成功的 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

105 服务器相关命令 echo 在命令行打印一些内容 redis 127.0.0.1:6379> echo lijie “lijie"
大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

106 服务器相关命令 select 选择数据库。Redis数据库编号从0~15,我们可以选择任意一个数据库来进行数据的存取
redis :6379> select 1 OK redis :6379[1]> select 16 (error) ERR invalid DB index redis :6379[16]> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可 当选择16时,报错,说明没有编号为16的这个数据库

107 服务器相关命令 quit 退出连接。 redis 127.0.0.1:6379> quit
redis ]# 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

108 服务器相关命令 dbsize 返回当前数据库中key的数目。 结果说明此库中有18 个key
redis :6379> dbsize (integer) 18 redis :6379> 结果说明此库中有18 个key 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

109 服务器相关命令 info 获取服务器的信息和统计。 redis 127.0.0.1:6379> info
redis_version:2.2.12 redis_git_sha1: redis_git_dirty:0 arch_bits:32 multiplexing_api:epoll process_id:28480 uptime_in_seconds:2515 uptime_in_days:0 . redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

110 服务器相关命令 config get 实时传储收到的请求。
redis :6379> config get dir 1) "dir" 2) "/root/4setup/redis " redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可 本例中我们获取了dir 这个参数配置的值,如果想获取全部参数据的配置值也很简单,只需要执行”config get *”即可将全部的值都显示出来。

111 服务器相关命令 flushdb 删除当前选择数据库中的所有key。 在本例中我们将0 号数据库中的key 都清除了。
redis :6379> dbsize (integer) 18 redis :6379> flushdb OK (integer) 0 redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可 在本例中我们将0 号数据库中的key 都清除了。

112 服务器相关命令 flushall 删除所有数据库中的所有key。
redis :6379[1]> dbsize (integer) 1 redis :6379[1]> select 0 OK redis :6379> flushall redis :6379> select 1 (integer) 0 redis :6379[1]> 在本例中我们先查看了一个1 号数据库中有一个key,然后我切换到0 号库执行flushall 命令, 结果1 号库中的key 也被清除了,说是此命令工作正常。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

113 Redis高级实用特性 1.安全性 2.主从复制 3.事务处理 4.持久化机制 5.发布订阅消息 6.虚拟内存的使用
大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

114 安全性 设置客户端连接后进行任何其他指定前需要使用的密码。
# requirepass foobared requirepass beijing 警告:因为redis 速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150K 次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。 我们设置了连接的口令是beijing 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

115 安全性 我们启动一个客户端试一下。 这里显示权限被禁止,我们来设置一下权限
redis ]# src/redis-cli redis :6379> keys * (error) ERR operation not permitted redis :6379> 这里显示权限被禁止,我们来设置一下权限 redis :6379> auth beijing OK redis :6379> keys * 1) "name" redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

116 安全性 我们还可以在连接到服务器期间就指定一个口令
redis ]# src/redis-cli -a beijing redis :6379> keys * 1) "name" redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

117 主从复制 Redis主从复制配置和使用都非常简单。通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

118 主从复制 Redis主从复制特点: 1.Master可以拥有多个slave
2.多个slave可以连接同一个master外,还可以连接到其它slave 3.主从复制不会阻塞master,在同步数据时,master可以继续处理client请求 4.提高系统的伸缩性 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

119 主从复制 Redis主从复制过程: 1.Slave与master建立连接,发送sync同步命令
2.Master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。 3.后台完成保存后,就将此文件发送给slave 4.Slave将此文件保存到硬盘上 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

120 主从复制 配置主从服务器: 配置slave服务器很简单,只需要在slave的配置文件中加入以下配置:
slaveof #指定master 的ip 和端口 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可 masterauth lamp #这是主机的密码

121 主从复制 设置成功后,我们来做一个实验: 我们在主数据库上设置一对键值对 在从数据库上取这个键
redis :6379> set name master OK redis :6379> 在从数据库上取这个键 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可 redis :6378> get name “master" redis :6378>

122 主从复制 那我们怎么判断哪个是主哪个是从呢?我们只需调用info就可以得到主从的信息,我们在从库中执行info
redis :6378> info role:slave master_host:localhost master_port:6379 master_link_status:up master_last_io_seconds_ago:10 master_sync_in_progress:0 db0:keys=1,expires=0 redis :6378> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

123 事务处理 Redis对事务的支持目前还比较简单。Redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。当一个client在一个连接中发出multi命令时,这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

124 简单事务处理 redis 127.0.0.1:6379> get age "33"
redis :6379> multi OK redis :6379> set age 10 QUEUED redis :6379> set age 20 redis :6379> exec 1) OK 2) OK "20" redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

125 如何取消一个事务 redis :6379> get age "20" redis :6379> multi OK redis :6379> set age 30 QUEUED redis :6379> set age 40 redis :6379> discard redis :6379> 可以发现这次2 个set age 命令都没被执行。discard 命令其实就是清空事务的命令队列并退出事务上下文,也就是我们常说的事务回滚。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

126 乐观锁复杂事务控制 乐观锁:大多数是基于数据版本(version)的记录机制实现的。即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表添加一个”version”字段来实现读取出数据时,将此版本号一同读出,之后更新时,对此版本号加1。此时,将提交数据的版本号与数据库表对应记录的当前版本号进行比对,如果提交的数据版本号大于数据库当前版本号,则予以更新,否则认为是过期数据。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

127 乐观锁复杂事务控制 Redis乐观锁实例:假设有一个age的key,我们开2个session来对age进行赋值操作,我们来看一下结果如何。
redis :6379> set age 20 QUEUED redis :6379> exec (nil) redis :6379> get age "30" redis :6379> (1)第1 步 session1 redis :6379> get age "10" redis :6379> watch age OK redis :6379> multi redis :6379> (2)第2 步 session2 redis :6379> set age 30 OK redis :6379> get age "30" redis :6379> 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

128 乐观锁复杂事务控制 watch 命令会监视给定的key,当exec时候如果监视的key从调用watch后发生过变化,则整个事务会失败。也可以调用watch多次监视多个key.这样就可以对指定的key加乐观锁了。注意watch的key是对整个连接有效的,事务也一样。如果连接断开,监视和事务都会被自动清除。当然了exec,discard,unwatch命令都会清除连接中的所有监视。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

129 事务回滚 redis :6379> get age "30" redis :6379> get name “lijie" redis :6379> multi OK redis :6379> incr age QUEUED redis :6379> incr name redis :6379> exec 1) (integer) 31 2) (error) ERR value is not an integer or out of range "31" redis :6379> redis 的事务实现是如此简单,当然会存在一些问题。第一个问题是redis 只能保证事务的每个命令连续执行,但是如果事务中的一个命令失败了,并不回滚其他命令,比如使用的命令类型不匹配。 从这个例子中可以看到,age 由于是个数字,那么它可以有自增运算,但是name 是个字符串,无法对其进行自增运算,所以会报错,如果按传统关系型数据库的思路来讲,整个事务都会回滚,但是我们看到redis 却是将可以执行的命令提交了,所以这个现象对于习惯于关系型数据库操作的朋友来说是很别扭的,这一点也是redis 今天需要改进的地方。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

130 持久化机制 Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化。Redis支持两种持久化方式: 1.snapshotting(快照)也是默认方式 2.Append-only file(缩写aof)的方式。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

131 Snapshotting方式 快照是默认的持久化方式。这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key呗修改就自动做快照。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可 save #900秒内如果超过1个key被修改,则发起快照保存 save #300秒内容如超过10个key被修改,则发起快照保存 save

132 aof方式 由于快照方式是在一定间隔时间做一次的,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。
aof比快照方式有更好的持久化性,是由于在使用aof时,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

133 aof方式 当然由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。
可以通过配置文件告诉redis我们想要通过fsync函数强制os写入到磁盘的时机。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可 appendonly yes //启用aof 持久化方式 # appendfsync always //收到写命令就立即写入磁盘,最慢,但是保证完全的持久化 appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中 # appendfsync no //完全依赖os,性能最好,持久化没保证

134 发布及订阅消息 发布订阅(pub/sub)是一种消息通信模式,主要的目的是解除消息发布者和消息订阅者之间的耦合,Redis作为一个pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将信息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的信息时,订阅该信息类型的全部client都会收到此消息。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

135 虚拟内存的使用 Redis的虚拟内存与操作系统的虚拟内存不是一回事,但是思路和目的都是相同的。就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据。尤其是对于redis这样的内存数据库,内存总是不够用的。除了可以将数据分割到多个redis server外。另外能够提高数据库容量的办法就是使用虚拟内存把那些不经常访问的数据交换到磁盘上。 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

136 虚拟内存配置 下面是vm相关配置: vm-enabled yes #开启vm功能
vm-swap-file /tmp/redis.swap #交换出来的value保存的文件路径 vm-max-memory #redis使用的最大内存上限 vm-page-size 32 #每个页面的大小32字节 vm-pages #最多使用多少页面 vm-max-threads 4 #用于执行value对象换入患处的工作线程数量 大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

137 Redis连接PHP 1.安装PHP扩展模块 2.PHP-Redis使用手册
大部分常用功能在前面的学习过程中基本上已经多多少少接触过了,这里写到一起可以起到一个整体回顾的巩固作用 在第9~14页中,对于之前未讲过的部分知识(例如重定向输入、追加输入/输出、历史命令条数的限制等),则应该适当强调,其余的简略讲解即可

138 Thanks


Download ppt "NoSQL数据库之Redis数据库管理 主讲:李捷 QQ: 个人主页:www.lamplijie.com"

Similar presentations


Ads by Google