Redis 入门和 RedisTemplate 常用方法(常用命令 + 案例源码)

本文介绍了Redis的基本概念、优缺点、应用场景和安装步骤,深入讲解了Redis的常用数据类型及其命令。此外,文章还讨论了Redis的进阶特性,包括全局命令、安全设置、事务处理、持久化机制以及内存淘汰策略。最后,通过实例演示了如何在SpringBoot中使用RedisTemplate进行数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内容

参考博文:https://www.cnblogs.com/maguanyue/p/12090414.html


一、Redis 概念

Redis 是一个开源的使用 ANSIC 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API;

Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型;

Redis 定位是缓存, 提高数据读写速度, 减轻对数据库存储与访问压力


二、Redis 优缺点

1. 优点

【1】性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s ;

【2】丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作;

【3】原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来;

【4】丰富的特性 – 可用于缓存,消息通知,按key设置过期时间,过期后将会自动删除等。


2. 缺点

【1】 由于是内存数据库,所以,单台机器,存储的数据量,跟机器本身的内存大小。虽然redis本身有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。

【2】如果进行完整重同步,由于需要生成rdb文件,并进行传输,会占用主机的CPU,并会消耗现网的带宽。不过redis2.8版本,已经有部分重同步的功能,但是还是有可能有完整重同步的。比如,新上线的备机。

【3】 Redis并不支持事务回滚,事务虽然可以提交,但不会回滚。

【4】 正因为没有事务回滚,所以存储比较重要的数据,会出现丢失数据的问题。所以比较重要的数据都不会存储在Redis中的,比如有关钱方面的东西,不会存到Redis中的。


三、应用场景

适用场景

  1. 热点数据的缓存
    由于redis访问速度块、支持的数据类型比较丰富,所以redis很适合用来存储热点数据,另外结合expire,我们可以设置过期时间然后再进行缓存更新操作;

  2. 限时业务的运用
    redis中可以使用expire命令设置一个键的生存时间,到时间后redis会删除它。利用这一特性可以运用在限时的优惠活动信息、手机验证码等业务场景;

  3. 计数器相关问题
    redis由于incrby命令可以实现原子性的递增,所以可以运用于高并发的秒杀活动、分布式序列号的生成、具体业务还体现在比如限制一个手机号发多少条短信、一个接口一分钟限制多少请求、一个接口一天限制调用多少次等等;

  4. 排行榜相关问题
    关系型数据库在排行榜方面查询速度普遍偏慢,所以可以借助redis的SortedSet进行热点数据的排序;

  5. 分布式锁

  6. 延时操作

  7. Pub/Sub构建实时消息系统

  8. 构建队列系统

  9. 缓存


四、Redis 安装

【1】下载安装包,然后一直下一步,安装到环境变量那一步勾一下,也可以安装完后自己配置,不会就直接百度一下安装教程就好了;

【2】安装完环境变量之后 -> win + R -> 输入 cmd 打开命令窗口 -> 输入 redis-cli (查看 redis 服务是否启动)-> 如果进入了 6379 默认端口或你前面设置的端口则 redis 服务已启动,没启动的话自己去任务管理器服务选项找到 redis 启动即可 -> 在命令窗口的端口号后面输入 ping ,出现 PONG 则 Redis 安装成功。


五、常用命令

1. Redis 字符串(String)

1.1 概念

String类型包含多种类型的特殊类型,并且是二进制安全的.比如序列化的对象进行存储,比如一张图片进行二进制存储.,比如一个简单的。

Map<StringString>  map;
1.2 常用命令
序号 命令 作用
1 set key value 设置指定 key 的值(set name yy)
2 get key 获取指定 key 的值
3 incr key 把值递增1
4 decr key 把值递减1
5 del key 根据键删除键值对
6 setex key timeout value 存入键值对,timeout表示失效时间,单位s
7 ttl key 可以查询出当前的key还剩余多长时间过期
8 setnx key value 如果key已经存在,不做操作, 如果key不存在,直接添加
9 incrby key num 偏移值(对值进行加减操作)
10 mset k1 v1 k2 v2 … 批量存入键值对
11 mget k1 k2 批量取出键值
12 append key ‘value’ 原值后拼接新内容
13 setrange key index value 修改键对应的值,index表示开始的索引位置(从0开始)

2. Redis 哈希(Hash)

2.1 概念

Hash类型是String类型的field和value的映射表.或者说是一个String集合.它特别适合存储对象,相比较而言,讲一个对象存储在Hash类型里要比存储在String类型里占用更少的内存空间,并方便存储整个对象。

Map<string, Map<string, ?>> map

2.2 常用命令
序号 命令 作用
1 hset key hashkey hashvalue 存入一个hash对象(hset user name yy)
2 hget key hashkey 根据hash对象键取去值
3 hexists key hashkey 判断hash对象是含有某个键
4 hdel key hashkey 根据hashkey删除hash对象键值对
5 hincrby key hashkey 递增值 递增hashkey对应的值
6 hlen key 获取hash对象键的数量
7 hkeys key 获取hash对象的所有键
8 hvals key 获取hash对象的所有值
9 hgetall key 获取hash对象的所有数据
10 hsetnx key hashkey hashvalue 存入键值对,键存在时不存入

3. Redis 列表(List)

3.1 概念

Redis中的List类似Java中的queue,也可以当做List来用;
List类型是一个链表结构的集合,其主要功能有push,pop,获取元素等.更详细的说,List类型是一个双端链表的结构,我们可以通过相关操作进行集合的头部或者尾部添加删除元素,list的设计非常简单精巧,即可以作为栈,又可以作为队列.满足绝大多数需求。

Map<StringList>

3.2 常用命令
序号 命令 作用
1 rpush key value [value …] 往列表右边添加数据(rpush hobby java C++ C C# Python)
2 lrange key start end 范围显示列表数据,全显示则设置0 -1
3 lpush key value [value …] 往列表左边添加数据
4 lpop key 弹出列表最左边的数据
5 rpop key 弹出列表最右边的数据
6 llen key 获取列表长度
7 linsert key before/after refVal newVal 参考值之前/后插入数据
8 lset key index value 根据索引修改数据(索引从0开始)
9 lrem key count value 在列表中按照个数删除数据
10 ltrim key start end 范围截取列表(LTRIM list 0 2,保留前3个元素,-1表示最后一个元素,-2倒数第二个元素)
11 lindex key index 根据索引取列表中数据

4. Redis 集合(Set)

4.1 概念

Set集合是string类型的无序集合,set是通过hashtable实现的,对集合我们可以取交集,并集,差集。


4.2 常用命令
序号 命令 作用
1 sadd key value 往set集合中添加元素(sadd myset aa bb cc dd)
2 smembers key 列出set集合中的元素
3 srem key value 删除set集合中的元素
4 spop key count 随机弹出集合中的元素
5 sdiff key1 key2 返回key1中特有元素(差集)
6 sdiffstore var key1 key2 返回key1中特有元素存入另一个set集合
7 sinter key1 key2 返回两个set集合的交集
8 sinterstore var key1 key2 返回两个set集合的交集存入另一个set集合
9 sunion key1 key2 返回两个set集合的并集
10 sunionstore var key1 key2 返回两个set集合的并集存入另一个set集合
11 smove key1 key2 value 把key1中的某元素移入key2中
12 scard key 返回set集合中元素个数
13 sismember key value 判断集合是否包含某个值
14 srandmember key count 随机获取set集合中元素

5. Redis 有序集合(sorted set)

5.1 概念

【1】Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员;

【2】不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序;

【3】有序集合的成员是唯一的,但分数(score)却可以重复。

5.2 常用命令
序号 命令 作用
1 zadd key score name 存入分数和名称(zadd contest 100 play1
zadd contest 90 play2)
2 zincrby key score name 偏移名称对应的分数
3 zrange key start end 在指定分数区间内按照分数升序输出名称
4 zrevrange key start end 在指定分数区间内按照分数降序输出名称
5 zrank key name 升序返回排名(0开始)
6 zrevrank key name 降序返回排名(0开始)
7 zcard key 返回元素个数
8 zrangebyscore key min max [withscores] 按照分数范围升序输出名称
9 zrevrangebyscore key max min [withscores] 按照分数范围降序输出名称
10 zrem key name 删除名称和分数
11 zremrangebyscore key min max [withscores] 根据分数范围删除元素
12 zremrangebyrank key start end 根据排名删除元素
13 zcount key min max 按照分数范围统计个数

六、Redis 进阶

1. 全局命令

序号 命令 作用
1 keys * (可以模糊查询) 返回满足的所有键
2 exists key [key …] 是否存在指定 key,返回存在的 key 的个数
3 expire key seconds 设置某个key的过期时间.使用ttl查看剩余时间
4 persist key 在时间结束之前取消过期时间
5 flushdb 清空当前数据库,flushall清空所有数据库
6 select 选择数据库 选择数据库 数据库为0到15(一共16个数据库) 默认进入的是0数据库
7 move [key] [数据库下标 将当前数据中的key转移到其他数据库中
8 randomkey 随机返回数据库里的一个key
9 rename 重命名key
10 echo 打印名
11 dbsize 查看数据库的key数量
12 info 获取数据库信息
13 config get 实时传储收到的请求(返回相关的配置信息)
14 config get * 返回所有配置

2. Redis 安全

因为redis速度非常快,所以在一台比较好的服务器下,一个外部用户在一秒内可以进行15w次的密码尝试,这意味你需要设定非常强大的密码来来防止暴力破解。

2.1. 修改密码

【1】vi编辑 redis.conf 文件,找到 requirepass [密码] 进行保存修改;
【2】重启服务器 pkill redis-server;
【3】再次进入127.0.01:6379>keys *,出现: (error)NOAUTH Authentication required;
【4】会发现没有权限进行查询auth [密码];
【5】输入密码则成功进入;
【6】每次进入的时候都需要输入免密,还有种简单的方式:redis-cli -a [密码]


3. Redis 事务

3.1 概念

【1】Redis会将一个事务中的所有命令序列化,然后按顺序执行;

【2】单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的;

【3】事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。


3.2 事务命令
<
序号 命令 作用
1 MULTI 标记一个事务块的开始
2 EXEC 执行所有事务块内的命令
3 UNWATCH 取消 WATCH 命令对所有 key 的监视
4 DISCARD 取消事务,放弃执行事务块内的所有命令
5
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值