快速了解Redis

Redis是什么?

Redis是一个数据库,是一个跨平台的非关系型数据库,Redis完全开源,遵守BSD协议。它通过键值对(Key-Value)的形式存储数据。

与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。

它与mysql数据库有什么区别?

redis通过键值对(Key-Value)的形式存储数据,mysql使用B+树索引结构来组织数据,通过表格的概念来组织和存储数据。

redis通常将数据存储在内存中,mysql通常将数据存储在磁盘上,因此redis要远大于mysql的读写速度。

redis默认情况下是单线程的,mysql是多线程的。

redis通过RDB(快照)和AOF(追加日志)两种机制实现数据持久化。(RDB通过定期将数据快照保存到磁盘上,AOF则将每个写操作追加到日志文件中)。mysql使用事务日志来记录和复制数据更改,同时支持事务回滚和故障恢复。

什么时候会用到Redis?

1.用redis做缓存,当数据量非常庞大、查询频繁时,如购物秒杀,mysql数据库的压力就会非常大。用redis做缓存就是为了减少数据库的压力。redis在内存中,有非常高的性能。

2.不需要做持久化的数据。如验证码,验证码只需要在几分钟内有效,假设存入到mysql,既占用了地方又浪费了时间。

3.实时统计。由于Redis的高速读写能力,它经常被用于实时统计和计数应用,如在线用户数统计、点赞/收藏数等。通过Redis提供的原子计数操作,可以方便地进行实时的增加和查询。

4.分布式锁。redis的原子操作和分布式特性可以实现分布式锁。

Redis的数据结构

1.String

字符串类型,可以包含任何数据,最大可以是512MB,字符串在创建后,如果存储容量不够,就会进行扩容,当字符串的容量小于1mb时,就会执行加倍扩容,当容量大于1MB时,则每次多增加1MB。

常用指令
set name zhencong   --存放字符串键值对
mset name zhencong age 18 --批量存放键值对
SETNX name zhencong  --如果不存在key为name,那么就设置value(分布式锁的原理)
get name   -- 获取key
mget name age  --批量获取key
DEL key -- 删除key
expire key 60 --设置过期时间,单位为秒
INCR key -- 将key中存储的数字加1
DECR key -- 将key中存储的数字减1
INCRBY key 2  --将key中存储的值都加上2
DECRBY key 2 --将key中存储的值都减去2

使用场景

1,不需要持久化的数据或者频繁更新的数据,比如验证码,点赞数

2,对象缓存:可以通过序列化工具类,来缓存java对象,比如将某个对象序列化为json,需要用的时候再取出来,反序列化。

3,实现分布式锁,(使用分布式锁时一定要设置过期时间,防止不能释放锁,造成死锁)

4,可以用incr,decr来实现点赞数

2.hash

常用指令
hset hash name zhencong --设置值,
hget hash name  -- 获取值
hmset hash name zhencong age 18 --批量设置
hmget hash name age --批量获取
hgetall hash 获取key的所有值
hkeys hash 获取hashmap中所有的key
hvals hash 获取hashmap中所有的value

使用场景

可以用于存储系统中对象的数据。(从图中可以看出很像java中的类对象,对象jilit 的sex属性是男 age属性是21)

3.List

redis的list是按插入顺序排序的,可以头插或者尾插,是一个双向链表,对两端的操作性能会比较高,对中间节点的操作性能相对来说较差(因为得通过指针对遍历对应的节点)。可以通过这里的List来实现数据结构的队列和栈。

常用指令
rpush myList value1 --向 list 的头部(右边)添加元素
rpush myList value2 value3 --向list的头部(最右边)添加多个元素
lpop myList # 将 list的尾部(最左边)元素取出
rpop myList2 value1 --尾插

队列

使用场景

可以实现栈和队列

4.Set

redis的set,可以自动去重。

常用指令
SADD key member [member ...] --向集合key中添加一个或多个member元素
SMEMBERS key --返回集合key中的所有元素
SISMEMBER key member --判断member元素是否是集合key的成员,返回1表示是成员,返回0表示不是成员
SCARD key --返回集合key的基数(元素个数)
SREM key member [member ...] --从集合key中移除一个或多个member元素
SDIFF key [key ...] --返回所有给定集合的差集,即在第一个集合中但不在其他集合中的元素。
SINTER key [key ...] --返回所有给定集合的交集,即同时存在于所有集合中的元素。
SUNION key [key ...] --返回所有给定集合的并集,即包含所有集合中的元素。
使用场景

1.对数据去重。

2.在线状态,Set可以用于存储在线用户的信息。

3.可以用来计算多个数据源的交集、并集、差集(共同好友、社交网络等)。

5.SortedSet

与Set很像,但SortedSet里面的每个节点都关联了一个权重,用来排序。

常用指令

zadd,zcard,zscore,zrange,zrevrange,zrem 等

zadd myZset 3.0 value1 # 添加元素到 sorted set 中 3.0 为权重
(integer) 1
zadd myZset 2.0 value2 1.0 value3 # 一次添加多个元素
(integer) 2
zcard myZset # 查看 sorted set 中的元素数量
(integer) 3
zscore myZset value1 # 查看某个 value 的权重
"3"
zrange  myZset 0 -1 # 顺序输出某个范围区间的元素,0 -1 表示输出所有元素
1) "value3"
2) "value2"
3) "value1"
zrange  myZset 0 1 # 顺序输出某个范围区间的元素,0 为 start  1 为 stop
1) "value3"
2) "value2"
zrevrange  myZset 0 1 # 逆序输出某个范围区间的元素,0 为 start  1 为 stop
1) "value1"
2) "value2"
使用场景

直播系统的实时排行榜

6.Geospatial

redis提供了经纬度的相关操作。可以表示一个区域的二维坐标。

使用场景

可以用来计算距离最近的门店

相关推荐

  1. 2分钟快速了解Redis核心内容

    2024-03-12 01:28:02       37 阅读
  2. Jenkins快速了解

    2024-03-12 01:28:02       25 阅读
  3. 快速了解Linux IPC

    2024-03-12 01:28:02       13 阅读
  4. 快速了解Vuex

    2024-03-12 01:28:02       9 阅读
  5. 快速了解数据脱敏

    2024-03-12 01:28:02       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-12 01:28:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-12 01:28:02       20 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-12 01:28:02       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-12 01:28:02       20 阅读

热门阅读

  1. 【Spring Boot单元测试】讲解

    2024-03-12 01:28:02       19 阅读
  2. Day 9. TCP并发模型、select、poll、epoll

    2024-03-12 01:28:02       22 阅读