查看库下有多少个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