redis基本数据类型

redis基本命令 

1.移除具体的key到哪个库 move name 1 将name移到1号库

2.置key的失效时间

3.查询key的剩余时间

127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379>  clear
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name zs
OK
127.0.0.1:6379> 
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> 
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> 
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> move name 1
(integer) 1
127.0.0.1:6379>  keys *
1) "age"
127.0.0.1:6379> get age 
"20"
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> expire age 20
(integer) 1
127.0.0.1:6379> 
127.0.0.1:6379> ttl age
(integer) 10
127.0.0.1:6379> 
127.0.0.1:6379> ttl age
(integer) 6
127.0.0.1:6379> ttl age
(integer) 6
127.0.0.1:6379> ttl age
(integer) 5
127.0.0.1:6379> ttl age
(integer) 4
127.0.0.1:6379> ttl age
(integer) 3
127.0.0.1:6379> ttl age
(integer) 2
127.0.0.1:6379> ttl age
(integer) -2

查看key的类型

127.0.0.1:6379> set name gaoyuzhuan
OK
127.0.0.1:6379> 
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379>  type name
string
127.0.0.1:6379> 

redis更多的命令可以在官网上查看

String类型(计数器,文章的浏览量)多单位的数量 

比如粉丝的订阅数follower,点赞数clickcount可以这样设计,

假设up主的uid为1002323  mset uid:1002323:follower 100 uid:1002323:clickcount 100

127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> 
127.0.0.1:6379> append  name "hello" 追加字符串,如果key不存在 就相当于setkey
(integer) 15
127.0.0.1:6379> 
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"gaoyuzhuanhello"
127.0.0.1:6379> strlen name 获取字符串的长度
(integer) 15
127.0.0.1:6379> append name ","
(integer) 16
127.0.0.1:6379> 
127.0.0.1:6379> EXISTS name 判断当前key 是否存在
(integer) 1
127.0.0.1:6379> 
127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> 
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> incr views
(integer) 3
127.0.0.1:6379> incr views
(integer) 4
127.0.0.1:6379> incrby views 10  按步长增 
(integer) 11
127.0.0.1:6379> 
127.0.0.1:6379> decrby views 5   按步长减
(integer) 6
127.0.0.1:6379> 
127.0.0.1:6379> set  name zhangsdhsd  
OK
127.0.0.1:6379> 
127.0.0.1:6379> GETRANGE name 0 4  获取指定范围的字符串
"zhang"
127.0.0.1:6379> GETRANGE name 0 -1 获取所有的字符串
"zhangsdhsd"
127.0.0.1:6379> 
类似于 java中的替换:replace 替换指定位置的值
127.0.0.1:6379> SETRANGE name 0 qunima
(integer) 10
127.0.0.1:6379> strlen name
(integer) 10
127.0.0.1:6379> get name
"qunimadhsd"
127.0.0.1:6379> 

   

setex:设置过期时间 setex name 100 zs ==>给name设置100s的过期时间

setnx:设置当前不存在的key,设置成功返回1.失败返回0(代表已经存在该key)==>分布式锁经常用

127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> setex name 100 zs
OK
127.0.0.1:6379> ttl name
(integer) 97
127.0.0.1:6379> setnx mykey "key1"
(integer) 1

127.0.0.1:6379> keys *
1) "mykey"
2) "name"
127.0.0.1:6379> setnx mykey "key1"
(integer) 0
127.0.0.1:6379> 
127.0.0.1:6379> setnx mykey "key1"
(integer) 0
127.0.0.1:6379> get name
"zs"
127.0.0.1:6379> get mykey
"key1"
127.0.0.1:6379> 

 

批量获取值:

127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"


批量设置值:如果用setnx去设置,只要有一个不成功,就全部失败。返回0

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> 
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
3) "k3"
127.0.0.1:6379> msetnx k1 v1 k4 v4
(integer) 0
127.0.0.1:6379>

getset:先获取值在去设置新的值 

127.0.0.1:6379> getset name zs
(nil)
127.0.0.1:6379> get name
"zs"
127.0.0.1:6379> getset name lisi
"zs"
127.0.0.1:6379> get name
"lisi"
127.0.0.1:6379> 

设置对象

127.0.0.1:6379> mset user:1:name zs user:1:age 20
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zs"
2) "20"
127.0.0.1:6379> 

=========================================================================================================================

List 数据类型

lpush是从列表左边开始放。

lrange查询。 

lpop从列表左边弹出元素 。

127.0.0.1:6379> lpush list one 
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list two
(integer) 3
127.0.0.1:6379> 
127.0.0.1:6379> lpush list two
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "two"
3) "two"
4) "one"
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LPOP list  #从列表左边弹出一个元素
"three"
127.0.0.1:6379> RPOP list  #从列表右边弹出一个元素
"one"
127.0.0.1:6379> LRANGE list 0 -1
1) "four"
2) "three"
3) "two"
4) "one" 
127.0.0.1:6379> LINDEX list 0 #根据索引下标查询元素
"four"
127.0.0.1:6379> LINDEX list 3
"one"
127.0.0.1:6379> llen list   #获取列表长度
(integer) 4


 

移除list列表中指定的值 lrem list 1 xx   移除xx 1个

127.0.0.1:6379> LRANGE list 0 -1
1) "six"
2) "five"
3) "four"
4) "three"
5) "two"
127.0.0.1:6379> LREM list 1 six
(integer) 1
127.0.0.1:6379> 
127.0.0.1:6379> LRANGE list 0 -1
1) "five"
2) "four"
3) "three"
4) "two"
127.0.0.1:6379> lpush list  two
(integer) 5
127.0.0.1:6379> 
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "five"
3) "four"
4) "three"
5) "two"
127.0.0.1:6379> LREM list 2 two  #移除列表中的two元素,2个
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1
1) "five"
2) "four"
3) "three"
127.0.0.1:6379> 
127.0.0.1:6379> LPUSH list one two three four
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> LTRIM list  1  2   #截取列表中指定元素
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"

rpoplpush:右弹出一个元素在放进另外一个列表

127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
127.0.0.1:6379> lpush list four five
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "five"
2) "four"
3) "three"
4) "two"
127.0.0.1:6379> RPOPLPUSH list mylist 
"two"
127.0.0.1:6379> LRANGE list 0 -1
1) "five"
2) "four"
3) "three"
127.0.0.1:6379> LRANGE  mylist 0 -1
1) "two"

lset:修改列表中指定下标的值 lset list 0 item

127.0.0.1:6379> LSET list 0 one # 如果没有list这个key,会报错
(error) ERR no such key
127.0.0.1:6379> 
127.0.0.1:6379> LPUSH list  one
(integer) 1
127.0.0.1:6379> 
127.0.0.1:6379> LRANGE list 0 -1
1) "one"
127.0.0.1:6379> lset list 0 item # 将list列表中指定下标0号元素的值改为item
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "item"
127.0.0.1:6379> 

linsert list before one zero:在列表指定元素one前插入zero元素

127.0.0.1:6379> RPUSH list one two three
(integer) 3
127.0.0.1:6379> 
127.0.0.1:6379> LRANGE list 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> LINSERT list before one zero
(integer) 4
127.0.0.1:6379> 
127.0.0.1:6379> LRANGE list 0 -1
1) "zero"
2) "one"
3) "two"
4) "three"

小结:list实际上是一个链表,before node after ,left ,right都可以插入值。

           如果key不存在,创建新的链表。

           如果key存在,新增内容。

           如果移除所有的值,空链表,也代表不存在。

           在两边插入或者改动值,效率最高,中间元素,相对效率较低。

 

set数据类型(set中是不允许重复的)

sadd myset one two three 添加元素

smembers myset 查看元素

sismember myset one 查看是否有 one元素

scard myset 查询元素个数

127.0.0.1:6379> SADD myset one two three
(integer) 3
127.0.0.1:6379> 
127.0.0.1:6379> SMEMBERS myset 
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> SISMEMBER myset one
(integer) 1
127.0.0.1:6379> SCARD myset 
(integer) 3

127.0.0.1:6379> SREM MYSET FOUR  #移除元素FOUR
(integer) 1
127.0.0.1:6379> SMEMBERS MYSET
1) "TWO"
2) "ONE"
3) "THREE"

随机一个元素 SRANDMEMBER MYSET 

127.0.0.1:6379> SMEMBERS MYSET  #随机抽出一个元素
1) "TWO"
2) "ONE"
3) "THREE"
127.0.0.1:6379> SRANDMEMBER MYSET
"TWO"
127.0.0.1:6379> SRANDMEMBER MYSET
"TWO"
127.0.0.1:6379> SRANDMEMBER MYSET
"ONE"
127.0.0.1:6379> SRANDMEMBER MYSET
"TWO"
127.0.0.1:6379> SRANDMEMBER MYSET
"THREE"

随机移除一个元素 SPOP MYSET 

127.0.0.1:6379> SMEMBERS MYSET
1) "TWO"
2) "ONE"
3) "THREE"
127.0.0.1:6379> SPOP MYSET 
"THREE"
127.0.0.1:6379> SMEMBERS MYSET
1) "TWO"
2) "ONE"

将set集合中一个元素移除到另外一个set中

127.0.0.1:6379> SADD MYSET ONE TWO THREE
(integer) 3
127.0.0.1:6379> 
127.0.0.1:6379> SADD MYSET1 TEST
(integer) 1
127.0.0.1:6379> 
127.0.0.1:6379> SMOVE MYSET MYSET1 ONE
(integer) 1
127.0.0.1:6379> 
127.0.0.1:6379> SMEMBERS MYSET1
1) "ONE"
2) "TEST"

两个set中的元素取交集:sinner

和差集sdiff

并集sunion

 

127.0.0.1:6379> SADD SET1 1 2 3 
(integer) 3
127.0.0.1:6379> SADD SET2 3 4 5
(integer) 3
127.0.0.1:6379> 
127.0.0.1:6379> SDIFF SET1 SET2 
1) "1"
2) "2"
127.0.0.1:6379> SINTER SET1 SET2
1) "3"
127.0.0.1:6379> SUNION SET1 SET2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

比如A用户将所有关注的人放到set集合中,将粉丝的也放在一个集合中。共同爱好,共同关注

 

==================================================================================================================

hash类型:value存的是一个map

127.0.0.1:6379> hset myhash name zs
(integer) 1
127.0.0.1:6379> hget myhash name
"zs"
127.0.0.1:6379> hmset myhash name lisi age 20 sex boy 批量设置key
OK
127.0.0.1:6379> HMGET myhash name age sex 批量获取指定的key的值
1) "lisi"
2) "20"
3) "boy"

127.0.0.1:6379> HGETALL myhash #获取所有的键值对
1) "name"
2) "lisi"
3) "age"
4) "20"
5) "sex"
6) "boy"
127.0.0.1:6379> HDEL myhash name #删除指定的key
(integer) 1
127.0.0.1:6379> HGETALL myhash
1) "age"
2) "20"
3) "sex"
4) "boy"
127.0.0.1:6379> HLEN myhash #获取键值对的个数
(integer) 2
127.0.0.1:6379> HEXISTS myhash age #判断指定的hashkey是否存在
(integer) 1
127.0.0.1:6379> HEXISTS myhash name
(integer) 0
127.0.0.1:6379> HKEYS myhash #获取所有的key
1) "age"
2) "sex"
127.0.0.1:6379> HVALS myhash #获取所有的value
1) "20"
2) "boy"
127.0.0.1:6379> hset myhash test 5
(integer) 1
127.0.0.1:6379> HINCRBY myhash test 1 #将key按照指定步长增加
(integer) 6
127.0.0.1:6379> HINCRBY myhash test -1
(integer) 5

zset类型(有序集合)

添加元素

127.0.0.1:6379> ZADD myset 1 one 2 two 3 three
(integer) 3
127.0.0.1:6379> ZRANGE myset 0 -1 
1) "one"
2) "two"
3) "three"

根据score进行排序,指定区间

127.0.0.1:6379> ZRANGE salary 0 -1
1) "xiaohong"
2) "zhangsan"
3) "xiaoming"
4) "daming"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf #根据工资从负无穷到正无穷排序
1) "xiaohong"
2) "zhangsan"
3) "xiaoming"
4) "daming"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf withscores#根据工资从负无穷到正无穷排序带上数目
1) "xiaohong"
2) "500"
3) "zhangsan"
4) "1000"
5) "xiaoming"
6) "2000"
7) "daming"
8) "5000"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf 2000  withscores #指定区间排序
1) "xiaohong"
2) "500"
3) "zhangsan"
4) "1000"
5) "xiaoming"
6) "2000"
127.0.0.1:6379> ZREVRANGE salary  0 -1 withscores #从大到小排序
1) "daming"
2) "5000"
3) "xiaoming"
4) "2000"
5) "zhangsan"
6) "1000"

移除指定元素,计算数量。

127.0.0.1:6379> ZRANGE salary 0 -1
1) "xiaohong"
2) "zhangsan"
3) "xiaoming"
4) "daming"
127.0.0.1:6379> ZREM salary xiaohong
(integer) 1
127.0.0.1:6379> ZRANGE salary 0 -1
1) "zhangsan"
2) "xiaoming"
3) "daming"
127.0.0.1:6379> ZCARD salary
(integer) 3

获取指定区间的值的数量

127.0.0.1:6379> zadd myset 1 zs 2 lisi 3 wangwu 6 zhaoliu
(integer) 4
127.0.0.1:6379> ZCOUNT myset 1 4
(integer) 3

zset的案例:

存储班级成绩排序,

工资表排序,

消息的重要性设置权重,

排行榜应用实现。取前十topten

其余的更详细的命令,可以去参考官网。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值