常见的Redis命令

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: redis一共有五种数据类型,String、list、set、hash、zset

String

127.0.0.1:7000> set name 12    设置name=12
OK
127.0.0.1:7000> get name     或者key为name的value
"12"
127.0.0.1:7000> expire name 10   设置name的过期时间为10s  单位:秒
(integer) 1
127.0.0.1:7000> ttl name    查看name的过期时间  
(integer) 8
127.0.0.1:7000> ttl name    查看name的过期时间  -2代表已经过期
(integer) -2
127.0.0.1:7000> ttl name
(integer) -2
127.0.0.1:7000> setex gender 10 man   设置gender的值为man,过期时间为10秒
OK
127.0.0.1:7000> ttl gender  查看gender的过期时间
(integer) 1
127.0.0.1:7000> setnx gender man   设置gender的值,如果gender不存在,为man,存在则不修改
(integer) 1
127.0.0.1:7000> setnx gender woman     gender已经存在,发现执行结果为0,执行不成功
(integer) 0
127.0.0.1:7000> get gender    获得gender的值
"man"
127.0.0.1:7000> mset name ma age 22 gender man  批量设置key
OK
127.0.0.1:7000> mget name age gender   批量获取key
1) "ma"
2) "22"
3) "man"

应用场景


1.记录用户的播放量,点赞数,订阅人数等 可以用incr命令使其加1,也可以使用incrby命令,来指定加几;redis中操作是原子性的,不存在并发问题。(举个例子:三个人得到num的是2,同时进行加1操作,最终的结果一定是5)


2.用来存放json数据。将java对象转化为json数据,存放到redis中,需要时从缓存中取出来,再转化为java对象。


3.可以用来存放图片。


4.用来做缓存,可以将一些基础数据,不经常修改的存放在缓存中,减少数据库的访问压力。


5.验证码,登录次数限制等,为String类型的key设置过期时间,用来保存验证码;为key设置自增和过期时间,记录用户输入密码错误的次数,达到一定次数时,限制登录,过期后,可以继续登录。


注意事项


redis中String类型的最大存储空间是512MB。


list

127.0.0.1:7000> lpush name zhangsan lisi wangwu zhaoliu  从左边存入名字为name的list中
(integer) 4
127.0.0.1:7000> lrange name 0 -1  获得name中的全部数据  注意`数据排序`
1) "zhaoliu"
2) "wangwu"
3) "lisi"
4) "zhangsan"
127.0.0.1:7000> rpush name jiuba 从右边push进去
(integer) 5
127.0.0.1:7000> lrange name 0 -1  获取name中的全部数值
1) "zhaoliu"
2) "wangwu"
3) "lisi"
4) "zhangsan"
5) "jiuba"
127.0.0.1:7000> lpop name  从左边弹出一个值
"zhaoliu"
127.0.0.1:7000> rpop name  从右边弹出一个值
"jiuba"
127.0.0.1:7000> lrange name 0 1 获取name集合中下表为0-1`(含头含尾)`的元素值
1) "wangwu"
2) "lisi"
127.0.0.1:7000> lpush name zhangsan zhangsan zhangsan 存入三个zhangsan 发现list可以存重复的值
(integer) 6
127.0.0.1:7000> lrem name 1 zhangsan   移除一个zhangsan 
(integer) 1
127.0.0.1:7000> lrange name 0 -1 查看name集合
1) "zhangsan"
2) "zhangsan"
3) "wangwu"
4) "lisi"
5) "zhangsan"
127.0.0.1:7000> lrem name 0 zhangsan  0-表示移除name集合中所有的zhangsan
(integer) 3
127.0.0.1:7000> lrange name 0 -1 查看name集合
1) "wangwu"
2) "lisi"
127.0.0.1:7000> lset name 0 zhangsan  修改name集合中角标为0的元素的值
OK
127.0.0.1:7000> lrange name 0 -1  查看name集合中的所有元素
1) "zhangsan"
2) "lisi"
127.0.0.1:7000> rpushx age 1   如果age集合存在,则从右边放入一个值
(integer) 0                     执行结果为0,发现没有存入
127.0.0.1:7000> rpushx name zhaoliu     如果name集合存在,则从右边放入一个值
(integer) 3

应用场景


1.消息队列,list集合可以实现先进先出的功能,可以用来做消息队列。


2.记录消息的先后数据,也是队列的数据结构。


HASH

127.0.0.1:7000> hset user:1 name lisi    设置user:1 的name为lisi
(integer) 1
127.0.0.1:7000> hget user:1 name      获得user:1的name值
"lisi"
127.0.0.1:7000> hmset user:1 age 22 gender man hobby java  批量设置user:1的值
OK
127.0.0.1:7000> hmget user:1 name age gender hobby     批量获取
1) "lisi"
2) "22"
3) "man"
4) "java"
127.0.0.1:7000> hsetnx user:1 name zhangsan    如果user:1 的name值不存在则设置为zhangsan
(integer) 0
127.0.0.1:7000> hget user:1 name        获得name的值,发现没有设置成功
"lisi"
127.0.0.1:7000> hincrby user:1 age -2  对user:1中的age进行加法操作
(integer) 20
127.0.0.1:7000> hgetall user:1   获得user:1的全部值
1) "name"
2) "lisi"
3) "age"
4) "20"
5) "gender"
6) "man"
7) "hobby"
8) "java"

应用场景


1.用来存放用户的信息,user:1可以用来作为id为1的user对象,里面的各个key为他的属性,value为他的值。这样的好处可以解决两个弊端:


(1)如果用String类型来存贮,将user整个序列化来进行存贮,则读取的使用又要反序列化浪费性能。如果高并发来进行修改时,还会出现问题,虽然redis是原子性的,但是序列化和反序列并不是在redis中进行的操作。


(2)如果用用户+属性名的拼接来进行String类型的存贮,虽然可以避免高并发下的修改问题,但是如果一个用户有很多属性,就要创建大量的key,这样又会造成大量的内存占用,造成性能低下。

hash类型的出现,很好的解决了上面的两种问题。


Set


Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。


集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。

127.0.0.1:7000> sadd name zhangsan   在name集合中添加zhangsan
(integer) 1
127.0.0.1:7000> sadd name lisi wangwu  批量添加lisi  wangwu
(integer) 2
127.0.0.1:7000> smembers name  获取name集合中的全部值
1) "wangwu"
2) "zhangsan"
3) "lisi"
127.0.0.1:7000> sadd name zhangsan  向name集合中添加已经存在的值zhangsan
(integer) 0             结果为0,添加失败
127.0.0.1:7000> smembers name        获取name集合中的全部值
1) "wangwu"
2) "zhangsan"
3) "lisi"
127.0.0.1:7000> scard name  获取name中的成员数
(integer) 3
127.0.0.1:7000> sadd name2 lisi  创建一个name2的集合
(integer) 1
127.0.0.1:7000> sdiff name name2  返回name与name2中的不同
1) "zhangsan"
2) "wangwu"
127.0.0.1:7000> sdiffstore difname name name2  将name与name2的不同存放到difname中
(integer) 2
127.0.0.1:7000> smembers difname  获取difname中的值
1) "zhangsan"
2) "wangwu"
127.0.0.1:7000> spop name   移除并返回name中的随机一个元素
"lisi"
127.0.0.1:7000> smembers name    
1) "wangwu"
2) "zhangsan"
127.0.0.1:7000> srandmember name  随机返回name中的一个元素 
"zhangsan"
127.0.0.1:7000> srandmember name  随机返回name中的一个元素
"wangwu"
127.0.0.1:7000> srandmember name  2  随机返回name中的两个元素
1) "zhangsan"
2) "wangwu"
127.0.0.1:7000> srem name lisi  移除name中的lisi
(integer) 0
127.0.0.1:7000> srem name wangwu zhangsan  移除name中的wangwu和zhangsan
(integer) 2
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
NoSQL Java Redis
分布式锁实现原理问题之使用Redis的setNx命令来实现分布式锁问题如何解决
分布式锁实现原理问题之使用Redis的setNx命令来实现分布式锁问题如何解决
|
2天前
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
8 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
|
20天前
|
监控 NoSQL Redis
redis-server --service-install redis.windows.conf --loglevel verbose 命令的作用是什么?
redis-server --service-install redis.windows.conf --loglevel verbose 命令的作用是什么?
29 3
|
10天前
|
存储 缓存 NoSQL
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
24 0
|
2月前
|
存储 消息中间件 NoSQL
Redis命令详解以及存储原理
Redis命令详解以及存储原理
|
3月前
|
存储 缓存 NoSQL
Redis 全局通用命令整理
Redis 全局通用命令整理
60 10
|
2月前
|
SQL 缓存 NoSQL
【Azure Redis 缓存】使用Azure Redis服务时候,如突然遇见异常,遇见命令Timeout performing SET xxxxxx等情况,如何第一时间查看是否有Failover存在呢?
【Azure Redis 缓存】使用Azure Redis服务时候,如突然遇见异常,遇见命令Timeout performing SET xxxxxx等情况,如何第一时间查看是否有Failover存在呢?
|
2月前
|
缓存 监控 NoSQL
【Azure Redis 缓存】Azure Redis出现了超时问题后,记录一步一步的排查出异常的客户端连接和所执行命令的步骤
【Azure Redis 缓存】Azure Redis出现了超时问题后,记录一步一步的排查出异常的客户端连接和所执行命令的步骤
|
3月前
|
存储 JSON NoSQL
Redis常见命令大全
【7月更文挑战第30天】
22 3
|
2月前
|
缓存 NoSQL 测试技术
【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能
【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能