redis常用命令

本文详细介绍了Redis中的五种基本数据类型:String、Hash、List、Set和Sorted Set,以及它们在实际应用中的场景。例如,String用于计数器和存储用户信息,Hash适合频繁修改的对象存储,List常用于用户收藏,Set支持集合操作,Sorted Set适用于实时排序。此外,还讲解了Redis的全局命令、安全性设置和事务操作。通过对这些内容的理解,读者可以更好地利用Redis进行数据存储和管理。

1.String类型

String类型相当于Map<String,String> map,他的用处可以存储序列化的对象还有存储图片的二进制类型的数据。

目前已知的实际应用有计数器:如视频播放数

还有可以在负载均衡设计里面存储用户对象的信息。

 127.0.0.1:6379> set name dafei
 OK
 127.0.0.1:6379> get name
 "dafei"
 127.0.0.1:6379> del name
 (integer) 1
 127.0.0.1:6379> get name
 (nil)
 127.0.0.1:6379> set age 12
 OK
 127.0.0.1:6379> incr age//+1
 (integer) 13
 127.0.0.1:6379> decr age//-1
 (integer) 12
 127.0.0.1:6379> setex age 100 20//设置过期时间
 OK
 127.0.0.1:6379> ttl age//查看里过期时间还有多久
 (integer) 95
 127.0.0.1:6379> setnx name dafei
 (integer) 1
 127.0.0.1:6379> setnx age 23//判断是否存在,存在则不插入
 (integer) 0
 127.0.0.1:6379>

2.hash类型

hash类型有点类似Map<String,<String,Object>> map,hash类型与String类型都可以存储对象,但是建议查询频繁使用String,修改频繁使用hash,而且相对而言hash比String类型占内存空间比较小

 127.0.0.1:6379> hset person name zhangsan//设置值
 (integer) 1
 127.0.0.1:6379> hset person age 18
 (integer) 1
 127.0.0.1:6379> hset person sex nan
 (integer) 1
 127.0.0.1:6379> hget person//hget只能取一个属性的值,不能取对象
 (error) ERR wrong number of arguments for 'hget' command
 127.0.0.1:6379> hget person sex
 "nan"
 127.0.0.1:6379> hgetall person//查询全部key和val
 1) "name"
 2) "zhangsan"
 3) "age"
 4) "18"
 5) "sex"
 6) "nan"
 127.0.0.1:6379> hexists person sex//判断属性是否存在
 (integer) 1
 127.0.0.1:6379> hdel person sex//删除属性
 (integer) 1
 127.0.0.1:6379> hincrby person age 1//使属性值增加多少
 (integer) 19
 127.0.0.1:6379> hlen person//查询key有多少个属性
 (integer) 2
 127.0.0.1:6379> hkeys person//查询所有key
 1) "name"
 2) "age"
 127.0.0.1:6379> hvals person//查询所有value
 1) "zhangsan"
 2) "19"

3.list类型

redis的list类型其实跟java的list也不太一样,java的list可以从任意位置取出来存储进去,但是Redis只允许从左边存取或者从右边存储

更加像java的双向队列。

应用场景就是用户收藏文章。

添加数据:rpush,lpush

显示数据:lrange

弹出数据:lpop,rpop

获取列表长度:llen

 127.0.0.1:6379> lpush code java c ++ python//左边存进去
 (integer) 4
 127.0.0.1:6379> lrange code 0 -1//查询所有,从左到右0开始,从右到左-1开始,所以0 -1包含所有
 1) "python"
 2) "++"
 3) "c"
 4) "java"
 127.0.0.1:6379> rpush code c#//右边存储进去
 (integer) 5
 127.0.0.1:6379> lrange code 0 -1
 1) "python"
 2) "++"
 3) "c"
 4) "java"
 5) "c#"
 127.0.0.1:6379> llen code//查询长度
 (integer) 5
 127.0.0.1:6379> lpop code//左边弹出
 "python"
 127.0.0.1:6379> rpop code//右边弹出
 "c#"
 127.0.0.1:6379>

4.set类型

添加:sadd

查询:smember

删除:srem

随机弹出:spop

元素个数:scard

差集:sdiff

交集:sinter

并集:sunion

 127.0.0.1:6379> sadd number 1 2 3 4 5
 (integer) 5
 127.0.0.1:6379> smembers number
 1) "1"
 2) "2"
 3) "3"
 4) "4"
 5) "5"
 127.0.0.1:6379> srem number 5
 (integer) 1
 127.0.0.1:6379> smembers number
 1) "1"
 2) "2"
 3) "3"
 4) "4"
 127.0.0.1:6379> spop number
 "3"
 127.0.0.1:6379> sadd number2 2 3 4 5
 (integer) 4
 127.0.0.1:6379> smembers number2
 1) "2"
 2) "3"
 3) "4"
 4) "5"
 127.0.0.1:6379> sdiff number number2
 1) "1"
 127.0.0.1:6379> sinter number number2
 1) "2"
 2) "4"
 127.0.0.1:6379> sunion number number2
 1) "1"
 2) "2"
 3) "3"
 4) "4"
 5) "5"
 127.0.0.1:6379> scard number
 (integer) 3

5.sorted_set类型

主要是用来做实时排序用的,但是不能bigdata(数据量太大会造成性能变得很低,这时得用那啥分页实时数据查询),可以在视频排行榜等需要实时更新里面使用

 (integer) 3
 127.0.0.1:6379> zadd wzry 100 p1//添加元素
 (integer) 1
 127.0.0.1:6379> zadd wzry 100 p2
 (integer) 1
 127.0.0.1:6379> zadd wzry 100 p3
 (integer) 1
 127.0.0.1:6379> zrange wzry 0 -1
 1) "p1"
 2) "p2"
 3) "p3"
 127.0.0.1:6379> zrange wzry 0 -1 withscores//升序带分数查询
 1) "p1"
 2) "100"
 3) "p2"
 4) "100"
 5) "p3"
 6) "100"
 127.0.0.1:6379> zincrby wzry 100 p1//添加
 "200"
 127.0.0.1:6379> zrange wzry 0 -1 withscores//
 1) "p2"
 2) "100"
 3) "p3"
 4) "100"
 5) "p1"
 6) "200"
 127.0.0.1:6379> zrevrange wzry 0 -1 withscores//降序查询
 1) "p1"
 2) "200"
 3) "p3"
 4) "100"
 5) "p2"
 6) "100"
 127.0.0.1:6379> zrank wzry p1//升序返回排名
 (integer) 2
 127.0.0.1:6379> zrevrank wzry p1//降序返回排名
 (integer) 0
 127.0.0.1:6379>
 127.0.0.1:6379> zcard wzry//返回元素个数
 (integer) 3

三、redis进阶

1.redis全局命令

模糊查询:keys *

 127.0.0.1:6379> keys n*
 1) "number"
 2) "number2"
 3) "name"

判断key是否存在:exists key

 127.0.0.1:6379> keys n*
 1) "number"
 2) "number2"
 3) "name"
 127.0.0.1:6379> exists number
 (integer) 1
 127.0.0.1:6379>

对已存在的key设置过期时间:expire key time

 127.0.0.1:6379> expire aa 20
 (integer) 1
 127.0.0.1:6379> ttl aa
 (integer) 11
 127.0.0.1:6379>

取消过期时间:persist

 127.0.0.1:6379> expire meset 100//设置过期时间
 (integer) 1
 127.0.0.1:6379> ttl meset//查询过期时间
 (integer) 9

2.redis安全性

 为了防止别人操作redis可以设置密码在redis.config文件里的# requirepass foobared这里去掉#号foobared换成自己的密码

3.redis事务

单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

简单理解:redis的事务是使用mutil开启事务,然后把一批指令存放在队列queen里面,最后使用execu一次性执行,就算某条语句执行失败也不会回滚,还会继续执行下面的语句。

好处就是可以批量执行,不用每执行一次就连接一次redis,还有就是如果有需求一些执行语句刚好需要一起执行的也可以采用redis的”事务“

使用discard方法取消事务.

127.0.0.1:6379> multi//开启事务
OK
127.0.0.1:6379> set name lisi//设置张三名字
QUEUED
127.0.0.1:6379> hset name li ll//name是String类型不是Object会报错
QUEUED
127.0.0.1:6379> sadd name 12
QUEUED
127.0.0.1:6379> exec//执行
1) OK
2) (error) WRONGTYPE Operation against a key holding the wrong kind of value
3) (error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> get name
"lisi"//结果没有回滚


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值