程序是用来处理数据的,Redis 是用来存储数据的,程序处理完的数据要存储在Redis 中,不同特点的数据要存储在Redis 中不同类型的数据结构中。
数据在没有存到Redis 之前存在内存中。
Redis 是一个开源(BSD许可的),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。其通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis 支持的键值数据类型如下:
# 进入redis 所在bin目录
cd /usr/local/bin/
./redis-cli -h 127.0.0.1 -p 8085
auth xxx
1、keys
语法:keys pattern
作用:查找所有符合模式pattern的key 。pattern 可以使用通配符。
通配符:*(匹配0到多个字符),?(匹配一个字符),[] (匹配括号中的一个字符)
2、exists:判断key 是否存在于数据库中
语法:exists key;判断1个key是否存在,存在返回1,不存在返回0。
exists key [key key …]; 判断多个key是否存在,返回存在的个数。
3、move:移动指定的key 到指定的数据库实例(Redis 默认有16个库),用户默认使用第0个库
语法:move key index
4、ttl:查看key的剩余生存时间
语法:ttl key ;
返回值:-1:没有设置生存时间;
-2:该key不存在
5、expire:设置key的最大生存时间 (s)
语法:expire key seconds
6、type:查看指定key 的数据类型
语法:type key
7、rename:重命名指定key
语法:rename key newkey
8、del:删除指定key 和value
语法:del key:删除一个key
del key [key key …]:删除多个key
返回值:删除实际删除数据条数
9、decrby:减去指定值
语法:decrby key num
10、incrby:增加指定值
语法:incrby key num
字符串类型是Redis 最进出的数据结构,其他的几种数据结构都是在字符串类型基础上构建的,字符串的值可以是:字符串、数字、二进制,但其值最大不能超过512M。
使用场景:缓存、计算器、对象存储缓存(共享session)、限速
常用命令
Redis 列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边),也可以获取指定范围指定下表的元素等。一个列表最多可以包含2^32 -1个元素(4284967285,每个列表超过40亿个元素)
两个特点
使用场景:消息队列、栈、文章列表等。
常用命令
Redis 的Set 是string 类型的无序集合,我们不能通过索引获取元素。集合成员是唯一的,这就意味这集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。集合中最大的成员数为2^32 -1(4284967295,每个集合可存储40多亿个成员)。
将一个或多个元素添加到指定的集合中:sadd key member1 member2…
获取指定集合中的所有元素:smembers key
判断指定元素在指定集合中是否存在:sismember key member; 存在返回1,不存在返回0;
获取指定集合的长度:scard key
移除指定集合中一个或者多个元素:srem key member1 member2…(不存在的元素会忽略)
随机获取指定集合中的n个元素:srandmember key [count] (count不指定,默认为1;
count>0:随机获取的数不重复,count<0:随机获取的数可能重复)
从指定集合中随机移除一个或者多个元素:spop key [count](count不指定,默认为1);
从指定集合中移动指定一个元素到另一个集合中:smove source destination member;
返回差集(一个集合中有,其他集合没有):sdiff key key…
返回交集(两个集合共同存在的值):sinter key1 key2…
返回并集(两个集合所有值):sunion key1 key2…
Redis 中hash 是一个string 类型的field 和value 的映射表 value={{field1,value1},{field2,value2}…},可以将一个Hash表作为一个对象进行存储,表中存放对象的信息。
应用场景:用户信息缓存
在有序集合中保留了不能有重复成员的特性,但其中的成员是可以排序的,每一个元素都会关联一个double类型的分数(score)作为排序依据,score相同时按字典顺序排序。redis 正是通过分数来为集合中的成员进行从小到大的排序。
应用场景:排行榜系统,成绩单,工资表
常用命令
1、可以在redis.conf 中修改配置文件,若使用配置文件中的参数,启动Redis的时候要选择使用配置文件启动,否则使用默认配置启动。(redis-server redis.conf &)
1. port:启动端口,默认6379;
2. bind:客户端连接使用IP,默认本地主机的任意一个IP
2、常规配置:
1. loglevel:配置日志级别:开发阶段配置debug,上线阶段配置notice和warning
2. logfile:指定日志文件。是的日志信息输出到指定文件中。
3. databases:配置Redis服务默认创建的数据库实例个数,默认值为16;
3、安全配置:(高效性,默认不用密码)
1. requirepass:配置Redis 的访问密码,默认不配置密码,即访问不需要密码验证。此配置项需要在protected-mode-yes时起作用,使用密码登录客户端:redis-cli -h ip -p 6379 -a pwd
Redis 提供持久化策略,用一些适当的手段在适当的时机将数据㛮磁盘中,每次启动Redis都会自动加载磁盘的数据到内存中。
RDB策略:在指定时间间隔内,redis服务执行指定次数的写操作,会自动触发依次持久化操作。
默认策略:【可以通过配置文件中的save 修改】
配置属性:
save :配置持久化策略
dbfilename:配置redis RDB 持久化数据存储的文件
dir:配置redis RDB 持久化文件所在目录
采用操作日志来记录进行每一次写操作,每次redis服务启动时,都会重新执行一遍操作日志中的命令。效率较低,redis默认不开启。
appendonly:配置是否开启AOF
appendfilename:配置操作日志文件
如果数据特别重要,可以开启两个策略,但是效率会降低。一般只开启RDB
事务:把一组数据库放在一起执行,保证操作的原子性,要么同时成功,要么同时失败。
redis事务:允许把一组redis命令放在一起,把命令进行序列化,然后执行,可以保证部分原子性。
redis客户端订阅频道,消息的发布者往频道上发布消息,所有订阅该频道的客户端都会接收到消息。
1.subscribe:订阅一个或多个频道的消息。
语法:subscribe ch1 ch2 ch3
2.publish:将消息发布到指定频道
主少从多,主写从读,读写分离,主写同步复制到从。
1.搭建1主2从redis集群:
1. 搭建三台redis服务:使用一个redis模拟三台redis服务
2. 提供三分redis配置文件:redis6379.conf、redis6380.conf、redis6381.conf
3. 修改三份配置文件:
1. bind 127.0.0.1
2. port 6379
3. pidfile /var/run/redis-6379.pid
4. logfile "6379.log"
5. dbfilename dump6379.rdb
启动三个redis 服务
通过redis 客户端分别连接三台redis 服务:
查看三台redis 服务在集群中的主从角色:
每一台服务器写数据,测试三台服务器独立,互补影响。
设置主从关系(6379为主机):主机的数据会自动存到从机上
全量复制:一旦主从关系设置,主机上的所有数据会自动同步复制到从机。
主写从读,读写分离:在从机上进行写操作,报错;
如在6381上执行:set ke 2
主机宕机:(模拟命令:redis-cli -h 127.0.0.1 -p 6379 shutdown)
从机宕机:
主机不连接已宕机的从机,其他从机未受影响。
如在6379上执行:info replication
从机恢复后与主机断开连接,自己默认为一个独立的主机
# 模拟宕机
redis-cli -h 127.0.0.1 -p 6380 shutdown
# 重启
redis-server redis6380.conf &
# 连接
redis-cli -h 127.0.0.1 -p 6380
# 查看主从角色
info replication
从机上位:
宕机的主机再恢复:(成为一个独立的主机)

小结:
一台主机配置多台从机,一台从机又可以配置堕胎从机,从而形成一个庞大的集群结构。
减轻了一台主机的压力,但是增加了服务间的延迟时间。
在redis 中无论什么数据类型,在数据库中都是以key-value 形式保存,通过进行对Redis-key的操作,来完成对数据库中数据的操作。
常用命令