【Redis高手养成系列一】常用key、数据类型及相关命令

什么是Redis?

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

Redis的优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子性 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis键(Key)

Redis 键命令用于管理 redis 的键。
在Redis中,key命令是不区分大小写的,但是key对应的value是区分大小写的。
exp:
在这里插入图片描述
两条指令执行,得到的是两条不一样的数据

语法

Redis 键命令的基本语法如下: (命令 key [value])

redis 127.0.0.1:6379> COMMAND KEY_NAME

实例

redis 127.0.0.1:6379> SET key1 redis
OK
redis 127.0.0.1:6379> DEL key1
(integer) 1

常用Key
  • key* 查看当前库所有的key (但实际生产中禁止使用,keys * 容易引起阻塞)
  • exists key 判断某个key是否存在
  • type key 查看某个key的数据类型
  • del key 删除指定的key数据(数据量大时,也容易引起阻塞)
  • unlink key 删除指定的key(s)。相比DEL会产生阻塞,该命令会在另一个线程中回收内存,因此它是非阻塞的仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作
  • ttl key 查看还有多少秒过期,-1 表示永不过期 -2表示已经过期
  • expire key seconds 为指定的key设置过期时间,以妙计
  • pexpire key millseconds 为指定的key设置过期时间,以微妙计
  • move key db值 将当前库的key 移到给定的数据库【0-15】
  • dump key 序列化给定 key ,并返回被序列化的值。
  • select db值 切换数据库【0-15】,默认数据库为0
    那么如何查看当前数据库?
    在这里插入图片描述
    查看客户端的下标值,默认0不显示,其他数值表示当前库是对应的数值
  • dbsize 查看当前数据库key的数量
  • flushdb 清空当前数据库数据(实际生产中禁止使用)
  • flushall 清楚所有数据(实际生产中禁止使用)
  • help @数据类型 查看该数据类型的命令手册

Redis的数据类型

Redis的数据类型包含8种类型:String(字符串)Hash(哈希)List(列表)Set(集合)Zset(Sorted Set:有序集合)HyperLogLog(基数统计)BitMap (位图)`和 Geospatial (地理位置)

数据类型简介特性使用场景
String字符串可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M1. 分布式锁
2.抖音点赞数(点下加1)
Hash哈希(字典),键值对集合,即编程语言中的Map类型适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去)存储、读取、修改用户属性
List链表(双向链表)增删快,提供了操作某一段元素的API1. 最新消息排行等功能(比如朋友圈的时间线)
2. 消息队列
Set哈希表实现,元素不重复1.添加、删除,查找的复杂度都是O(1)
2.为集合提供了求交集、并集、差集等操作
1. 共同好友
2. 利用唯一性,统计访问网站的所有独立ip
3.好友推荐时,根据tag求交集,大于某个阈值就可以推荐
Sorted Set(zset)将Set中的元素增加一个权重参数score,元素按score有序排列数据插入集合时,已经进行天然排序1、排行榜
2、带权重的消息队列

String(字符串)类型

string 是 Redis 最基本的类型,一个 key 对应一个 value。
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
string 类型的值最大能存储 512MB。

Redis String(字符串)常用命令
序号命令及描述
1get key
获取指定 key 的值
2set key value [nx/ex]
设置指定 key 的值
3setnx key value
只有在 key 不存在时设置 key 的值
4setex key seconds value
将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)
5mset key value key2 value…
同时设置一个或多个 key-value 对
6mget key key2
获取所有(一个或多个)给定 key 的值
7msetnx key value
同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在
8getset key value
将给定 key 的值设为 value ,并返回 key 的旧值(old value)
9append key value
如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾
10decr key
将 key 中储存的数字值减一
11incr key
将 key 中储存的数字值增一
12decrby key decrement
key 所储存的值减去给定的减量值(decrement)
13incrby key increment
将 key 所储存的值加上给定的增量值(increment)
14strlen key
返回 key 所储存的字符串值的长度
15getbit key offset
对 key 所储存的字符串值,获取指定偏移量上的位(bit)
16setbit key offset value
对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)
17getrange key start end
返回 key 中字符串值的子字符
应用场景

1、缓存功能:String字符串是最常用的数据类型,不仅仅是redis,各个语言都是最基本类型,因此,利用redis作为缓存,配合其它数据库作为存储层,利用redis支持高并发的特点,可以大大加快系统的读写速度、以及降低后端数据库的压力。
2、计数器:许多系统都会使用redis作为系统的实时计数器,可以快速实现计数和查询的功能。而且最终的数据结果可以按照特定的时间落地到数据库或者其它存储介质当中进行永久保存。
3、共享用户session:用户重新刷新一次界面,可能需要访问一下数据进行重新登录,或者访问页面缓存cookie,但是可以利用redis将用户的session集中管理,在这种模式只需要保证redis的高可用,每次用户session的更新和获取都可以快速完成。大大提高效率。
4、分布式锁 setnx key value,当key不存在时,将key 的值设为 value ,返回1;若给定的 key 已经存在,则setnx不做任何动作,返回0。当setnx返回1时,表示获取锁,做完操作以后del key,表示释放锁;如果setnx返回0表示获取锁失败,可以通过以上的思路来实现分布式锁的机制。

List (列表)类型

List 列表用于存储多个有序的字符串。可以充当栈和队列的角色。
在这里插入图片描述
一个列表最多可以包含 2 32 2^{32} 232- 1 个元素 (4294967295, 每个列表超过40亿个元素)。
List是一个双端列表结构,对两端的操作性能很高,但是通过索引下标操作中间节点性能较差。
在这里插入图片描述
List的值如果全部移除,那么对应的key也就消失了。

Redis List(列表) 常用命令
序号命令及描述
1lpush key value1 [value2…]
将一个或多个值插入到列表头部
2rpush key value [value2…]
在列表中添加一个或多个值到列表尾部
3lrange key start stop
获取列表指定范围内的元素
4lpop key <br移出并获取列表的第一个元素
5rpop key
移除列表的最后一个元素,返回值为移除的元素。
6lindex key index
通过索引获取列表中的元素
7llen key
获取列表长度
8lrem key count value
移除列表元素(删除count个值等于value的元素)
9ltrim key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
10rpoplpush 源列表 目的列表
移除列表的最后一个元素,并将该元素添加到另一个列表并返回
11lset key index value
通过索引设置列表元素的值
12linsert key before/after 已有值 新插入的值
在列表的元素前或者后插入元素
应用场景
  1. 微信公众号订阅的消息
  2. 消息队列:reids的链表结构,可以轻松实现阻塞队列,可以使用左进右出的命令组成来完成队列的设计。比如:数据的生产者可以通过Lpush命令从左边插入数据,多个数据消费者,可以使用BRpop命令阻塞的“抢”列表尾部的数据。
  3. 文章列表或者数据分页展示的应用。比如,我们常用的博客网站的文章列表,当用户量越来越多时,而且每一个用户都有自己的文章列表,而且当文章多时,都需要分页展示,这时可以考虑使用redis的列表,列表不但有序同时还支持按照范围内获取元素,可以完美解决分页查询功能。大大提高查询效率。

Hash 哈希类型

Redis的Hash是字符串类型的字段和字符串类型的值之间的映射,所以Hash是用于表示对象的完美数据类型(比如表示拥有名字、姓、年龄等的用户)
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
Redis 中每个 hash 可以存储 2 32 2^{32} 232 - 1 键值对(40多亿)。

Redis hash(哈希) 常用命令
序号命令及描述
1hset key field value
将哈希表 key 中的字段 field 的值设为 value
2hget key field
获取存储在哈希表中指定字段的值
3hmset key field value [field2 value2]
同时将多个 field-value (域-值)对设置到哈希表 key 中
4hmget key filed [field2]
获取所有给定字段的值
5hgetall key
获取在哈希表中指定 key 的所有字段和值
6hdel key
删除一个或多个哈希表字段
7hlen key
获取哈希表中字段的数量
8hexists key field
查看哈希表 key 中,指定的字段是否存在
9hkeys key
获取哈希表中的所有字段
10hvals key
获取哈希表中所有值
11hsetnx key field value
只有在字段 field 不存在时,设置哈希表字段的值
12hincrby key field increment
为哈希表 key 中的指定字段的整数值加上增量 increment
应用场景
  1. JD早期购物车,目前中小厂可用
    在这里插入图片描述

  2. 存储对象

Set (集合)类型

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
集合对象的编码可以是 intset 或者 hashtable。
Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 2 32 2^{32} 232- 1 (4294967295, 每个集合可存储40多亿个成员)。

Redis Set(集合) 常用命令
序号命令及描述
1sadd key value1 [value2]
向集合添加一个或多个成员
2smembers key
返回集合中的所有成员
3sismember key value
判断 member 元素是否是集合 key 的成员
4srem key value [value2]
移除集合中一个或多个成员
5scard key
获取集合的成员数
6srandmember key [count]
返回集合中一个或多个随机数
7spop key
移除并返回集合中的一个随机元素
8smove source destination member
将 member 元素从 source 集合移动到 destination 集合
9sdiff key [key2]
求两个集合的差集A-B(属于A但是不属于B)
10sinsert key [key2]
返回给定所有集合的交集(同时属于AB部分)
11sunion key [key2]
返回所有给定集合的并集(属于A或者属于B集合)
12sinsertcard numberkeys key [key2] [limit count]
redis7新特性,不返回结果集,而只返回交集产生的结果集的基数
应用场景

1、标签。比如我们博客网站常常使用到的兴趣标签,把一个个有着相同爱好,关注类似内容的用户利用一个标签把他们进行归并。
2、共同好友功能,共同喜好,或者可以引申到二度好友之类的扩展应用。
3、统计网站的独立IP。利用set集合当中元素不唯一性,可以快速实时统计访问网站的独立IP。
4、微信抽奖小程序,srandmember 或者spop 随机抽取多名幸运观众

Zset (sorted set 有序集合)类型

Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复
集合是通过哈希表实现的,集合中最大的成员数为 2 32 2^{32} 232- 1 (4294967295, 每个集合可存储40多亿个成员)。

Redis Zset(有序集合) 常用命令
序号命令及描述
1zadd key score value1 [score2 value2]
向有序集合添加一个或多个成员,或者更新已存在成员的分数
2zrange key start stop [WITHSCORES]
通过索引区间返回有序集合指定区间内的成员
3zrevrange key start stop [WITHSCORES]
返回有序集中指定区间内的成员,通过索引,分数从高到低
4zrangebyscore key min max [WITHSCORES] [LIMIT]
通过分数返回有序集合指定区间内的成员
5zscore key member
返回有序集中,成员的分数值
6zcard key
获取有序集合的成员数
7zrem key [key2]
移除有序集合中的一个或多个成员
8zincrby key increment member
有序集合中对指定成员的分数加上增量 increment
9zcount key min max
计算在有序集合中指定区间分数的成员数
应用场景

1.排行榜:积分排行榜,按得分排名。
2.任务队列:优先处理任务,按处理时间排序。
3.范围搜索:商城商品价格筛选,按价格范围获取商品列表。
4.社交网络:根据用户关注度排序,按用户ID排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值