(四)Sorted-Sets类型
概念
Sorted-Sets类似Sets,也称为Zset,是字符串的集合,都不允许重复的成员出现在一个Set中。区别在于Sorted-Sets的每个成员都有一个分数,成员的排序使通过分数来进行的。Sorted-Sets的成员必须时唯一的,但分数可重复。
操作
- zadd/zrange/zcard/zrank/zcount/zrem/zscore/zincrby
- zadd :添加/创建Sorted-Sets
- zrange:获取/查看元素(分数可看可不看)
zrange myzset 0 -1 withscores
- zcard:获取myzset键中成员的数量
- zrank:获取指定元素,在集合中的索引
- zcount:获取符合指定条件的成员数量,分数满足表达式1 <= score <= 2的成员的数量
zcount myzset 1 2
- zrem:删除元素
- zscore:获取指定元素的分数
- zincrby:将成员three的分数增加2,并返回该成员更新后的分数
- zrangebyscore/zremrangebyscore/zremrangebyrank
- zrangebyscore:获取符合条件的元素,
zrangebyscore myzset -inf +inf withscores limit 2 3
, -inf +inf 表示分数的范围;limit后面的参数2指从索引值为2的开始,3表示找三个符合条件的结果; - zremrangebyscore:删除指定分数的元素
- zremrangebyrank:根据索引删除元素
- zrevrange/zrevrangebyscore/zrevrank
- zrevrange:按索引反向获取元素
- zrevrangebyscore:按索引从高到低的方式根据分数获取成员,分数满足表达式3 >= score >= 0的成员
- zrevrank:获取成员one在集合中的索引,从高到低的排序(没有rev,默认是从小到大)
应用
可用于做类似游戏的积分排行榜
SortedSets类型还可用于构建索引数据
(五)Hash类型
概念
可以将Redis中的Hash类型看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象
的信息。
操作
- hset/hget/hlen/hexists/hdel/hsetnx
- hset:创建/添加hash“对象”的属性键值对
- hget:获取属性对应的键值
- hlen:获取对象属性的个数
- hexists:判断对象是否有某属性
- hdel:删除某属性
- hsetnx:不存在时才生效
- hincrby
- hincrby:对属性值进行正/负增长
- hmset/hmget/hgetall/hkeys/hvals
- hmset:一次设置多个键值对
- hmget:一次获取多个
- hgetall:获取全量
- hkeys:获取键中所有字段的名字
- hvals:获取键中所有字段的值
总结:每个类型对应的最简单的添加获取命令:
String:set/get mykey(名字) keyname(值)
List(有序):lpush mylist(名字) value1(值) value2 … || lrange mylist(名字) 0 -1(范围)
Set(无序):sadd myset(名字) value1(值) value2 … || smembers myset(名字)
Sorted-Sets:zadd myzet(名字) 10(分值) keyname1(值) 20(分值) keyname2(值) … || zrange myset(名字) 0 -1(范围)
Hash:hmset myhash(名字) name1 value2(键值对) name2 value2 || 获取一个或多个属性对应的值 hget/hmget(myhash(名字) ; 获取全量的键值对 hgethall myhash(名字);获取全量的字段名或字段值 hkeys/hvals myhash(名字)
五、 Key操作命令
操作
上面的对象名,作为key,对此进行操作
- keys/del/exists/move/rename/renamenx
- keys:查看key
keys *
"*"符合pattner表达式 - del:删除
- exists:判断是否已存在
- move:将key在数据库间移动
- rename:重命名
- renamenx:只有当目标名不存在时才可以更名
- ttl/persist/expire/expireat
- ttl:查看剩余的有效时间
- persist:将设置过有效时间的数据持久化
- expire:设置有效时间
- expireat:设置??从开始至某时间点隔了多少时间
- type/randomkey
- type:查看数据类型
- randomkey:返回数据库中的任意键
- flushdb:清空数据库
六、 事务
概念
1、 MULTI/EXEC/DISCARD/WATCH 实现事务的基本命令
2、 事务中的命令都会被串行化的顺序执行,事务执行期间,redis只为一个客户端服务(保证原子性
3、 和关系型数据库中的事务相比,redis事务一条事务执行失败,后面的命令会继续执行
4、 用multi
开启一个任务,类似于关系型数据的begin transaction
。在此之后执行的命令都是该事务的操作。用exec/discard
命令提交/回滚该事务内的所有操作,等同于关系型数据库的commit/rollback
语句
5、 发
命令
- multi
- exec
- discard
七、 主从复制Replication
Master-Slave主从,数据提交给主服务器,从服务器跟着主服务器实时地去更新数据
概述
1、 同一个Master可以同步多个Slaves
2、 Slave同样可以接收其他服务器的连接和同步请求,可以有效分载Master的同步压力,故可以及那关Redis的Replication架构视为图结构
3、 Master 服务器是以非阻塞的方式为Slaves提供服务,同步期间,客户端仍可以提交查询或修改请求
4、 Slaver服务器同样是以非阻塞的方式完成数据同步,在同步期间,有客户端提交查询,redis则返回同步之前的数据
5、Slave 服务器提供制度操作的服务,用以分载Master的读操作压力,但写服务只能由Master来完成。(系统的伸缩性得到了提高
6、 Master可以将数据保存操作交给Salve完成,从而避免了在Master中要由独立的进程来完成此操作
配置
在从服务器上输入slaveof 主服务器地址 服务的端口号
将从服务器连接到主服务器。此时主服务器不能设置密码,否则连接不到。这是临时连接,若服务器重启配置失效
若要永久有效,需在配置文件中进行配置
- 查询本地的ip地址
- 配置主服务器的bind,改为主机ip,而非127.0.0.1;端口号可改可不改,不改就是默认的6379
- 从服务器同样配置bind;修改端口号,若同台设备,端口号要不同;配置
slaveof master的ip 端口号
slaveof
&replicaof
区别是新老版本,配置文件中没找到slaveof,只有replicaof,之前没找到,用slaveof进行配置,同样可以生效 - 配置完成,重启服务器,
info replication
查看主从身份;master写入后,slave可以实时读取数据,slave只能读,禁写。
上述是不设置密码的配置方式,设置密码如下
- master通过配置
requirepass 密码
进行密码的设置
设置密码后,再访问服务器,需要输入密码auth 密码
之后进行读写操作 - 此时,slave设置
masterauth 密码
,将master的密码写入配置文件
其他
关系型数据库的事务
关系型数据库的事务是指一组sql语句组成的数据库逻辑处理单元,在这组的sql操作中,要么全部执行成功,要么全部执行失败。
事务的特性:原子性、一致性、隔离性、持久性