首页 > 数据库 >redis数据类型篇

redis数据类型篇

时间:2022-08-17 16:12:55浏览次数:55  
标签:127.0 0.1 数据类型 redis 6379 key integer

查看库下有多少个key

127.0.0.1:6379> dbsize
(integer) 4

查询redis库信息

redis没有类似于select database();这样的查询方式

且redis的数据库数量一般默认是16个,在配置文件中定义。

127.0.0.1:6379> config get databases
1) "databases"
2) "16"


#列出库与key的信息
# Keyspace
db0:keys=1405362,expires=7,avg_ttl=1748492
db1:keys=3839,expires=3835,avg_ttl=39910630

# 或者用如下命令
[root@db-51 ~]#redis-cli info |grep ^db
db0:keys=4,expires=0,avg_ttl=0

切换redis库

语法
127.0.0.1:6379> SELECT index


默认是16个,0~15号库

127.0.0.1:6379> select 0
OK
127.0.0.1:6379> dbsize
(integer) 4
127.0.0.1:6379> select 17
(error) ERR DB index is out of range
127.0.0.1:6379> select 16
(error) ERR DB index is out of range
127.0.0.1:6379> select 15
OK
127.0.0.1:6379[15]> 
127.0.0.1:6379[15]> dbsize
(integer) 0
127.0.0.1:6379[15]>

查看key是否存在

127.0.0.1:6379> EXISTS key [key ...]

语法
exists key_name

127.0.0.1:6379> EXISTS name
(integer) 1
127.0.0.1:6379> EXISTS name1
(integer) 0

0 没这key
1 有这key

支持查找多个
返回的值表示找到了几个

127.0.0.1:6379> EXISTS k1 k2 name 1 2 3 4
(integer) 3

删除key

[root@db-51 ~]#redis-cli 
127.0.0.1:6379> DEL key [key ...]


del key_name
删除多个key
del k1 k2 k3

删除了2个key
127.0.0.1:6379> del k1 k2
(integer) 2

一个都没找到
127.0.0.1:6379> del k1 k2
(integer) 0

key过期设置

设置一个key,默认没过期时间

127.0.0.1:6379> set name yuchao [expiration EX seconds|PX milliseconds] [NX|XX]

查看过期时间

127.0.0.1:6379> TTL name
(integer) -1


-1   表示key存在,永不过期
-2     表示key不存在

N    表示key还剩下N秒

127.0.0.1:6379> EXPIRE name 20
(integer) 1
127.0.0.1:6379> TTL name
(integer) 15
127.0.0.1:6379> TTL name
(integer) 11

key过期是非常实用,用的非常多的场景,你想想,你用的各类APP,有哪些地方遇见限时倒计时的,都是这个特性。

如限时给你发24小时的优惠券,到期自动删除。

取消过期时间

1.重新设置set
127.0.0.1:6379> set name omg
OK
127.0.0.1:6379> TTL name 
(integer) -1
127.0.0.1:6379> 

2.方法2
127.0.0.1:6379> expire name 100
(integer) 1
127.0.0.1:6379> TTL name 
(integer) 98
127.0.0.1:6379> PERSIST name
(integer) 1
127.0.0.1:6379> TTL name 
(integer) -1
127.0.0.1:6379> 

字符串类型

首先对redis来说,所有的key(键)都是字符串。

我们在谈基础数据结构时,讨论的是存储值的数据类型

主要包括常见的5种数据类型,分别是:String、List、Set、Zset、Hash


内容其实比较简单,我觉得理解的重点在于这个结构怎么用,能够用来做什么?

所以我在梳理时,围绕图例,命令,执行和场景来阐述。

如果查看内容中包含中文,会显示16进制的字符串”\xe4\xb8\xad\xe5\x9b\xbd”

可以用如下方法查询中文的值

[root@db-51 ~]#redis-cli --raw mget name address hobby
www.yuchaoit.cn
北京
看美女

字符串相关的命令

string实践

127.0.0.1:6379> set LOL JJ
OK
127.0.0.1:6379> get LOL
"JJ"
127.0.0.1:6379>
 一次性设置多个key,mset命令
127.0.0.1:6379> mset k1 v1  k2 v2  k3 v3
OK
# 查看多个key的值
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
# 天然计数器
# 从0开始,每次+1,如点赞、评论,阅读量,都可以用该功能
127.0.0.1:6379> set counter 0
OK
127.0.0.1:6379> get counter
"0"
127.0.0.1:6379> INCR counter
(integer) 1
127.0.0.1:6379> INCR counter
(integer) 2
127.0.0.1:6379> get counter
"2"
127.0.0.1:6379> 
# decr 指令实现值-1
127.0.0.1:6379> get counter
"2"
127.0.0.1:6379> decr counter
(integer) 1
127.0.0.1:6379> decr counter
(integer) 0
127.0.0.1:6379> get counter
"0"
127.0.0.1:6379> 

# 值增加 指定数字
# 计数器刷到2002
127.0.0.1:6379>  INCRBY counter 2000
(integer) 2000
127.0.0.1:6379> get counter
"2000"
# 减去指定的数字
# 计数器要减去500
127.0.0.1:6379> DECRBY counter 500
(integer) 1502
127.0.0.1:6379> get counter
"1502"

String企业级使用场景

1. 数据缓存
经典用法,把经常要读取的如mysql里的url、字符串、音视频等字符串信息,存储到redis里。
redis作为缓存层,加速数据读取,mysql作为数据持久化层,降低mysql的访问压力。

提示:音视频等信息存储在mysql里,一般存储的是如url,或者路径,便于查找访问。
而非直接存储二进制数据,并不合适。


2.计数器
redis是单线程模式,一个命令结束才会执行下一个命令,因此可以实现计数器的作用,确保多进程访问redis的数据,也能确保数据源正确性。
(使用场景,如微博的博文阅读量,你可以理解为你可以直接修改key的值,修改阅读量为99999)


3.用作网站用户的登录会话存储
存储session,或者token等信息

3.列表List

使用List结构,我们可以轻松地实现最新消息排队功能(比如新浪微博的TimeLine)。

网上有教程,说是如访问
https://weibo.com/?is_search=1

添加该参数,可以访问最新微博消息,而非系统给你推荐的,如几天之前的新闻。
该功能代码实现,就是基于如redis的list数据类型,实现的新博文排队,可以获取最新的博文数据


使用列表的技巧

- lpush+lpop=Stack(栈)
- lpush+rpop=Queue(队列)
- lpush+ltrim=Capped Collection(有限集合)
- lpush+brpop=Message Queue(消息队列)

list实践

# 从左边压入数据
127.0.0.1:6379> lpush kings ludan
(integer) 1
127.0.0.1:6379> lpush kings yingzheng
(integer) 2
127.0.0.1:6379> LRANGE kings 0 1
1) "yingzheng"
2) "ludan"
127.0.0.1:6379> 

##rpush右边压入数据
127.0.0.1:6379> rpush kings shouyue
(integer) 3
127.0.0.1:6379> rpush kings lvbu
(integer) 4
127.0.0.1:6379> LRANGE kings 0 3
1) "yingzheng"
2) "ludan"
3) "shouyue"
4) "lvbu"
127.0.0.1:6379> 
# 遍历取出列表的值,从头,取到尾
127.0.0.1:6379> LRANGE kings 0 -1
1) "yingzheng"
2) "ludan"
3) "shouyue"
4) "lvbu"
127.0.0.1:6379> 

删除list元素

RPOP    从列表的右端弹出一个值,并返回被弹出的值    RPOP key

LPOP    从列表的左端弹出一个值,并返回被弹出的值    LPOP key

指定索引获取值

# 获取第一个元素
[root@db-51 ~]#redis-cli --raw lindex mylist3 0
b

# 获取最后一个元素
[root@db-51 ~]#redis-cli --raw lindex mylist3 -1
3

# 获取出字母 e
[root@db-51 ~]#redis-cli --raw lindex mylist3 3
e

删除列表整个key


del key

生产应用场景

微博,知乎等博文的timeline
用户发表的文章,用lpush加入时间轴,微博最新的文章列表。
订单系统、物流系统的消息队列
生产消费者,订单生成,订单处理

4.集合set

Redis 的 Set 是 String 类型的无序集合。

集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

set创建

127.0.0.1:6379> sadd linux laoliu laoda laoer laosan
(integer) 3
127.0.0.1:6379> SMEMBERS
(error) ERR wrong number of arguments for 'smembers' command
#查看成
127.0.0.1:6379> SMEMBERS linux
1) "laosan"
2) "laoliu"
3) "laoer"
4) "laoda"
127.0.0.1:6379>

标签:127.0,0.1,数据类型,redis,6379,key,integer
From: https://www.cnblogs.com/huquchangzhen/p/16595562.html

相关文章

  • 使用 Canal 和 Kafka 与 RDS MySQL 进行 Redis 数据同步
    教程:https://www.alibabacloud.com/blog/redis-data-synchronization-with-rds-mysql-using-canal-%26-kafka_598072源码:https://github.com/alibabacloud-howto/soluti......
  • 【Java基础】8种基础数据类型和String类型
    变量必须先声明,后使用1.变量分类(1)按数据类型分(2)按声明的位置分2.基本数据类型和String类型(1)整型整型占用存储空间byte1字节=8bitshort2字节int4......
  • Redis Desktop Manager for Mac(Redis可视化工具) v2021.10.236中文版
    mac软件下载:https://mac.macsc.com/mac/2697.html?id=MzI1OTY2 RedisDesktopManagermac版是一个快速、简单、支持跨平台的RedisDB管理工具,专为Mac用户设计,基于Qt5......
  • redis hash
    在redis的value中以键值对存储数据  hsethashnamexage18addresshefei插入元素hgethashname输出元素"x"hgethashage"18"hgethashaddress"......
  • redis set
    Set类型Set集合元素无序 无序指添加key中的value无序不可以重复  常用命令saddset12345 输入smembersset 输出每次结果可能不一样 对应set无序......
  • SpringBoot连接redis报错:exception is io.lettuce.core.RedisException: java.io.IOE
    一、解决思路(1).检查redis的配置是否正确springredis:host:localhostport:6379password:123456database:0......
  • Redis安装及常用配置
    Redis安装说明大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis.此处选择的Linux版本......
  • Redission
    Redisson的原理分布式锁可能存在锁过期释放,业务没执行完的问题。有些人认为,稍微把锁过期时间设置长一些就可以啦。其实我们设想一下,是否可以给获得锁的线程,开启......
  • 链接redis无权限问题
    docker启动redis,redis.conf中设置了"requirepass123456",但是不想改动配置。因此访问docker:dockerexec-itredisXXXX/bin/sh在/usr/local/bin下找到redis-cli命令,./r......
  • redis配置文件说明
    #Redis配置文件样例#Noteonunits:whenmemorysizeisneeded,itispossibletospecifiy#itintheusualformof1k5GB4Mandsoforth:##1k=>1000bytes......