非关系性数据库产生背景
high performance -对数据库高并发读写需求
huge storage -对海量数据高效存储访问需求
high scalability && high availavility -对数据库高可扩展性与高可用性需求
Redis简介
redis 端口6379
基于内存运行并支持持久化
采用key-value(键值对)的存储形式
优点:具有极高的数据读写速度、支持丰富的数据类型、执行数据的持久化、原子性、支持数据备份
安装过程
首先把包拖入opt下tar接下进入解压之后的包,里面没有./configure直接make编译
[root@localhost redis-5.0.7]# tar zxvf redis-5.0.7.tar.gz
[root@localhost redis-5.0.7]# cd redis-5.0.7/
make编译
然后指定安装路径,直接指定到redis里
[root@localhost redis-5.0.7]# make prefix=/usr/local/redis install
因为之前装的时候就指定了可以识别
[root@localhost redis-5.0.7]# cd /usr/local/bin/
[root@localhost bin]# ls
redis-benchmark redis-check-rdb redis-sentinel
redis-check-aof redis-cli redis-server
在安装文件里有个utlis
[root@localhost redis-5.0.7]# cd utils/
进入里面有个配置脚本install_server.sh
启动这个配置脚本
[root@localhost utils]# ./install_server.sh
一路回车下去就完成了
Please select the redis port for this instance: [6379] #选择端口
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] #配置文件
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] #日志文件
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] #数据文件
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] #执行文件
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
然后查看6379端口有没有启
[root@localhost utils]# netstat -anpt |grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 6324/redis-server 1
测试127环回口是否能进入redis
[root@localhost utils]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379>
如果需要网段是自己的20.0.0.41就要进入配置文件添加监听端口20.0.0.41
进入主配置文件
[root@localhost utils]# vi /etc/redis/6379.conf
70 bind 127.0.0.1 20.0.0.41 ##70行添加20.0.0.41地址
wq保存退出然后重启服务
/etc/init.d/redis_6379 stop start
[root@localhost utils]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
[root@localhost utils]# /etc/init.d/redis_6379 start
Starting Redis server...
然后 redis-cli -h 20.0.0.41 -p 6379 康康能不能进入
[root@localhost utils]# redis-cli -h 20.0.0.41 -p 6379
20.0.0.41:6379>
数据库常用操作
String (字符串)
string 是redis最基本的类型 可以理解为与memcached一样的类型一个key对应一个value
string 类型是二进制安全的。redis的string可以包含任何数据。比如jpg图片或者序列化对象
string类型是redis最基本的数据类型,最大能存储512M
20.0.0.41:6379> set name zhangsan ##创建字符串类型key是name值是zhangsan
OK
20.0.0.41:6379> get name ##查看key的value值
"zhangsan"
20.0.0.41:6379> keys * ##查看创建的key
1) "name"
20.0.0.41:6379> type name ##查看name的类型
string
Hash(哈希字典)
hash 是一个键值=>value的集合
hash是一个string类型的field和value的映射表,特别适合用于存储对象。
每个has可以存储2的32次方-1键值对
作用场景:键值对集合;即编程语言中Map类型 适合存储对象,并且可以像数据库种update一个属性一样只修改某一项属性值 是面向对象的
20.0.0.41:6379> hmset xuesheng name lisi nianling 20 xingbie 男
OK
它的key下可以对应多个值进行调用
20.0.0.41:6379> hget xuesheng name
"lisi"
20.0.0.41:6379> hget xuesheng xingbie
"\xe7\x94\xb7" ##乱码
这时进入时加入--raw解析中文字符集
[root@localhost utils]# redis-cli -h 20.0.0.41 -p 6379 --raw
20.0.0.41:6379> hget xuesheng xingbie
男
List(列表)
redis列表时简单的字符串列表,按照插入顺序排序,可以重复。可以添加一个元素到列表的头部(左边)或者尾部(右边)
列表最多可以存储2的32次方-1元素
作用场景:增删块,提供操作某一段元素API 罪行消息排行等功能, 消息队列
20.0.0.41:6379> lpush xingqu play ##添加第一个玩。。。
1
20.0.0.41:6379> lpush xingqu du
2
20.0.0.41:6379> lpush xingqu shui
3
20.0.0.41:6379> lrange xingqu 0 10 ##查看添加的序列值
shui
du
play
Set(集合)
redis 的set时string类型无序集合,set里不能有重复的数据
集合时通过哈希表实现的所以添加,删除,查找复杂度都是0(1)
作用场景:共同好友、利用唯一性,统计访问网站所有独立ip、好友推荐时根据tag求交集,大于某个阈值可以推荐
sadd命令:添加string元素到ket对应set集合种成功1如果已经存在返回0
20.0.0.41:6379> sadd yanse lu huang hong ##添加颜色3个
3
20.0.0.41:6379> smembers yanse ##显示添加的值
hong
lu
huang
20.0.0.41:6379> sadd yanse hong ##再去添加红发现显示0表示已经存在
0
zadd命令 (有序集合)
添加到元素集合,元素集合种存在则更新对应score,元素不可以重复序号可以重复
20.0.0.41:6379> zadd yan 0 hong 添加序号一样的
1
20.0.0.41:6379> zadd yan 0 lu
1
20.0.0.41:6379> zadd yan 1 huang
1
20.0.0.41:6379> zadd yan 1 lan
1
20.0.0.41:6379> zrangebyscore yan 0 10
hong
lu
huang
lan
20.0.0.41:6379> zrangebyscore yan 0 0 ##显示范围
hong
lu
20.0.0.41:6379> zrangebyscore yan 0 1
hong
lu
huang
lan
20.0.0.41:6379> zrangebyscore yan 1 1
huang
lan
多库概念
redis支持多个数据库每个数据库数据不能共享,并且基于待机才有,如果集群就没有数据库概念
redis是一个字典结构的存储数据服务器,而实际上redis实例提供多个存储数据的字典,每个数据库对外都是从0开始递增数字命名,redus默认支持16个收购雅虎邮件0-15 可以配置文件无上限,客户端建立连接自动选择0号数据库
不可以随时使用select更换数据库
切换库
20.0.0.41:6379> select 1
OK
20.0.0.41:6379[1]> select 0
OK
20.0.0.41:6379>
清空库所有数据
FLUSHALL
redis不支持自定义数据库名字每个数据库都已编号命名,必须记住数据库存储了哪些数据
不能设置不同访问密码,多个数据库并不是完全隔离的,flushall可以清空整个redis所有库的实例
key常规管理
key是否存在 exists
20.0.0.41:6379> exists name
1
没有显示0
重命名
20.0.0.41:6379> rename name names
OK
20.0.0.41:6379> get names
zhangsa
设置超时时间
20.0.0.41:6379> PEXPIRE na 60000
查看剩余时间
20.0.0.41:6379> PTTL name
-2
取消超时时间
20.0.0.41:6379> PERSIST name
查看类型type
20.0.0.41:6379> type names
string
随机返回key值 RANDOMKEY
20.0.0.41:6379> randomkey
names
20.0.0.41:6379> randomkey
xingqu
20.0.0.41:6379> randomkey
xingqu
查看所有key
20.0.0.41:6379> keys *
xingqu
names
xuesheng
yanse
yan
数据迁移数据库move
20.0.0.41:6379> move yan 1
1
20.0.0.41:6379> select 1
OK
20.0.0.41:6379[1]> keys *
yan