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

被折叠的 条评论
为什么被折叠?



