Redis

简介: Redis

前言:为什么要学Redis?

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. 翻译为:Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存等。

官网:https://redis.io

中文网 Redis中文网

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到10万+的QPS(Queries-per-second每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql数据库。

Redis是一个基于内存的key-value结构数据库。它是「Remote Dictionary Service」的首字母缩写,也就是「远程字典服务-remote dictionary server」

redis具有以下优点:

1.基于内存存储,读写性能高。

2.适合存储经常访问的数据。

3.企业开发中常用作缓存

Redis的数据类型

Redis是一种高级的key-value的存储系统,其中key(键)是String类型,value支持5种数据类型即:String,hash,list,set,zset。

关于key(键)的数据类型有以下规则:

1.键不能重复

2.键的作用是用来标识存储的数据

3.数据类型:String

4.命名规则:

1)不能太长:因为查询的效率低,查询起来不方便

2)不能太短:容易重复,同时可读性也差

一:value的第一种数据类型:String

更多命令可以参考Redis中文网:Redis中文网

字符串类型是Redis中最为基础的数据存储类型,它在Redis中以二进制保存。无论存入的是字符串、整数、浮点类型都会以字符串写入。String为value时,最大存储容量为512M

String的常用命令如下:

命令 功能
set 键 值 添加或修改一个键和值,键不存在就是添加,存在就是修改
get 键 获取值,如果存在就返回值,不存在返回nil(就是C语言中NULL)
del 键 删除指定的键和值,返回删除的个数
SETEX key seconds value 设置指定key的值,并将 key 的过期时间设为 seconds 秒。此处的value是指key对应的value值。等价于:SET key value ex seconds
EXPIRE key seconds 如果一个key已经存在,要设置一个过期时间
SETNX key value/set key value nx 保存键值对,如果key存在则不保存,不存在则保存

补充:

批量操作:

mset  name lisi   addr sh

mget name  age addr

del  name age


String作为value的常见的使用场景:

  • 用户登录后端保存短信验证码,并设置失效时间;
  • 代替后端session功能,实现分布式缓存(是将数据分散存储在多台独立的设备上)等;

二:value的第二种数据类型:hash

可以将hash理解为在JavaSE学习的map一样,hash作为value时,最大存储容量为:4G个键值对

hash的常用指令如下:

命令 功能
hset 键 字段 值 添加键,字段,值
hget 键 字段 通过键,字段得到值
hmset 键 字段 值 字段 值 multiply多个,一次添加多个字段和值
hmget 键 字段 字段 通过键,获取多个字段和值
hdel 键 字段 字段 删除一个或多个字段的值
hgetall 键 得到这个键下所有的字段和值
HKEYS 键 获取哈希表中所有字段
HVALS 键 获取哈希表中所有值

例如:创建hash类型的键为person,并且添加一个字段为name,值为zhangsan

命令:hset persion name zhangsan

hash的常用场景:

存储有对象数据的,例如购物车,一个用户对应一个ID号,一个产品可以定义为一个字段值,该产品又可以选择多个数量(1,2,3.....)

三:value的第三种数据类型:list

在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其左部(left)和右部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4G个

list常用命令:

命令 行为
lpush 键 元素 元素... left 从左边向指定的键中添加1个或多个元素,返回列表中元素的个数
rpush 键 元素 元素... right 从右边向指定的键中添加1个或多个元素
lpop 键 从左边删除一个元素,返回被删除的元素
rpop 键 从右边删除一个元素,返回被删除的元素
lrange 键 开始 结束 得到键中指定范围的元素的数据 每个元素都有一个索引号,从左向右0~n 从右向左索引号:-1~-(n+1),每个元素有2个索引号 如果要取出整个列表中所有的元素,索引号应该是:0~-1
lindex 键 索引值 查询指定索引的元素
llen 键 获取列表的长度
BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止,超时时间单位默认是秒
LREM key 删除元素个数 value值 从表头删除指定个数的元素

list的图示:

list的常用场景:

1.常用于点赞系列

2.list类型的lrange命令可以分页查看队列中的数据。可将每隔一段时间计算一次的排行榜存储在list类型中,如京东每日的手机销量排行、学校每次月考学生的成绩排名等

四:value的第四种数据类型:set

在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。Set可包含的最大元素数量是4G,和List类型不同的是,Set集合中不允许出现重复的元素。

set常用命令:

命令 行为
sadd 键 元素 元素... 向一个键中添加1个或多个元素
smembers 键 得到这个集合中所有的元素
sismember 键 元素 判断指定的元素在集合中是否存在,存在返回1,不存在返回0
srem 键 元素 元素... 通过键删除一个或多个元素
sinter key1 [key2] 返回给定所有集合的交集(集合中都共有的部分)

set常用场景:

1.存入一列数据,自动去重,且不需要排序,可以用来做身份证信息、手机号码等作为黑名单|白名单

2.因为是无序的,所以可以用来做抽奖系统

3.共同好友查询,使用set

五:value的第五种数据类型:zset

Redis 有序集合(sorted set)和set集合一样也是无序不可以重复。不同的是每个元素都会关联一个分数(排序因子)。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复,每个集合可存储40多亿个成员。


zset的常用命令:

命令 行为
zadd 分数 分数 添加1个或多个元素,每个元素都有一个分数
zrange 开始索引 结束索引 获取指定范围的元素,得到所有的元素,索引是0到-1
zrange 键 开始索引 结束索引 withscores 查询指定的元素和对应的分数
zrevrange 键 开始索引 结束索引 withscores 按照分数倒叙获取指定的元素和对应的分数
zrem 键 值 值 删除一个或多个值
zcard 得到元素个数
zrank 得到元素的索引号
zscore 键 值 得到元素的分数

zset的图示:

zset的常用场景:

因为通过分数来排序,故可以用来点赞排名,或者新浪微博热搜排名等

六:Redis的其他操作

以下操作命令也可以用来操作redis的其他操作,如下:

命令 功能
keys 匹配字符 查询所有的键,可以使用通配符 * 匹配多个字符 ? 匹配1个字符
del 键1 键2 删除任何的值类型,而且可以同时删除多个键
exists 判断指定的键是否存在,不存在返回0 存在返回1
type 判断指定的键,值的类型。返回是类型的名字
select 数据库编号 选择其它的数据库
move 数据库编号 将当前数据库中指定的键移动到另一个数据库中
TTL key 返回给定 key 的剩余生存时间(TTL, time to live),以秒为单位 从Redis2.8开始:如果key不存在或者已过期,返回-2;如果key存在并且没有设置过期时间(永久有效),返回-1
flushall redis的flushall命令用来清空redis所有的库,测试可以使用,开发中最好不要用。

因此,基于以上的一些命令是操作redis的基础命令,同时redistribution,还具有以下优点

1. 高性能: Redis是基于内存的存储系统,读写速度非常快,可以达到数十万次/秒的读写性能。

2. 数据持久化: Redis支持数据持久化,可以将数据保存到磁盘上,以防止系统重启或崩溃时数据丢失。

3. 支持多种数据结构: Redis支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等,方便存储不同类型的数据。

4. 分布式: Redis支持分布式部署,可以将数据分布在多个节点上,提高系统的扩展性和负载均衡能力。

5. 支持事务: Redis支持事务操作,可以将多个操作放在一个事务中进行,保证操作的原子性。

6. 发布订阅: Redis支持发布-订阅模式,可以实现消息的发布和订阅,方便实现实时通信和消息传递。

7. 简单易用: Redis具有简单的命令和丰富的客户端库,使用起来非常方便。

8. 社区活跃: Redis拥有庞大的开源社区,有很多的第三方库和工具可以使用,可以快速解决问题。  

相关文章
|
JSON NoSQL Redis
|
1月前
|
存储 缓存 NoSQL
Redis系列
Redis系列
|
5月前
|
存储 NoSQL 网络安全
Redis
Redis
35 0
|
存储 NoSQL Java
Redis3
Redis3
53 0
|
缓存 NoSQL 关系型数据库
|
缓存 NoSQL 关系型数据库
redis-1
redis-1
42 0
|
存储 消息中间件 NoSQL
什么是Redis?
redis是一个高性能的key-value数据库。
75 0
|
NoSQL Java Redis
Redis4
Redis4
42 0
|
NoSQL 安全 Redis
Redis7
Redis7
|
存储 缓存 监控