兄弟连NoSQL视频教程 redis笔记

兄弟连NoSQL视频教程 redis笔记


================================课程目录======================================

01、NoSQL数据库之Redis数据库管理一(Redis的介绍与安装部署).wmv本节主要给大家详细地介绍NoSQL数据库,NoSQL数据库的特点,适用场景,与关系型数据库的对比,Redis数据库的介绍,Redis与MongoDB数据库、MySQL数据库的比较,Redis数据库在Linux系统下的安装与部署。        

02、NoSQL数据库之Redis数据库管理二(string类型和hash类型).wmv本节主要给大家详细地讲解了Redis数据库的string数据类型,Hash数据类型及这两种数据类型的相关操作的介绍(set,get,getset,setex,setnx,append,strlen,getrange,setrange,mset,incr,incrby,hset,hget,hlen,hdel,hkeys,hvals,hgetall,hincrby,hmset,hmget等相关操作)。     

03、NoSQL数据库之Redis数据库管理三(list类型).wmv
本节主要给大家详细地讲解了Redis数据库的list数据类型(链表结构)的介绍及相关操作的介绍(lpush、rpush、lpop、rpop、lindex、lset、lrange、ltrim、lrem、linsert、rpoplpush等相关操作)。        

04、NoSQL数据库之Redis数据库管理四(set类型和zset类型).wmv
本节主要给大家详细地讲解了Redis数据库的无序集合及有序集合的介绍及相关操作的介绍(sadd、srem、smove、sismember、scard、spop、srandmember、sinter、sinterstore、sdiff、sdiffstore、sunion、sunionstore、smembers、zadd、zrange、zrem等相关操作)。        

05、NoSQL数据库之Redis数据库管理五(Redis的常用命令及高级应用).wmv
本节主要给大家讲解了Redis数据库的常用命令及高级应用,其中常用命令包括键值相关命令和服务器相关命令,而高级应用当中给大家详细介绍了Redis数据库的安全性的设置、主从复制。

06、NoSQL数据库之Redis数据库管理六(Redis的高级应用之事务处理、持久化操作、pub_sub、虚拟内存).wmv

本节主要给大家详细地讲解了Redis数据库当中的高级应用,其中包括Redis的事务处理、持久化操作、pub/sub消息发布与订阅、虚拟内存的配置。

07、NoSQL数据库之Redis数据库PHP-REDIS实例1.wmv本节主要给大家详细地讲解了PHP在Linux环境下打Redis数据库的扩展,以及使用PHP连接Redis数据库做一个小型的用户管理系统,包括用户的增删改查。      

08、NoSQL数据库之Redis数据库PHP-REDIS实例2.wmv本节是上节的延续,给大家详细地讲解了使用PHP连接Redis,使用List类型做用户的分页,以及用户的登录功能,使用集合实现用户关注功能。     

=================================课程目录=====================================
第一课:01、NoSQL数据库之Redis数据库管理一(Redis的介绍与安装部署).wmv
本节主要给大家详细地介绍NoSQL数据库,NoSQL数据库的特点,适用场景,与关系型数据库的对比,Redis数据库的介绍,Redis与MongoDB数据库、MySQL数据库的比较,Redis数据库在Linux系统下的安装与部署。

Nosql介绍:
NoSQl(NoSql=Not Only SQL),意思为反sql运动,是非关系型数据库.

主要应用在超大规模和高并发的SNS类型的web2.0动态网站.

Nosql概念:
NoSql是以key-value形式存储和传统数据库不一样,不一定遵循传统数据库的一些基本要求.
比如说.遵循SQl的标准,ACID属性,表结构.特点:非关系型的,分布式,开源的,水平可扩展.

ACID代表事物处理.

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

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

Redis介绍:
Redis是一个开源的,先进的key-value存储.他通常被称为数据结构服务器,
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合).支持push/pop,add/remove以及交集和并集.周期性把数据写入磁盘或者把修改操作写入追加的记录文件.
Redis使用场景
新浪微博:1.应用程序直接访问redis服务器
2.应用程序直接访问redis,如果失败访问mysql
3.取n个数据的操作
4.排行榜应用,取TOPN操作
5.需要精确设定过期的时间应用
6.计数器的应用
7.Uniq操作,获取某时间段时间所有数据排重值
8.实时系统,反垃圾系统
9.PUB/sub构建实时消息系统
10.构建队列系统
11.缓存


redis与mysql

  redis mysql  moogodb
1库   库    
2无 表 集合
3行列字段


Redis安装部署
1.redis官网下载安装包.redis-XXX.XX.XX.tar.gz
2.解压安装
解压:tar -zxvf redis-2.4.17.tar.gz
cd redis-2.4.17
//编译:make
//安装:cd src && make install
3.移动文件:
mkdir -p /usr/local/redis/bin
mkdir -p /usr/local/redis/etc
mv /lamp/redis-2.4.17/redis.conf    /usr/local/redis/etc
cd  /lamp/redis-2.4.17/src
 mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin
4.启动服务:
/usr/local/redis/bin/redis-server  
 /usr/local/redis/etc/redis.conf
或者在bin目录下执行./redis-server
./redis-server  /usr/local/redis/etc/redis.conf(指定映射配置启动)


5后台启动配置

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进行数据库镜像的频率
rdbcompression 在进行镜像备份时,是否进行压缩
Dbfilename 镜像备份文件的文件名
Dir数据库镜像备份的文件放置路径
Slaveof设置数据库为其他数据库的从数据库
Masterauth 主数据库连接需要的密码验证
Requirepass 设置登录时需要使用的密码
Maxclients 限制同时连接的客户数量
Maxmemory设置redis能够使用的最大内存
Appendonlv 开启append only模式
Appendfsync 设置对appendonly.aof文件同步的频率
vm-enabled 是否开启虚拟内存支持
vm-swap-file 设置虚拟内存的交换文件路径
vm-max-menmory设置redis使用的最大物理内存大小
vm-page-size 设置虚拟内存的页大小
vm-pages 设置文件总的page数量
vm-max-threads 设置VMIO同时使用的线程数量
Glueoutputbuf 把小的输出缓存存放在一起
hash-max-zipmap-entries 设置hash的临界值
Activerehashing 重新hash
vi /usr/local/redis/etc/redis.conf 
daemonize yes
查看端口:
ps  -ef | grep redis
netstat -tunpl | grep 6379
redis的服务器端口号默认6379
tomcat 8080
mysql 3306
moogodb  27017  28017
5.客户端连接  
/usr/local/redis/bin/redis-cli
[root@localhost bin]# ./redis-cli ping
PONG //说明运行成功

6.停止redis实例
/usr/local/redis/bin/redis-cli  shutdown
//也可以用
pkiil redis-server



----------------------------------------------------------------------------------------------------------------------------------
第二课.02、NoSQL数据库之Redis数据库管理二(string类型和hash类型).
wmv本节主要给大家详细地讲解了Redis数据库的string数据类型,Hash数据类型及这两种数据类型的相关操作的介绍(set,get,getset,setex,setnx,append,strlen,getrange,setrange,mset,incr,incrby,hset,hget,hlen,hdel,hkeys,hvals,hgetall,hincrby,hmset,hmget等相关操作)。

Strings类型
String(字符串)
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

string类型是Redis最基本的数据类型,一个键最大能存储512MB。


Set 

设置key对应的值为String类型的value.如:我们添加一个name=lijie的键值对.

redis 127.0.0.1:6379>set name lijie
ok

Setnx
设置key对应的值为String类型的value,如果key已经存在,返回0,nx是not exist的意思
如:我们添加一个name=lijie_new 的键值对

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"
Setex 
设置key对应的值为String类型的value,并指定此键值对的有效期
如:我们添加一个haircolor=red的键值对,并指定有效期为10秒
127.0.0.1:6379> setex haircolor 11 red 
OK
127.0.0.1:6379> get haircolor
"red"
127.0.0.1:6379> get haircolor
(nil)
如果没有设置有效期则为永久有效
127.0.0.1:6379> setex haircolor red
OK
127.0.0.1:6379> get haircolor
"red"
127.0.0.1:6379> get haircolor
"red"
Setrange
设置指定key的value值得子字符串
如:我们希望将lijie的126邮箱替换为gmail邮箱

127.0.0.1:6379> set name lijie@126.com
OK
127.0.0.1:6379> get name
"lijie@126.com"
127.0.0.1:6379> setrange name 6 gmail.com
(integer) 15
127.0.0.1:6379> get name
"lijie@gmail.com"
127.0.0.1:6379>
mset
一次设置多个key的值,成功返回ok表示所有的值都设置了失败返回0表示没有任何被设置.

127.0.0.1:6379> mset key1 lijie1 key2 lijie2
OK
127.0.0.1:6379> get key1
"lijie1"
127.0.0.1:6379> get key2
"lijie2"
msetnx
一次设置 多个key的值,成功返回ok表示所有的值都设置了,失败返回0
表示没有任何值被设置,但是不会覆盖已经存在的key


get 
获取key对应的String值,如果key不存在返回nil
getset
设置key的值,并返回key的旧值
 127.0.0.1:6379> set key3 20
OK
127.0.0.1:6379> getset key3 30
"20"
.0.0.1:6379> get key3
"30"
getrange
获取key的value值得子字符串
127.0.0.1:6379> get name
"lijie@gmail.com"
127.0.0.1:6379> getrange name 0 5
"lijie@"
mget
一次获取多个key的值,如果对应key不存在则对应返回nil
127.0.0.1:6379> mget key1 key2 key3
1) "lijie1"
2) "lijie2"
3) "30"

incr对key的值做加加操作,并返回新的值

127.0.0.1:6379> get key3
"30"
127.0.0.1:6379> incr key3
(integer) 31
127.0.0.1:6379> incr key3
(integer) 32
127.0.0.1:6379> incr key3
(integer) 33
incrby
同incr类似,加指定值,key不存在时候会设置key,并认为原来的value是0
27.0.0.1:6379> incrby key3 6
(integer) 39
decr
对key的值做减减操作
decrby
同decr类似,减指定值
append
给指定key的字符串追加value,返回新字符串的长度
append name @li-jie.me



strlen

取指定key的值value值得长度


Redis 哈希(Hash)类型及操作
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。他的添加,删除操作都是0(1)(平均).
将一个对象存储在hash类型中会占用更少的内存,并且可以方便的存取整个对象


hset
设置hash field 为指定值,如果key不存在则创建
127.0.0.1:6379> hset myhash field1 Hello
(integer) 1
127.0.0.1:6379> 
hsetnx
设置hash field为指定值,如果key不存在,则创建.如果存在返回0.
127.0.0.1:6379> hsetnx myhash field1 Hello 
(integer) 1
127.0.0.1:6379> hsetnx myhash field1 Hello 
(integer) 0
hmset
同时设置hash的多个field
127.0.0.1:6379> hmset myhash field1 "hello" field2 world
OK
127.0.0.1:6379> 
[root@localhost bin]# 
hget
获取指定的hash field
127.0.0.1:6379> hget myhash field1
"hello"
127.0.0.1:6379> hget myhash field2
"world"
hmget
获取全部的hash field
127.0.0.1:6379> hmget myhash field1 field2 
1) "hello"
2) "world"
127.0.0.1:6379> 
hincrby
指定的hash field加上给定的值
127.0.0.1:6379> hincrby myhash age -8
(integer) -8
127.0.0.1:6379> 
hexists 
测试指定field是否存在
127.0.0.1:6379> hexists myhash age
(integer) 1
127.0.0.1:6379> 
hlen
返回指定hash的field数量
127.0.0.1:6379> hlen myhash
(integer) 3
127.0.0.1:6379>
hdel
删除指定hash的field
127.0.0.1:6379> hdel myhash age
(integer) 1
127.0.0.1:6379> 
hkeys
返回hash里所有字段field
127.0.0.1:6379> hkeys myhash
1) "field1"
2) "field2"
127.0.0.1:6379>
hvals
返回hash的所有value
127.0.0.1:6379> hvals myhash
1) "hello"
2) "world"
127.0.0.1:6379> 
hgetall
获取某个hash中全部的field及value
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "hello"
3) "field2"
4) "world"
127.0.0.1:6379> 

---------------------------------------------------------------------------------------------------------------------------------

第三课03、NoSQL数据库之Redis数据库管理三(list类型).wmv

本节主要给大家详细地讲解了Redis数据库的list数据类型(链表结构)的介绍及相关操作的介绍(lpush、rpush、lpop、rpop、lindex、lset、lrange、ltrim、lrem、linsert、rpoplpush等相关操作)。 

lists类型及操作
list是一个链表结构,主要功能是push.pop,获取一个范围所有值等等
操作中key理解为链表的名字.Redis的list类型其实是一个每个子元素都是string类型的双向链表
我们可以通过push,pop操作从链表的头部或者尾部添加删除元素,这样list既可以作为栈,又可以作为队列
lpush 栈 先进后出
在key对应list的头部添加字符串元素
127.0.0.1:6379> lpush mylist "world"
(integer) 1
127.0.0.1:6379> lpush  mylist "hello"
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
127.0.0.1:6379> 
rpush   队列 先进先出
在key对应list的尾部添加字符串元素
127.0.0.1:6379> rpush mylist2 "world"
(integer) 1
127.0.0.1:6379> rpush mylist2 "hello"
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
linsert
在key对应list的特定位置前或后添加字符串
127.0.0.1:6379> rpush mylist3 "world"
(integer) 1
127.0.0.1:6379> rpush mylist3 "world" "hello"
(integer) 3
127.0.0.1:6379> lrange mylist3 0 -1
1) "world"
2) "world"
3) "hello"
127.0.0.1:6379>
lset
设置list中指定下标的元素值
127.0.0.1:6379> rpush mylist4 hello
(integer) 1
127.0.0.1:6379> lset mylist4 0 world
OK
127.0.0.1:6379> lrange mylist4 0 -1 
1) "world"
127.0.0.1:6379> 
类似于是php数组一样
$arr = array(1,2,3)
$arr[0] = 4;
array(4,2,3)
lrem
从key对应list中删除n个和value相同的元素
(n<0从尾删除,n=0全部删除)
127.0.0.1:6379> rpush mylist5 hello
(integer) 1
127.0.0.1:6379> rpush mylist5 hello
(integer) 2
127.0.0.1:6379> lrem mylist5 1 hello
ltrim
保留指定key的值范围内的数据
127.0.0.1:6379> rpush mylist8 one
(integer) 1
127.0.0.1:6379> rpush mylist8 two
(integer) 2
127.0.0.1:6379> ltrim mylist8 1 -1
OK
127.0.0.1:6379> lrange mylist8 0 -1
1) "two"
127.0.0.1:6379> 
类似
list8
1.one
2.two
3.three
4.four

ltrim  list8 1 2  (1 2保留)

lpop
从list的头部删除元素,并返回删除元素
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
127.0.0.1:6379> lpop mylist
"hello"
127.0.0.1:6379> lrange mylist 0 -1
1) "world"
127.0.0.1:6379> 
类似php
array_pop
将数组的最后一个单元弹出
rpop
从list的尾部删除元素,并返回删除元素
127.0.0.1:6379> lrange mylist2 0 -1
1) "world"
2) "hello"
127.0.0.1:6379> rpop mylist2
"hello"
127.0.0.1:6379> lrange mylist2 0 -1
1) "world"
127.0.0.1:6379> 
rpoplpush
从第一个list的尾部移除元素并添加到第二个list头部
127.0.0.1:6379> lrange mylist5 0 -1
1) "world"
2) "hello"
127.0.0.1:6379> lrange mylist6 0 -1
1) "two"
2) "one"
127.0.0.1:6379> rpoplpush mylist5 mylist6
"hello"
127.0.0.1:6379> lrange mylist5 0 -1
1) "world"
127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "two"
3) "one"
127.0.0.1:6379> 
lindex
返回名称为key的list中index位置的元素
127.0.0.1:6379> lrange mylist5 0 -1
1) "hello"
2) "world"
127.0.0.1:6379> lindex mylist5 0
"hello"
127.0.0.1:6379> lindex mylist5 1
"world"
127.0.0.1:6379> 
类似 PHP里面
$q = array(1,2,3)
echo $q[0];
echo $q[2];
echo $q[3];
llen
返回key对应list的长度
127.0.0.1:6379> llen mylist5
(integer) 2
127.0.0.1:6379> 
类似php
count($a)

----------------------------------------------------------------------------------------------------------------------------------

第四课.04、NoSQL数据库之Redis数据库管理四(set类型和zset类型).wmv

本节主要给大家详细地讲解了Redis数据库的无序集合及有序集合的介绍及相关操作的介绍(sadd、srem、smove、sismember、scard、spop、srandmember、sinter、sinterstore、sdiff、sdiffstore、sunion、sunionstore、smembers、zadd、zrange、zrem等相关操作)。

sets类型与操作
Set是集合,它是string类型的无序集合,set是通过hash table实现的,添加,删除和查找的复杂度都是0(1).对集合我们可以取并集,交集和差集.通过这些操作我们可以实现sns中的好友推荐和blog的tag功能 
sadd
向名称为key的set中添加元素
127.0.0.1:6379> sadd myset one
(integer) 1
127.0.0.1:6379> sadd myset two
(integer) 1
127.0.0.1:6379> sadd myset three
(integer) 1
smembers
查看集合元素
127.0.0.1:6379>smembers myset 
1) "one"
2) "two"
srem
删除名称为key的set中的元素
127.0.0.1:6379> smembers myset 
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> srem myset one
(integer) 1
127.0.0.1:6379> smembers myset 
1) "three"
2) "two"
spop
随机返回并删除名称为key的set中一个元素
127.0.0.1:6379> smembers myset 
1) "four"
2) "five"
127.0.0.1:6379> spop myset
"four"
127.0.0.1:6379> smembers myset 
1) "five"
sdiff  x1  x2
返回所有给定key与第一个key的差集,差集是以x1为标准,谁在前面一谁为标注
127.0.0.1:6379> smembers myset1
1) "one"
2) "ten"
127.0.0.1:6379> smembers myset 
1) "six"
2) "ten"
3) "five"
127.0.0.1:6379> sdiff myset myset1
1) "six"
2) "five"
类似php
array_diff返回数组的差集
sdiffstore
返回所有给定key与第一个key的差集,并将结果存在另一个key
127.0.0.1:6379> smembers myset 
1) "six"
2) "ten"
3) "five"
127.0.0.1:6379> smembers myset1
1) "one"
2) "ten"
127.0.0.1:6379> sdiffstore myset2 myset1 myset
(integer) 1
127.0.0.1:6379> 
sinter
返回所有给定key的交集
127.0.0.1:6379> smembers myset1
1) "one"
2) "ten"
127.0.0.1:6379> smembers myset 
1) "six"
2) "ten"
3) "five"
127.0.0.1:6379> sinter myset1 myset
1) "ten"
sinterstore
返回所有给定key的交集,并将结果存为另一个key
127.0.0.1:6379> smembers myset 
1) "six"
2) "ten"
3) "five"
127.0.0.1:6379> smembers myset1
1) "one"
2) "ten"
127.0.0.1:6379> sinterstore myset3 myset1 myset
(integer) 3
127.0.0.1:6379> smembers myset3
1) "six"
2) "ten"
3) "five"
sunion
返回所有给定key的并集
127.0.0.1:6379> smembers myset1
1) "six"
2) "five"
3) "ten"
127.0.0.1:6379> smembers myset 
1) "six"
2) "ten"
3) "five"
127.0.0.1:6379> sunion myset1 myset
1) "six"
2) "ten"
3) "five"
sunionstore
返回所有给定key的并集
127.0.0.1:6379> smembers myset1
1) "six"
2) "five"
3) "ten"
127.0.0.1:6379> smembers myset 
1) "six"
2) "ten"
3) "five"
127.0.0.1:6379> sunion myset6 myset1 myset
1) "six"
2) "ten"
3) "five"
smove
从第一个key对应的set中移除member并添加到第二个对应的setzhong
127.0.0.1:6379> smembers myset
1) "six"
2) "ten"
3) "five"
127.0.0.1:6379> smembers myset1
1) "six"
2) "five"
3) "ten"
127.0.0.1:6379> smove myset1 myset7 six
(integer) 1
scard
返回名称为key的set的元素个数
127.0.0.1:6379> scard myset1
(integer) 2
sismember
测试member是否名称为key的set的元素
127.0.0.1:6379> smembers myset1
1) "five"
2) "ten"
127.0.0.1:6379> sismember myset1 ten
(integer) 1
127.0.0.1:6379> sismember myset1 one
(integer) 0
类似于php里的
in_array
srandmember
随机返回称为key的set的一个元素,但不删除元素
127.0.0.1:6379> smembers myset1
1) "five"
2) "ten"
127.0.0.1:6379> srandmember myset1
"ten"
127.0.0.1:6379> srandmember myset1
"five"
sorted sets类型及操作
sorted set是set的一个升级版本,它在set的基础上
增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,
每次指定后,zset会自动重新按新的值调整顺序.可以理解为有两列的mysql表,
一列存value,一列存顺序.操作中key理解为zset的名字.


zadd
向名称称为key的zset中添加元素member,score用于排序.如果该元素存在,则更新其顺序
127.0.0.1:6379> zadd myzset 1 one
(integer) 1
127.0.0.1:6379> zadd myzset 2 two
(integer) 1
127.0.0.1:6379> zadd myzset 3 two
(integer) 0
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "3"
127.0.0.1:6379> 
zrem
删除名称为key的zset中的元素member
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "3"
127.0.0.1:6379> zrem myzset two
(integer) 1
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "one"
2) "1"
zincrby
如果在名称为key的zset中已经存在元素member,则该元素的随从任务增加increment否则
向该集合中添加该元素,其score的值为increment
127.0.0.1:6379> zadd myzset2 1 one
(integer) 1
127.0.0.1:6379> zadd myzset2 2 two
(integer) 1
127.0.0.1:6379> zincrby myzset2 2 one
"3"
127.0.0.1:6379> zrange myzset2 0 -1 withscores
1) "two"
2) "2"
3) "one"
4) "3"
Zrank
返回名称为key的zset中member元素的排名(按score从小到大排序)即下标
127.0.0.1:6379> zrange myzset2 0 -1 withscores
1) "two"
2) "2"
3) "one"
4) "3"
127.0.0.1:6379> zrank myzset2 two
(integer) 0
zrevrank
返回名称为key的zset中member元素的排名(按score从大到小排序)即下标
127.0.0.1:6379> zrange myzset2 0 -1 withscores
1) "two"
2) "2"
3) "one"
4) "3"
127.0.0.1:6379> zrevrank myzset2 one
(integer) 0
127.0.0.1:6379> 
zrevrange
返回名称为key的zset(按score从大到小顺序)中的index从start到end的所有元素
127.0.0.1:6379> zrevrange myzset2 0 -1 withscores
1) "one"
2) "3"
3) "two"
4) "2"
zrangebyscore
返回集合中输出score在给定区间的元素
127.0.0.1:6379> zrevrange myzset2 0 -1 withscores
1) "one"
2) "3"
3) "two"
4) "2"
127.0.0.1:6379> zrangebyscore myzset2 2 3 withscores
1) "two"
2) "2"
3) "one"
4) "3"
127.0.0.1:6379> 
zcount
返回集合中score在给定区间的数量
127.0.0.1:6379> zrange myzset2 0 -1 withscores
1) "two"
2) "2"
3) "one"
127.0.0.1:6379> zcount myzset2 2 3
(integer) 2
zcard
返回集合中元素个数
127.0.0.1:6379> zrange myzset2 0 -1 withscores
1) "two"
2) "2"
3) "one"
4) "3"
127.0.0.1:6379> zcard myzset2
(integer) 2
zremrangebyrank
删除集合中排名在给定区间的元素
127.0.0.1:6379> zrange myzset2 0 -1 withscores
1) "two"
2) "2"
3) "one"
4) "3"
127.0.0.1:6379> zremrangebyrank myzset2 1 1
(integer) 1
127.0.0.1:6379> zrange myzset2 0 -1 withscores
1) "two"
2) "2"
zremrangebyscore
删除集合中score在给定区间的元素
127.0.0.1:6379> zrange myzset2 0 -1 withscores
1) "two"
2) "2"
127.0.0.1:6379> zremrangebyscore myzset2 1  2
(integer) 1
127.0.0.1:6379> zrange myzset2 0 -1 withscores
(empty list or set)

---------------------------------------------------------------------------------------------------------------------------------

第五课.05、NoSQL数据库之Redis数据库管理五(Redis的常用命令及高级应用).wmv

本节主要给大家讲解了Redis数据库的常用命令及高级应用,其中常用命令包括键值相关命令和服务器相关命令,而高级应用当中给大家详细介绍了Redis数据库的安全性的设置、主从复制。
Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在linux
使用
1.键值相关命令
2.服务器相关命令



1.键值相关命令
Keys 
返回满足给定pattern的所有key
127.0.0.1:6379> keys *
 1) "mylist"
 2) "mylist2"
 3) "mylist8"
 4) "key1"
 5) "mylist6"
 6) "myset2"
 7) "key2"
用表达式*,代表取出所有的key

exists
确认一个key是否存在
127.0.0.1:6379> exists name
(integer) 0
127.0.0.1:6379> exists age
(integer) 1
从结果来看,name键不存在,age键存在


del
删除一个key
127.0.0.1:6379> del age
(integer) 1
127.0.0.1:6379> exists age
(integer) 0
expire
设置一个key过期时间
127.0.0.1:6379> expire addr 10
(integer) 0
127.0.0.1:6379> ttl addr
(integer) 1
127.0.0.1:6379> ttl addr
(integer) 8
127.0.0.1:6379> ttl addr
(integer) 1
127.0.0.1:6379> ttl addr
(integer) -1
127.0.0.1:6379> 

在本例中,我们设置addr这个key的过期时间为10秒,然后我们不断的用ttl 来获取这个key的有效时长,直至-1
说明此值已过期


select
选择数据库.redis数据库编号从0-15,我们可以选择任意一个数据库来进行数据的存取
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> set age 30
OK
127.0.0.1:6379> get age
"30"
127.0.0.1:6379[1]> select 16
(error) ERR invalid DB index

当选择16时,报错,说明没有编号为16的这个数据库

persist
移除给定key的过期时间
127.0.0.1:6379> expire age 3000
(integer) 1
127.0.0.1:6379> ttl age
(integer) 2993
127.0.0.1:6379> persist age
(integer) 1
127.0.0.1:6379> ttl age
(integer) -1
127.0.0.1:6379>
randomkey
随机返回key空间的一个key
127.0.0.1:6379> randomkey
"key3"
127.0.0.1:6379> randomkey
"mylist4"
127.0.0.1:6379> 
rename
重命名key
127.0.0.1:6379> keys *
 1)"age"
127.0.0.1:6379> rename age age_new
OK
127.0.0.1:6379> keys *
 1)"age_new"

type返回值的类型

127.0.0.1:6379> type myset
set
127.0.0.1:6379> 
ping
测试连接是否存活
127.0.0.1:6379> ping
PONG
//执行下面命令前,我们停止redis服务器
127.0.0.1:6379> ping
Could not connect to redis at 127.0.0.1:6379
connection refused
//执行下面命令之前,我们启动redis服务器
not connected> ping
PONG
第一个ping时,说明此连接正常
第二个ping之前,我们将redis服务器停止,那么ping是失败的
第三个ping之前,我们将redis服务器启动,那么ping是成功

quit
退出连接
127.0.0.1:6379[16]> quit
[root@localhost bin]# 
dbsize
返回当前数据库中key的数目
127.0.0.1:6379> dbsize
(integer) 18
127.0.0.1:6379>
结果说明此库有18个key


服务器相关命令
info
获取服务器的信息和统计
127.0.0.1:6379> info
# Server
redis_version:2.8.10
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:f62a79dfc6713b4b
redis_mode:standalone
os:Linux 2.6.18-238.el5 i686
arch_bits:32
multiplexing_api:epoll
gcc_version:4.1.2
process_id:8579
run_id:3179045fdf3ae8ee1186080ffd54b5967b08f2be
tcp_port:6379
uptime_in_seconds:470
uptime_in_days:0
config get
实时传储收到的请求
127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/redis/bin"
127.0.0.1:6379> 
本例中我们获取了dir这个参数配置的值,如果想获取全部参数据的配置值也很简单,只需要执行
"config get *"即可将全部的值都显示出来

flushdb
删除当前选择数据库中的所有key
127.0.0.1:6379> dbsize
(integer) 18
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> dbsize
(integer) 0
127.0.0.1:6379> 
在本例中我们将0号数据库中的key都清除了


flushall
删除所有数据库中的所有key
127.0.0.1:6379> dbsize
(integer) 1
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> dbsize
在本例中我们先查看了一个1号数据库中有一个key,然后我切换到0号库执行flushall命令,结果1号库中的key也被清除了,说是此命令工作正常

Redis高级实用特性
1.安全性
2.主从复制
3.事务处理
4.持久化机制
5.发布订阅消息
6.虚拟内存的使用


1.安全性
设置客户端连接后进行任何其他指定前需要使用的密码.
警告:因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150k次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解.


在配置文件redis.conf里面
#requirepass foobared
requirepass beijing
设置密码以后登录的方法授权
1)auth beijing
127.0.0.1:6379> auth beijing
OK
或2)输出用户名和密码
redis-cli  -a  beijing
如果是用vi打开文件后,在命令行下输入“/关键字"搜

2.主从复制
redis主从复制配置和使用都非常简单.通过主从复制可以允许多个slave
 server 拥有和master server 相同的数据库副本.
redis主从复制的特点:
1.Master可以拥有多个slave
2.多个slave可以连接同一个master外,还可以连接到其他slave
3.主从复制不会阻塞master,在同步数据时,master可以继续处理client请求
4.提高系统的伸缩性

配置主从服务器:

配置slave服务器很简单,只需要在slave的配置文件中加入以下配置:

在配置文件redis.conf里面

slaveof 192.168.1.1 6379 #指定master 的 ip和端口
masterauth lamp # 这是主机的密码
设置成功后,我们在主数据库上设置一对键值对
127.0.0.1:6379> set name master
ok
127.0.0.1:6379> 
//在从数据库上取这个键
127.0.0.1:6379> get name
"master"
127.0.0.1:6379> auth beijing
如何查看那台是主服务器,那台是从服务器呢?
查看主从使用info命令
role:slave是从服务器,role:master是主服务器
----------------------------------------------------------------------------------------------------------------------------------
06、NoSQL数据库之Redis数据库管理六(Redis的高级应用之事务处理、持久化操作、pub_sub、虚拟内存).wmv
本节主要给大家详细地讲解了Redis数据库当中的高级应用,其中包括Redis的事务处理、持久化操作、pub/sub消息发布与订阅、虚拟内存的配置。

一.Redis的事务处理
redis对事务的支持目前还比较简单.Redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令.当一个client在一个连接中发出multi命令时这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令
exec执行事物
discard取消事物
watch监视事物
Redis没有事物回滚


exec执行事物
127.0.0.1:6379> get age
"12"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set age 19
QUEUED
127.0.0.1:6379> set age 20
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> 
discard取消事物就是事务回滚
127.0.0.1:6379> get age
"12"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set age 19
QUEUED
127.0.0.1:6379> set age 20
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> 

redis的缺陷,事务执行错误没有回滚
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr age 
QUEUED
127.0.0.1:6379> incr name
QUEUED
127.0.0.1:6379>exec
1)(interger)101
2)(error)ERR value is not an integer or out of range
乐观锁复杂事务控制
乐观锁:(与版本控制器很相似)
大多数是基于数据版本(version)的记录机制实现的.即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表添加一个"version"字段来实现读取出数据时,将此版本号一同读出,之后更新时,对此版本号加1.此时,将提交数据的版本号与数据库表对应记录的当前版本号进行比对,如果提交的数据库版本号大于数据库当前版本号,则予以更新,否则认为是过期数据.
Redis乐观锁实例:假设有一个age的key,我们开2个session来对age进行赋值操作,我们来看一下结果如何
(1)第一步 session1
127.0.0.1:6379> get  age 20
"10"
127.0.0.1:6379>watch age
OK
127.0.0.1:6379> multi
OK
(2)第二步 session2
127.0.0.1:6379> get  age 30
"10"
127.0.0.1:6379>get age
"30"
(3)第三步 session1
127.0.0.1:6379> set  age 20
QUEUED
127.0.0.1:6379>exec
(nil)
127.0.0.1:6379> get age
"30"
watch监视事物
watch命令会监视给定的key,当exec时候如果监视的key从调用watch后发生过变化,则整个事务会失败.
也可以调用watch多次监视多个key.这样就可以对指定的key加乐观锁了.
注意watch的key是对整个连接有效,事务也一样.如果连接断开,监视和事务都会被自动清除.
当然了exec,discard,unwatch命令都会清除连接中的所有监视.

事务回滚

redis的事务实现是如此简单,当然会存在一些问题.第一个问题是redis只能保证事务的每个命令连续执行,但是如果事务中的一个命令失败了,并不回滚其他命令,比如使用的命令类型不匹配

127.0.0.1:6379>get age 
20
127.0.0.1:6379>get name 
lijie
127.0.0.1:6379>multi
OK
127.0.0.1:6379> incr age 
QUEUED
127.0.0.1:6379> incr name
QUEUED
127.0.0.1:6379>exec
1)(interger)101
2)(error)ERR value is not an integer or out of range
127.0.0.1:6379>get age 
21
127.0.0.1:6379>get name 
lijie
从上面的例子看到,age是数字有自增运算,name是字符串无法进行自增运算,所以会报错.如果按传统关系数据库的思路来讲,整个事务都会回滚,但是我们看到redis却是将可以执行的命令提交了所以这个现象对于习惯关系型数据库操作的朋友来说很别扭,这里需要redis需要改进的地方

4.持久化机制
redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化.
Redis支持两种持久化方式:
 1.snapshotting(快照)也是默认方式
 2.Append-only file(缩写aof)的方式


snapshotting方式
快照是默认的持久化方式.这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb.可以通过配置设置自动做快照持久化的方式.我们可以配置redis在n秒内如果超过m个key呗修改就自动做快照
save 900 1#900秒内如果超过1个key被修改,则发起快照保存
save 300 10#300秒内容如超过10个key被修改,则发起快照保存
save 60 10000
aof方式
由于快照方式是在一定间隔时间做一次的,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改.
aof比快照方式有更好的持久化性,是由于在使用aof时,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容.
当然由于os会在内核中缓存中write做的修改,所以可能不是立即写到磁盘上.这样aof方式的持久化也还是有可能会丢失部分修改.
可以通过配置文件告诉redis我们想要通过fsync函数强制os写入到磁盘的时机
appenddonly yes //启用aof持久化方式
#appendfsync always //收到写命令就立即写入磁盘,最慢,但是保证完全的持久化
appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
#appendfsync no // 完全依赖os,性能最好,持久化没保证
5.发布订阅消息
发布订阅(pub/sub)是一种消息通信模式,主要的目的是解除消息发布者和消息订阅者之间的耦合,redis作为一个pub/sub的server,在订阅者和发布者之间起到消息路由的功能.
订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将信息类型称为通道(channel).当发布者通过publish命令向redis server发送特定类型信息时,订阅该信息类型的全部client都会收到此消息.
第一个客户端:
运行命令
#subscribe tv1
第二个客户端:
运行命令
#subscribe tv1  tv2
第三个客户端:
运行命令
#publish tv1 lijie
#publish tv2 lijie
6.虚拟内存的使用
redis的虚拟内存与操作系统的虚拟内存不是一回事,但是思路和目的都是相同的.就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据.尤其是对redis这样的内存数据库,内存总是不够用的.除了可以将数据分割到多个redis server外.另外能够提高数据库容量的办法就是使用虚拟内存把那些不经常访问的数据交换到磁盘上.
虚拟内存配置:
下面是vm相关配置
vm-enabled yes                 #开启vm功能
vm-swap-file  /tmp/redis.swap  #交换出来的value保存的文件路径
vm-max-memory 1000000          #redis使用的最大内存上限
vm-page-size 32                #每个页面的大小32字节
vm-pages 134217728             #最多使用多少页面
vm-max-threads  4              #用于执行value对象换入的工作线程数量
添加really-use-vm yes

----------------------------------------------------------------------------------------------------------------------------------

更多最新视频教程下载,免费在线课程学习,零费用申请参加兄弟连面授课程,猛击:

           http://www.lampbrother.net/
兄弟连微电影:那些年,我们一起学的PHP
           http://v.youku.com/v_show/id_XNDc4NTc2MTU2.html
兄弟连学员故事:
           http://kan.weibo.com/kan/3527252139263520
视频录制:李捷
个人微博:weibo.com/lamplijie
个人主页:www.li-jie.me
相关资料:《捷哥浅谈PHP》Redis系列文章(进入lamp兄弟连官方论坛,搜索捷哥浅谈PHP即可)
交流论坛:http://bbs.lampbrother.net






































































 














 


































































        












































about云(http://www.aboutyun.com)分享说明:
about云-为热爱云开发技术人员提供最全面的信息传播和服务平台
欢迎加入about云官方群39327136





  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值