redis 数据库

redis多数据库

1. redis 是一个字典结构的存储服务器,redis提供了多个存储数据的字典。这里所说的字典其实就是一个个数据库。

2. redis 提供了16个数据库,每个数据库对应一个从0开始递增的数数字。

3. 客户端与redis服务端建立连接时默认选择0号数据库。

4. 通过SELECT 命令来更换数据库。

命令介绍: 

 KEYS *查看当前数据库中的所有的key
SELECT 数据库编号【0-15】选择数据库

FLUSHALL

清空一个redis所有数据库中的数据

入门

热身 

判断一个键是否存在

EXISTS  key

删除键

DEL  key  [key ...]

删除一个或多个,返回删除的个数

获取键的类型

TYPE  key

字符串类型

赋值与取值

SET  key  value

GET  key

当key 不存在时,返回空结果

一个字符串类型允许存储的数据最大容量为 512MB

递增数字

INCR  key

当操作的键不存在时,默认值未为0,所以第一次递增后值为1

当同一时间多个客户端访问num,会出现竞争导致不安全状况,但是INCR 避免了这个问题

实践

1. 文章访问量的统计

使用INCR 

2. 生成自增ID

使用INCR,加入一条记录,INCR一次

3. 存储文章数据

将文章的标题,内容等序列化后,存入到String 类型的值中,取出来进行反序列化获取文章。

增加指定的整数

INCRBY  key  increment

减少指定的整数

DECR  key

DECRBY  key  decrement

增加指定浮点数

INCRBYFLOAT  key  increment

向尾部追加值

APPEND  key  value 

获取字符串的长度

STRLEN  key

同时获取/设置多个值

MGET  key  [key  ...]

MSET  key  value  [key  value  ...]

散列类型

一个散列类型的键可以包含 (2^32) -1 个字段,字段值只能是字符串

赋值与取值

HSET  key  field  value

HGET  key  field

HMSET  key  field  value  [field  value  ..]

HGET  key  field  [field ...]

HGETALL  key

同时 设置/获取 多个字段值

获取键中所有的字段和值

判断字段是否存在

HEXISTS  key  field

存在返回 1,否则返回 0

当字段不存在时赋值

HSETNX  key  field  value

HSETNX 与 HSET 命令类似,区别在于如果字段已经存在,HSETNX 命令将不会执行任何操作。

HSETNX 是原子操作,不用担心竞争条件

增加数字

HINCREBY  key  field  increment

删除字段

HDEL  key  field  [field  ...]

删除一个或多个字段,返回被删除字段的个数

只获取字段名或字段值

HKEYS  key

HVALS  key

获取字段的数量

HLEN  key

实践

1. 存储文章数据

列表类型

缺点:通过索引查找某个位置的元素,需要一个个查询知道找到该索引元素 O(n)

向列表两端增加元素

LPUSH  key  value  [value  ...]

RPUSH  ley  value  [value  ...]

顺序为:3  2  1

从列表两端弹出元素

LPOP  key

RPOP  key

LPOP 第一步将列表左边第一个元素从列表中删除,第二步返回被删除的元素

获取列表中元素的个数

LLEN  key 

当key不存在时,返回0

获取列表片段

LRANGE  key  start  stop

start 开始索引 

stop 结束索引(包含)-1 表示右边第一个元素, -2 表示右边第二个元素

获取所有元素

删除列表中指定的值

LROM  key  count  value

获得/设置指定索引的元素

LINDEX  key  index

LSET  key  index  value

只保留列表指定片段

LTRIM  key  start  end

删除指定范围为的所有元素

向列表中插入元素

LINSERT  key  BEFORE|AFTER  pivot  value

pivot 从左到右查找值为pivot 的值

将元素 从一个列表转移到另一个列表

RPOPLUSH  source  destination

集合

相当于Java中的set集合,无序且唯一。

增加/删除元素

SADD  key  member  [member  ...]

SREM  key  member  [member  ...]

如果需要加入的元素已经存在与集合中就忽略这个元素。本命令返回值为成功加入 的个数

获取集合中的所有元素

SMEMBERS  key

判断元素是否在集合中

SISMEMBERS  key  member

时间复杂度为O(1)

集合间运算

SDIFF  key  [key  ...]

SINTER  key  [key  ...]

SUNION  key  [key  ...]

(1) SDIFF 计算集合间的差集

属于A且不属于B

先计算集合A与集合B的差集,再计算结果与集合C的差集

(2) SINTER 用来对多个集合进行求交集

(3) SINTER 表示多个集合间的并集,属于A或属于B的元素构成的集合

获取集合中元素的个数

SCARD  key

进行结合运算并将结果存储

SDIFFSTORE  destination  key  [key  ...]

SINTERSTORE  destination  key  [key  ...]

SUNIONSTORE  destination  key  [key  ...]

将结果存到 destination 集合中

将 setA 与 setB 的交集存储到 setD 中

随机获取集合中的元素

SRANDMEMBER  key  [count]

从集合中弹出一个元素

SPOP  key

有序集合类型

有序集合与列表的区别

增加元素

ZADD  key  score  member  [score  member  ...]

score 表示表示分数,用来排序

修改Tom的分数

分数不仅可以是整数,也可以是浮点数

+inf 表示 正无穷

-inf 表示 负无穷

获取元素的分数

ZSCORE  key  member

获取排名在某个范围的元素列表

ZRANGE  key  start  stop  [WITHSCORES]

ZREVRANGE  key  start  stop  [WITHSCORES]

ZRANGE 按照从小到大的顺序排序,WITHSCORES 带上分数

ZREVRANGE 按照从大到小

如果分数相同,会按照member 进行排序

获取指定分数范围的元素

ZRANGEBYSCORE  key  min  max  [WITHSCORES]  [LIMIT  offset  count]

(100   不包含100

增加某个元素的分数

ZINCRBY  key  increment  member   

获取集合中元素的个数

ZCARD  key

获取指定分数范围的元素个数

ZCOUNT  key  min  max

删除一个或者多个元素

ZREM  key  member  [member  ...]

按照排名范围删除元素

ZREMRANGEBYRANK  key  start  stop

按照分数范围删除元素

ZREMRANGEBYSCORE  key  min  max

获取元素的排名

ZRANk  key  member

ZREVRANK  key  member

进阶

事务

同一个事务,要么全执行,要么全不执行。

MULTI

要执行的命令

EXEC

MULTI 开启事务,EXEC 提交事务,redis 中没有回滚

错误处理

  • 语法错误

正确的命令,加入到事务队列,如果有命令语法错误,redis 会直接返回错误,正确的命令也不会执行

  • 运行错误

如果事务中一条命令出现了运行错误,事务里其他命令依然 可以继续执行(包括错误命令之后的命令)

WATCH

可以监控一个或多个键,一旦其中有一个被修改或删除,之后的事务不会执行。监控一直持续到EXEC命令。

过期时间

设置过期时间

EXPIRE  key  seconds 

seconds 表示过期时间,单位s

设置成功返回1

查看还有多长时间过期

TTL  key

取消过期时间的设置(恢复为永久)

PERSIST  key

应用

  • 实现访问频率限制(1)

  • 实现访问频率限制(2)

  • 实现缓存

当过去时间太长,且大量使用缓存后,会导致Redis内存占满。

(字节)

当超出了设置的内存,Redis会根据maxmemory策略指定参数来删除不需要的键

排序

SORT 命令

对有序集合排序会忽略元素的分数

按照字典顺序排序

SORT   key  ALPHA

从大到小排序

SORT   key  DESC

BY 参数

 

post:*->time 通过集合的time字段排序

itemscore:*  通过字符串的键排序

anytext 是常量键名进行排序(不存在的)

GET

STORE 参数

性能优化

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值