redis 基础

redis 简介

redis 是非关系型数据库(NoSql)的一种。是使用 key-value 的形式存储数据,常用于 缓存或者需要高速访问的情况.

redis 支持 5 种数据类型:

  • string(字符串)
  • hash(哈希)
  • list(列表)
  • set(集合)
  • zSet(有序集合)

同时 redis 支持 ROB,AOF 两种持久化方式。也支持事务和主从复制。

启动 redis 服务

在正确安装了 redis 以后。进入 bin 目录,修改 redis.conf 文件,将 daemonize 属性改为 true:

1423

通过 redis-server 指定使用哪个配置文件启动 redis 。

使用 redis-cli -p 指定 redis 服务的端口号。

再使用 ping 测试连通性。

1430

String

String 类型,在 redis 中是一个键值对,通过使用。

  • set,get 来设置和获取对应 key 的值。
  • del 删除对应的值
  • keys * 获得所有 key
  • expire key second 设置 key 的过期时间,以秒为单位
  • TTl key 返回 key 生存的秒数,返回 -1 代表当前 key 不过期
  • PERSIST key 设置 key 永不过期

1445

List

list 相当于是一个队列。

  • LPUSH 将一个或多个元素插入到 list 的头部
  • RPUSH 将一个或多个元素插入到 list 的尾部
  • LPOP 弹出list 头部的一个元素
  • LLEN 获取长度
  • LREM key count value 删除 list 中一定数目的 value 值
  • LRANGE key start stop 从指定位置开始打印列表,输出 0 -1 代表答应所有元素

1501

Hash

redis 中 Hash 也是 key-value,不过 value 中存储的也是一组 key-value。

  • HSET ,HGET 存储或得到一个
  • HMSET,HMGET 存储或得到多个
  • HGETALL 得到 HASH 中所有的键值对
  • HKEYS,HVALS 得到所有的键或者值

1531

Set

类似 list 但是不能添加重复的值。

  • SADD,SMENBERS 存储得到值
  • SREM 删除 set 中 value
  • SCARD 返回 set 的长度
  • SMOVE key1 key2 value 将 key1 中的 value 移动到 key2 中
  • SPOP 随机出栈一个元素,SRANDMEMBER key Count 随机出栈多个元素
  • SDIFF 两个 set 的差集,SINTER 交集,SUNION 并集

1558

ZSet

ZSet 就是有序集合,在 set 的基础上多了一个 score 来记录当前值的权重,根据权重来排序。

  • ZADD,ZRANGE(withscores) 存储得到值,是否带上权重
  • ZREVRANGE 反序排列
  • ZRANGEBYSCORE Min max 或者指定权重返回的值
  • ZRANK 根据 value 获得下标,ZSCORE 根据 value 获得对应的权重

1615

事务

redis 支持事务,下面是关于事务的命令:

  • MULTI:开启事务
  • EXEC:结束执行事务
  • DISCARD:放弃当前事务
  • watch:监控一个 key 的值
  • unwatch:放弃对所有 key 的监控

正确执行事务:

1626

在执行事务的过程中,如果出现一个命令不正确报错,会导致这次事务的所有操作失败回滚。

1627

在事务中,如果命令没有错误,但是在执行某条命令出错了,这个命令就不会执行成功,但是其他的命名会照常执行。这就是 redis 对事务的部分支持,不支持事务的回滚。

1630

watch:加上一个乐观锁

  • 悲观锁:在操作一个数据的时候认为别人也会操作这个数据,所以就锁住操作的对象。并发性差。
  • 乐观锁:在操作一个数据的时候认为别人不会操作这个数据,不对数据加锁,引入 version 的机制来确保修改的数据不会丢失,每次上传的时候比较自己的 version 和数据真实的 version 。确保修改时候是在最新的数据上修改。

1718

如果在 watch 监控了以后,数据被修改,这次失误就会执行失败,需要重新执行一次事务。