redis数据库相关知识

一、为什么使用redis

        MySQL 数据库的数据确实存储在磁盘上,这意味着任何数据的读写操作(如查询、更新等)都会涉及到磁盘I/O。随着数据库访问量的增加,磁盘I/O可能成为性能瓶颈,因为磁盘的读写速度远不及内存。这是因为内存的数据访问速度(通常是纳秒级)比磁盘(毫秒级)快几个数量级。  为了缓解这种性能瓶颈,通常会采用缓存技术。缓存技术的基本思想是将频繁访问的数据存储在内存中,以便快速访问,减少对磁盘的依赖。在这个场景下,Redis 作为一种高性能的键值对数据库(尽管它也支持多种数据结构和更复杂的数据操作),因其极快的读写速度和丰富的数据结构支持,成为了缓存MySQL数据的常用选择。  

二、使用 Redis 缓存的好处

1、提升数据访问速度:通过将热点数据(即经常被查询的数据)缓存在内存中,可以显著提高数据的访问速度,降低数据库的负担。

 2、缓解数据库压力:随着缓存的介入,许多原本需要直接访问数据库的操作现在可以在缓存中完成,从而减少了数据库的访问次数,降低了数据库的压力。

 3、增强系统可扩展性:通过增加缓存层,可以在不增加数据库服务器数量的情况下,通过增加缓存服务器或扩展缓存容量来提升系统的整体性能。

三、redis常见的数据结构

1、string-字符串

2、list-列表

3、hash-哈希

4、set-集合

5、zset-有序集合

四、常见的命令
1、string

1)使用set 设置值   get查看值

命令:set  key  value (value的值的类型很多)

命令:get  key

 

key和value 都可以为中文, 但是非常不建议, 输入中文时乱码(windows)。

怎样看到中文:输入quit退出,重进输入 redis-cli --raw,以原始的方式进入就能看到中文了。  

key是区分大小写的。

2)使用del删除键值对

命令:del key

3)使用exists查看键值对是否存在

命令:exists key  

有会显示1,没有会显示0。

4) 使用keys查找所有的键

命令:keys pattern(模式匹配)

*代表所有, *me代表以me结尾。

5) 使用flushall清空所有的键

命令:flushall

6) 使用ttl查看key的过期时间

命令:ttl  key

 -1代表没有过期时间

7) 使用expire设置过期时间,单位是秒

命令:expire  key  time

过期后该键值对将被删除。

8) 使用 setex设置键值对时也设置过期时间

命令:setex key time value

9) 使用setnx设置键值对

命令:setnx  key  value

10) set、setex 、setnx的区别

set直接设置键值对,没有过期时间,对同一个键设置值时会覆盖。

setex设置键值对时会设置过期时间,对同一个键设置值时会覆盖。

setex相当于这两条命令的集合:

set  key value

expire key time

setnx设置键值对时会看存不存在,存在则不创建, 无过期时间 Nx 相当于 if not exist。

2、list

1) 使用lpush给列表添加元素,是在头部添加, 最后添加的元素会在最前面

命令:lpush list_name value1 [value2 ….]  

2) 使用lrange读取列表中的元素

命令:lrange  list_name  start_index  end_index

0表示第一个元素的索引, -1表示最后一个元素的索引。

3) 使用rpush 在列表的尾部添加元素

命令:rpush list_name value1 [value2…]

4) 使用 lpop 命令删除头部元素

命令:lpop list_name

5) 使用rpop命令删除尾部元素

命令:rpop list_name

6) 使用llen查看列表的长度

命令:llen list_name

7) 使用ltrim来修剪列表, 即删除范围之外的值

命令:ltrim  list_name  start_index end_index

3、hash

1) 使用hset来存储一个对象

命令:hset  key  filed value

2) 使用hget来获取key的某一个filed的值

命令:hget  key file 

3) 使用hgetall获取对象的所有键值对,是成对出现的

命令:hget key

4) 使用hdel删对象的某个filed

命令:hdel key filed

5) 使用hexists查看对象的filed是否存在

命令:hexists key filed

6) 使用hkeys查看key的所有filed

命令:hkeys key

7) 使用hlen查看key的filed的个数

命令:hlen key

4、set

1) 使用sadd添加元素

命令:add  set_name value1 [value2 ….]

 2) 使用smembers查看集合中的元素

命令:smembers  set_name

3) 集合中的元素都是唯一的,如果已经存在, 则再次添加时会添加失败

 以前的集合中已经有a, 再次添加时输出0, 表示添加失败。

4) 使用sismember 来判断元素是否再集合中

命令:sismember set_name value

在则输出1,不在输出0

5) 使用srem删除集合中的元素

命令:srem set_name value

5、zset

会通过score值来排序

1) 使用zadd添加元素

命令:zadd set_name  score1 value1  score2 value2 [score3 value3 ...]

2) 使用zrange查看元素

命令:zrange set_name  start_index end_index [withscores]

不加withscores就不会输出对应的score。

3) 使用zscore查看某一个value对应的score

命令:zscore set_name  value

4) 使用zrank查看成员的排名, 排名是从0开始

命令:zrank set_name value

5) 使用zrem删除集合中的某个元素

命令:zrem set_name value

五、发布订阅模式

1、使用subscribe来订阅频道

命令:subscribe chanel_name

2、使用publish向频道发送消息

命令:publish chanel message

另外的终端:

可以多个终端发送消息或者加入频道。  

缺点: 1) 无法记录历史消息    2)消息无法持久化

六、地理空间 Geospatial

1、使用geoadd添加地理位置

命令:geoadd  key  经度 纬度 地点名

可以一次添加一个, 也可以一次添加多个。

2、使用geopos查看地理位置

命令:geopos  key 地点名

3、 使用geodist查看两地的距离,默认单位是m

命令:geodist key 地点名  地点名

单位变成km,在后面加参数km即可。

七、stream

1、使用xadd添创建消息队列

命令:xadd key ID fileld string

*表示自动生成ID。

2、使用xrange查看所有消息

命令:xrange key start stop

注意是'-', '+'。

3、使用xlen查看消息队列的长度

命令:xlen key

4、使用xdel 删除消息

命令:xdel key  id

5、使用xtrim删除任意条消息

命令:xtrim key maxlen number

6、给消息手动添加ID

消息的ID格式:数字-数字

7、使用xread读取消息

命令:xread count 消息数 block 为空阻塞的时间  streams stream_name 0

最后一个参数:0:从第一个消息开始;$:从最新的消息开始

八、事务

Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

1、批量操作在发送 EXEC 命令前被放入队列缓存。

2、收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。

3、在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一个事务从开始到执行会经历以下三个阶段:

1、开始事务。

2、命令入队。

3、执行事务。

步骤:

1、输入multi进入事务模式

2、输入命令回显queued,  所有的命令被放在队列中等待执行

3、 输入exec 执行队列中的命令

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值