redis 简介
redis 是非关系型数据库(NoSql)的一种。是使用 key-value 的形式存储数据,常用于 缓存或者需要高速访问的情况.
redis 支持 5 种数据类型:
- string(字符串)
- hash(哈希)
- list(列表)
- set(集合)
- zSet(有序集合)
同时 redis 支持 ROB,AOF 两种持久化方式。也支持事务和主从复制。
启动 redis 服务
在正确安装了 redis 以后。进入 bin 目录,修改 redis.conf 文件,将 daemonize 属性改为 true:
通过 redis-server 指定使用哪个配置文件启动 redis 。
使用 redis-cli -p 指定 redis 服务的端口号。
再使用 ping 测试连通性。
String
String 类型,在 redis 中是一个键值对,通过使用。
- set,get 来设置和获取对应 key 的值。
- del 删除对应的值
- keys * 获得所有 key
- expire key second 设置 key 的过期时间,以秒为单位
- TTl key 返回 key 生存的秒数,返回 -1 代表当前 key 不过期
- PERSIST key 设置 key 永不过期
List
list 相当于是一个队列。
- LPUSH 将一个或多个元素插入到 list 的头部
- RPUSH 将一个或多个元素插入到 list 的尾部
- LPOP 弹出list 头部的一个元素
- LLEN 获取长度
- LREM key count value 删除 list 中一定数目的 value 值
- LRANGE key start stop 从指定位置开始打印列表,输出 0 -1 代表答应所有元素
Hash
redis 中 Hash 也是 key-value,不过 value 中存储的也是一组 key-value。
- HSET ,HGET 存储或得到一个
- HMSET,HMGET 存储或得到多个
- HGETALL 得到 HASH 中所有的键值对
- HKEYS,HVALS 得到所有的键或者值
Set
类似 list 但是不能添加重复的值。
- SADD,SMENBERS 存储得到值
- SREM 删除 set 中 value
- SCARD 返回 set 的长度
- SMOVE key1 key2 value 将 key1 中的 value 移动到 key2 中
- SPOP 随机出栈一个元素,SRANDMEMBER key Count 随机出栈多个元素
- SDIFF 两个 set 的差集,SINTER 交集,SUNION 并集
ZSet
ZSet 就是有序集合,在 set 的基础上多了一个 score 来记录当前值的权重,根据权重来排序。
- ZADD,ZRANGE(withscores) 存储得到值,是否带上权重
- ZREVRANGE 反序排列
- ZRANGEBYSCORE Min max 或者指定权重返回的值
- ZRANK 根据 value 获得下标,ZSCORE 根据 value 获得对应的权重
事务
redis 支持事务,下面是关于事务的命令:
- MULTI:开启事务
- EXEC:结束执行事务
- DISCARD:放弃当前事务
- watch:监控一个 key 的值
- unwatch:放弃对所有 key 的监控
正确执行事务:
在执行事务的过程中,如果出现一个命令不正确报错,会导致这次事务的所有操作失败回滚。:
在事务中,如果命令没有错误,但是在执行某条命令出错了,这个命令就不会执行成功,但是其他的命名会照常执行。这就是 redis 对事务的部分支持,不支持事务的回滚。
watch:加上一个乐观锁
- 悲观锁:在操作一个数据的时候认为别人也会操作这个数据,所以就锁住操作的对象。并发性差。
- 乐观锁:在操作一个数据的时候认为别人不会操作这个数据,不对数据加锁,引入 version 的机制来确保修改的数据不会丢失,每次上传的时候比较自己的 version 和数据真实的 version 。确保修改时候是在最新的数据上修改。
如果在 watch 监控了以后,数据被修改,这次失误就会执行失败,需要重新执行一次事务。