NoSQL(not only sql):是以key-value形式存储,具有:非关系型、分布式、开源、水平可扩展等特点
NoSQL适用场景:
1.对数据高并发读写(尤其是上万次的写操作)
2.对海量数据的高效率存储和访问(表数据千万级以上)
3.对数据的高可扩展性和高可用性(数据库系统升级需要停机维护和数据迁移,Nosql可以做分步式来解决。扩展扩展迭代的时候不用修改表结构数据等)
Redis是一个开源的,key-value存储的NoSQL数据库,通常被称为数据结构服务器,支持各种不同方式的排序,为了保证效率数据都是缓存在内存中,还可以周期性把更新的数据写入磁盘。为了加快查询效率、减少和数据库连接次数,我们都会在代码中加入缓存功能,还能解决分布式系统集群时数据库共享问题。
Redis适用场合:
1.取最新N个数据的操作
2.排行榜应用,取TOP N操作
3.需要精确设定过期时间的应用(可以对键设置有效期)
4.计数器应用
5.Uniq操作,获取某段时间所有数据排重值
6.实时系统,反垃圾系统
7.Pub/Sub构建实时消息系统
8.构建队列系统
9.缓存
Redis的安装和部署:
一、下载安装包
https://redis.io/download
二、编译安装
tar zxvf redis-3.0.4.tar.gz
cd redis-3.0.4
make
cd src
make install
三、移动文件,便于管理
在redis-3.0.4同级mkdir bin,mkdir etc,mkdir logs三个目录
mv /redis-3.0.4/redis.conf /etc
cd /redis-3.0.4/src
mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /bin
四、启动服务
修改redis.conf中的daemonize属性为yes可以默认后台启动(默认为no)
./redis-server /shb/redis/etc/redis.conf 来启动
ps -ef|grep redis 查看redis进程是否启动成功
netstat -tunpl|grep 6379 查看6379端口是否被redis使用( Redis默认端口:6379)
Redis配置文件
daemonize 需要在后台运行,把该项改为yes
pidfile 配置多个pid的地址默认在 /var/run/redis.pid
bind 绑定ip,设置后只接受来自该ip的请求
port 监听端口,默认为6379
timeout 设置客户端连接超时时间,单位秒
loglevel 日志级别,debug、verbose、notice、warning
logfile 配置log文件地址
databases 设置数据库的个数,默认使用的数据库为0
save 设置redis进行数据库镜像的频率-备份数据
Slaveof 设置数据库为其他数据库的从数据库
Masterauth 主数据库连接需要的密码验证
Requirepass 设置登录时需要使用的密码
Maxclients 限制同时连接的客户数量
Maxmemory 设置redis能使用的最大内存
五、关闭服务
pkill redis-server
bin下面执行./redis-cli 进入客户端
./redis-cli shutdown 关闭客户端
Redis的数据类型
一、String类型及常用操作 string类型是二进制安全的,可以包含任何数据,比如jpg图片或者可序列化的对象
set 设置key对应的值为value set name bobo
get 根据key名称取值 get name
setnx 设置key对应的值为value,如果key已经存在返回0,不修改原有value值,不存在可以设置成功
setex 设置key对应的值为value,并制定此键值对应的有效期 set name 10 bobo -设置有效期为10秒
setrange 设置指定key的value值的子字符串 setrange name 2 duoduo -设置从第二个字符开始替换为duoduo
mset 一次设置多个key的值,成功返回ok,失败返回0 set name bobo age 18
mget 一次获取多个值
getset 设置新值,获取旧值
append 给指定key的字符串追加value
strlen 取指定key的value值的长度
二、hashes类型及常用操作 hash是一个string类型的filed和value的映射表,hash适合存储对象
hset 设置hash field为指定值,key不存在先创建 hset user:001 name bobo -user:001可以看成一张表
hget 取hash field 对应的值 hget user:001 name 返回是bobo
hkeys 返回hash的所有字段 hkeys user:001
hvals 返回hash的所有value hvals user:001
hgetall 获取某个hash中全部的field及value
三、lists类型及常用操作 list是一个链表结构
lpush 在key对应的list的头部添加字符串元素 lpush mylist "hello"
lrange 从头部取list的值 lrange mylist 0 -1
rpush 在key对应的list的尾部添加字符串元素
linsert 在key对应的list的特定位置前或后添加字符串元素 linsert mylist before "world" "hello"
lset 设置list中指定下标的的元素值
四、set类型及其操作 set是一个集合,string类型的无序集合
sadd 向名称为key的set中添加元素 sadd myset "hello"
srem 删除名称为key的set中的元素 srem myset "hello"
smembers 查看set中的元素 smembers myset
Redis客户端的常用命令
keys 返回满足给定pattern的所有key keys *
exists 确认一个key是否存在 exists name -返回1表示存在,0表示不存在
del 删除 del name -返回1表示删除成功,0表示删除失败(不存在)
expire 设置一个key的过期时间 expire name 10 -通过ttl name可以查看还有多久过期
persist 取消过期时间 persist name
select 选择数据库 select 0 -选择第一个数据库,Redis最多可以select 15(总共16个数据库)
move 移动数据库 move name 1 -把之前0数据库的中的name移动到1数据库
rename 重命名key rename myset hisset
type 返回键的类型 type name -返回的是string
服务器相关命令
ping 测试连接是否存活
quit 退出客户端连接
dbsize 返回当前数据库中key的数目
info 获取服务器信息 -redis版本,虚拟内存等
flushdb 删除当前选择数据库中的所有key
flushall 删除所有数据库中的所有key
Redis高级实用特性
一、安全性
1.设置客户端连接后进行任何其他指定前需要使用的密码
vi /etc/redis.conf
在redis配置文件中增加requirepass bobo,重启redis才能生效
再连接客户端执行命令时提示需要授权 auth bobo,授权后可以执行命令
也可以连接客户端的时候就授权 ./redis-cli -a bobo
二、主从复制
Redis通过主从复制可以允许多个从服务器(slave server)拥有和主服务器(master server)相同的数据库副本
Redis主从复制特点
1.Master可以用用多个slave
2.多个slave可以连接同一个master以外,还可以连接到其他slave
3.主从复制不会阻塞master,在同步数据时,master可以继续处理client请求
4.提高系统的伸缩性
配置主从服务器:在从服务器上的配置文件中加入
slaveof 192.168.1.1 6379 -指定主机的ip和端口
masterauth bobo -如果主机由密码需要打开主机密码
三、事务处理
Redis对事务的支持还比较简单目前,只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他的client命令。
multi -打开一个事务上下文
exec -执行命令
discard -取消前面所有命令,即事务回滚
四、持久化机制
Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化。Redis支持两种持久化方式:
1.snapshotting(快照)也是默认方式:将内存中数据以快照形式写入二进制文件中,默认文件名为dump.rdb。可以通过配置设置 自动做快照持久化的方式,配置redis在n秒内如果超过m个key被修改就自动快照
修改redis.conf,增加:
save 900 1
save 300 10
save 60 10000
2.Append-only-file(aof)方式:由于快照方式是在一定间隔时间做一次的,如果redis意外down掉就会丢失最后一次快照后的所 有修改。aof比快照方式有更好的持久性,redis会将每一个收到的写命令都通过write函数追加到文件中,redis重启时会通过重新 执行文件中保存的写命令来在内存中重建整个数据库的内容。
修改redis.conf:
appendonly yes -启用aof持久化方式(默认是no,改成yes)
appendfsync everysec
在bin下面会生成一个appendonly.aof文件(操作)
五、发布订阅消息
发布订阅(pub/sub)是一种消息通信模式,主要目的是解除消息发布者和消息订阅者之间的耦合。订阅者可以通过subscribe 和psubscribe命令向redis server订阅自己感兴趣的消息类型。发布者通过publish命令向redis server发送特定类型的消息时,订 阅该信息类型的全部client都会收到此消息。
六、虚拟内存使用
Redis的虚拟内存就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据。
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 -是否使用vm
NoSQL适用场景:
1.对数据高并发读写(尤其是上万次的写操作)
2.对海量数据的高效率存储和访问(表数据千万级以上)
3.对数据的高可扩展性和高可用性(数据库系统升级需要停机维护和数据迁移,Nosql可以做分步式来解决。扩展扩展迭代的时候不用修改表结构数据等)
Redis是一个开源的,key-value存储的NoSQL数据库,通常被称为数据结构服务器,支持各种不同方式的排序,为了保证效率数据都是缓存在内存中,还可以周期性把更新的数据写入磁盘。为了加快查询效率、减少和数据库连接次数,我们都会在代码中加入缓存功能,还能解决分布式系统集群时数据库共享问题。
Redis适用场合:
1.取最新N个数据的操作
2.排行榜应用,取TOP N操作
3.需要精确设定过期时间的应用(可以对键设置有效期)
4.计数器应用
5.Uniq操作,获取某段时间所有数据排重值
6.实时系统,反垃圾系统
7.Pub/Sub构建实时消息系统
8.构建队列系统
9.缓存
Redis的安装和部署:
一、下载安装包
https://redis.io/download
二、编译安装
tar zxvf redis-3.0.4.tar.gz
cd redis-3.0.4
make
cd src
make install
三、移动文件,便于管理
在redis-3.0.4同级mkdir bin,mkdir etc,mkdir logs三个目录
mv /redis-3.0.4/redis.conf /etc
cd /redis-3.0.4/src
mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /bin
四、启动服务
修改redis.conf中的daemonize属性为yes可以默认后台启动(默认为no)
./redis-server /shb/redis/etc/redis.conf 来启动
ps -ef|grep redis 查看redis进程是否启动成功
netstat -tunpl|grep 6379 查看6379端口是否被redis使用( Redis默认端口:6379)
Redis配置文件
daemonize 需要在后台运行,把该项改为yes
pidfile 配置多个pid的地址默认在 /var/run/redis.pid
bind 绑定ip,设置后只接受来自该ip的请求
port 监听端口,默认为6379
timeout 设置客户端连接超时时间,单位秒
loglevel 日志级别,debug、verbose、notice、warning
logfile 配置log文件地址
databases 设置数据库的个数,默认使用的数据库为0
save 设置redis进行数据库镜像的频率-备份数据
Slaveof 设置数据库为其他数据库的从数据库
Masterauth 主数据库连接需要的密码验证
Requirepass 设置登录时需要使用的密码
Maxclients 限制同时连接的客户数量
Maxmemory 设置redis能使用的最大内存
五、关闭服务
pkill redis-server
bin下面执行./redis-cli 进入客户端
./redis-cli shutdown 关闭客户端
Redis的数据类型
一、String类型及常用操作 string类型是二进制安全的,可以包含任何数据,比如jpg图片或者可序列化的对象
set 设置key对应的值为value set name bobo
get 根据key名称取值 get name
setnx 设置key对应的值为value,如果key已经存在返回0,不修改原有value值,不存在可以设置成功
setex 设置key对应的值为value,并制定此键值对应的有效期 set name 10 bobo -设置有效期为10秒
setrange 设置指定key的value值的子字符串 setrange name 2 duoduo -设置从第二个字符开始替换为duoduo
mset 一次设置多个key的值,成功返回ok,失败返回0 set name bobo age 18
mget 一次获取多个值
getset 设置新值,获取旧值
append 给指定key的字符串追加value
strlen 取指定key的value值的长度
二、hashes类型及常用操作 hash是一个string类型的filed和value的映射表,hash适合存储对象
hset 设置hash field为指定值,key不存在先创建 hset user:001 name bobo -user:001可以看成一张表
hget 取hash field 对应的值 hget user:001 name 返回是bobo
hkeys 返回hash的所有字段 hkeys user:001
hvals 返回hash的所有value hvals user:001
hgetall 获取某个hash中全部的field及value
三、lists类型及常用操作 list是一个链表结构
lpush 在key对应的list的头部添加字符串元素 lpush mylist "hello"
lrange 从头部取list的值 lrange mylist 0 -1
rpush 在key对应的list的尾部添加字符串元素
linsert 在key对应的list的特定位置前或后添加字符串元素 linsert mylist before "world" "hello"
lset 设置list中指定下标的的元素值
四、set类型及其操作 set是一个集合,string类型的无序集合
sadd 向名称为key的set中添加元素 sadd myset "hello"
srem 删除名称为key的set中的元素 srem myset "hello"
smembers 查看set中的元素 smembers myset
Redis客户端的常用命令
keys 返回满足给定pattern的所有key keys *
exists 确认一个key是否存在 exists name -返回1表示存在,0表示不存在
del 删除 del name -返回1表示删除成功,0表示删除失败(不存在)
expire 设置一个key的过期时间 expire name 10 -通过ttl name可以查看还有多久过期
persist 取消过期时间 persist name
select 选择数据库 select 0 -选择第一个数据库,Redis最多可以select 15(总共16个数据库)
move 移动数据库 move name 1 -把之前0数据库的中的name移动到1数据库
rename 重命名key rename myset hisset
type 返回键的类型 type name -返回的是string
服务器相关命令
ping 测试连接是否存活
quit 退出客户端连接
dbsize 返回当前数据库中key的数目
info 获取服务器信息 -redis版本,虚拟内存等
flushdb 删除当前选择数据库中的所有key
flushall 删除所有数据库中的所有key
Redis高级实用特性
一、安全性
1.设置客户端连接后进行任何其他指定前需要使用的密码
vi /etc/redis.conf
在redis配置文件中增加requirepass bobo,重启redis才能生效
再连接客户端执行命令时提示需要授权 auth bobo,授权后可以执行命令
也可以连接客户端的时候就授权 ./redis-cli -a bobo
二、主从复制
Redis通过主从复制可以允许多个从服务器(slave server)拥有和主服务器(master server)相同的数据库副本
Redis主从复制特点
1.Master可以用用多个slave
2.多个slave可以连接同一个master以外,还可以连接到其他slave
3.主从复制不会阻塞master,在同步数据时,master可以继续处理client请求
4.提高系统的伸缩性
配置主从服务器:在从服务器上的配置文件中加入
slaveof 192.168.1.1 6379 -指定主机的ip和端口
masterauth bobo -如果主机由密码需要打开主机密码
三、事务处理
Redis对事务的支持还比较简单目前,只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他的client命令。
multi -打开一个事务上下文
exec -执行命令
discard -取消前面所有命令,即事务回滚
四、持久化机制
Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化。Redis支持两种持久化方式:
1.snapshotting(快照)也是默认方式:将内存中数据以快照形式写入二进制文件中,默认文件名为dump.rdb。可以通过配置设置 自动做快照持久化的方式,配置redis在n秒内如果超过m个key被修改就自动快照
修改redis.conf,增加:
save 900 1
save 300 10
save 60 10000
2.Append-only-file(aof)方式:由于快照方式是在一定间隔时间做一次的,如果redis意外down掉就会丢失最后一次快照后的所 有修改。aof比快照方式有更好的持久性,redis会将每一个收到的写命令都通过write函数追加到文件中,redis重启时会通过重新 执行文件中保存的写命令来在内存中重建整个数据库的内容。
修改redis.conf:
appendonly yes -启用aof持久化方式(默认是no,改成yes)
appendfsync everysec
在bin下面会生成一个appendonly.aof文件(操作)
五、发布订阅消息
发布订阅(pub/sub)是一种消息通信模式,主要目的是解除消息发布者和消息订阅者之间的耦合。订阅者可以通过subscribe 和psubscribe命令向redis server订阅自己感兴趣的消息类型。发布者通过publish命令向redis server发送特定类型的消息时,订 阅该信息类型的全部client都会收到此消息。
六、虚拟内存使用
Redis的虚拟内存就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据。
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 -是否使用vm