redis学习(一)

本文详细介绍了Redis的用途,如记录博客的点赞、评论和点击数,存储用户博客列表,缓存内容等。同时,讲解了Redis的安装方法,包括Docker、源码编译和直接安装,并介绍了其五大数据类型:String、Hash、List、Set和Sorted Set,及其应用场景。
摘要由CSDN通过智能技术生成


前言

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. Redis provides data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes, and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions, and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

一、Redis 可以做什么?

Redis的业务应用范围非常广泛,让我们以csdn技术社区的博客为实例,梳理一下,Redis 可以用在哪些地方?

  1. 记录博客的点赞数、评论数和点击数 (hash)。
  2. 记录用户的博客ID 列表 (排序),便于快速显示用户的博客列表 (zset)。
  3. 记录博客的标题、摘要、作者和封面信息,用于列表页展示 (hash)。
  4. 记录博客的点赞用户 ID 列表,评论 ID 列表,用于显示和去重计数 (zset)。
  5. 缓存近期热帖内容 (博客内容空间占用比较大),减少数据库压力 (hash)。
  6. 记录博客的相关文章 ID,根据内容推荐相关博客 (list)。
  7. 如果博客ID 是整数自增的,可以使用 Redis 来分配博客ID(计数器)。
  8. 收藏集和博客之间的关系 (zset)。
  9. 记录热榜博客 ID 列表,总热榜和分类热榜 (zset)。
  10. 缓存用户行为历史,进行恶意行为过滤 (zset,hash)。

当然,实际情况下需求可能也没这么多,因为在请求压力不大的情况下,很多数据都是可以直接从数据库中查询的。但请求压力一大,以前通过数据库直接存取的数据则必须要挪到缓存里来。

二、认识redis

1.redis的安装

Docker方式:

# 拉取 redis 镜像
> docker pull redis 
# 运行 redis 容器
> docker run --name myredis -d -p6379:6379 redis
# 执行容器中的 redis-cli,可以直接使用命令行操作 redis
> docker exec -it myredis redis-cli

GitHub源码编译方式:

# 下载源码
> git clone --branch 2.8 --depth 1 git@github.com:antirez/redis.git 
> cd redis 
# 编译
> make 
> cd src 
# 运行服务器,daemonize表示在后台运行
> ./redis-server --daemonize yes 
# 运行命令行
> ./redis-cli

直接安装方式:

# mac
> brew install redis 
# ubuntu
> apt-get install redis 
# redhat
> yum install redis 
# 运行客户端
> redis-cli

2.redis的五大数据类型

String(字符串)
在这里插入图片描述

string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M。
Hash(哈希,类似java里的Map)
在这里插入图片描述

Redis hash 是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
类似Java里面的Map<String,Object>。
List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
它的底层实际是个链表。
Set(集合)

> sadd books python 
(integer) 1 
> sadd books python # 重复
(integer) 0 
> sadd books java golang 
(integer) 2 
> smembers books # 注意顺序,和插入的并不一致,因为 set 是无序的
1) "java"
2) "python"
3) "golang"
> sismember books java # 查询某个 value 是否存在,相当于 contains(o)
(integer) 1 
> sismember books rust 
(integer) 0 
> scard books # 获取长度相当于 count()
(integer) 3 
> spop books # 弹出一个
"java"

Redis的Set是string类型的无序集合。它是通过HashTable实现实现的。
Zset(sorted set:有序集合)

> zadd books 9.0 "think in java"
(integer) 1 
> zadd books 8.9 "java concurrency"
(integer) 1
> zadd books 8.6 "java cookbook"
(integer) 1 
> zrange books 0 -1 # 按 score 排序列出,参数区间为排名范围
1) "java cookbook"
2) "java concurrency"
3) "think in java"
> zrevrange books 0 -1 # 按 score 逆序列出,参数区间为排名范围
1) "think in java"
2) "java concurrency"
3) "java cookbook"
> zcard books # 相当于 count()
(integer) 3 
> zscore books "java concurrency" # 获取指定 value 的 score
"8.9000000000000004" # 内部 score 使用 double 类型进行存储,所以存在小数点精度问题
> zrank books "java concurrency" # 排名
(integer) 1 
> zrangebyscore books 0 8.91 # 根据分值区间遍历 zset
1) "java cookbook"
2) "java concurrency"
> zrangebyscore books -inf 8.91 withscores # 根据分值区间 (-, 8.91] 遍历 zset,同时返回分值。
1) "java cookbook"
2) "8.5999999999999996"
3) "java concurrency"
4) "8.9000000000000004"
> zrem books "java concurrency" # 删除 value
(integer) 1 
> zrange books 0 -1 
1) "java cookbook"
2) "think in java"

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值