Redis基本数据类型及常用命令

Redis基本数据类型及常用命令

String类型

  1. set name he
    append name llo 追加字符串,如果不存在就新建
    get name -->hello
  2. 获取字符串的长度strlen name
  3. incr key 将key的值加一,减一用decr,只能操作字符串类型数值
  4. INCRBY key 10/DECRBY key 5 可设置步长的一次性加减
  5. GETRANGE name 0 3 按照范围截取字符串 0 -1 获取全部字符串
  6. key2 abcdefg SETRANGE key2 1 xx ; get key2 axxdefg
  7. setex(set with expire) #设置过期时间 setex key3 30 “hello”
  8. setnx(set if not exist) #key不存在的时候再设置,如果存在则返回0创建失败。
  9. 批量设置值 mset k1 v1 k2 v2 k3 v3
  10. 如果库中存在k1 k2 k3则设置 msetnx k1 vx k4 v4 则k1和k4都不能设置成功,这个操作是原子性操作,要么一起成功要么一起失败,分布式锁用的比较多。
  11. key设计技巧:对象:set user:1 {name:zhangsan,age:3} 设置一个user:1对象 值为json字符来保存一个对象!这里的key是一个巧妙的设计:user:{id} {filed},如此设计在redis中完全是OK了。比如设置文章浏览量 set article:10000:views 0
  12. getset db redis 如果存在值,获取原来的值,并设置新的值
String类似的使用场景:value除了是我们的字符串还可以是我们的数字!
  • 计数器
  • 统计多单位的数量 uid:95256449:follow 0
  • 粉丝数
  • 对象缓存存储

List列表类型详解

在redis里面,我们可以把list玩成,栈、队列、阻塞队列!

127.0.0.1:6379> LPUSH l one
(integer) 1
127.0.0.1:6379> LPUSH l two
(integer) 2
127.0.0.1:6379> LPUSH l three
(integer) 3
127.0.0.1:6379> LRANGE l 0 -1
1) “three”
2) “two”
3) “one”
127.0.0.1:6379> LRANGE l 0 0
1) “three”
127.0.0.1:6379> LRANGE l 0 0
1) “three”

  1. LPUSH:将一个值或者多个值,插入到列表头部(左) 例:LPUSH list 1
    RPUSH: 将一个值或者多个值,插入到列表尾部(右)

  2. LPOP:从左边移除 例:LPOP list
    RPOP:从右边移除

  3. lindex list 0: 通过下标获取list中的某一个值
    Llen list: 返回列表的长度

  4. lrem list 1 one #移除list集合中指定个数的value,精确匹配

  5. ltrim mylist 1 2 通过下标截取指定的长度,这个list已经被改变了,截断了只剩下截取的元素!

  6. rpoplpush mylist myotherlist #移除列表的最后一个元素,将他移动到新的列表中

  7. lset list 0 item 把索引为0的元素替换为item

  8. LINSERT list before/after “world” "other"在list指定位置之前/之后插入元素

list实际上就是一个链表,如果key不存在,创建新的链表,如果key存在,在链表中插入元素,如果移除了所有值,空链表也代表不存在。在两边插入效率最高,中间元素,相对来说效率会低一点!

消息排队!消息队列!左输入,右弹出是队列。左输入,右弹出是栈。

Set集合类型详解

  1. 基本命令 sadd和smembers

127.0.0.1:6379> sadd myset hello #向集合中添加元素
(integer) 1
127.0.0.1:6379> sadd myset world
(integer) 1
127.0.0.1:6379> sadd myset geng
(integer) 1
127.0.0.1:6379> smembers myset #查看指定set的所有值
1) “geng”
2) “world”
3) “hello”
127.0.0.1:6379> sadd myset geng
(integer) 0
127.0.0.1:6379> smembers myset
1) “geng”
2) “world”
3) “hello”

127.0.0.1:6379> SISMEMBER myset hello #查看集合中是否有元素
(integer) 1
127.0.0.1:6379> SISMEMBER myset world
(integer) 1
127.0.0.1:6379> SISMEMBER myset wor
(integer) 0
127.0.0.1:6379> smembers myset
1) “geng”
2) “world”
3) “hello”

127.0.0.1:6379> scard myset #查看set集合中元素的个数
(integer) 3
127.0.0.1:6379> sadd myset good
(integer) 1
127.0.0.1:6379> scard myset
(integer) 4

127.0.0.1:6379> scard myset
(integer) 4
127.0.0.1:6379> srem myset good #从set集合中移除指定元素
(integer) 1
127.0.0.1:6379> scard myset
(integer) 3
127.0.0.1:6379> smembers myset
1) “geng”
2) “world”
3) “hello”

127.0.0.1:6379> srandmember myset #从set集合中随机获取值
“hello”
127.0.0.1:6379> srandmember myset
“geng”
127.0.0.1:6379> srandmember myset
“geng”
127.0.0.1:6379> srandmember myset 2
1) “geng”
2) “hello”

  1. 删除指定的key、删除随机的key

127.0.0.1:6379> smembers myset
1) “geng”
2) “world”
3) “hello”
127.0.0.1:6379> spop myset #随机删除pop
“hello”
127.0.0.1:6379> spop myset
“geng”
127.0.0.1:6379> smembers myset
1) “world”

  1. 将一个指定的值,移动到另外一个set集合

smove myset1 myset2 “hello”

  1. 微博、B站、共同关注!(并集)
    数字集合类:
  • 差集
  • 交集
  • 并集

127.0.0.1:6379> sadd k1 a
(integer) 1
127.0.0.1:6379> sadd k1 b
(integer) 1
127.0.0.1:6379> sadd k1 c
(integer) 1
127.0.0.1:6379> sadd k2 c
(integer) 1
127.0.0.1:6379> sadd k2 d
(integer) 1
127.0.0.1:6379> sadd k2 e
(integer) 1
127.0.0.1:6379> SDIFF k1 k2 #差集
1) “b”
2) “a”
127.0.0.1:6379> SINTER k1 k2 #交集
1) “c”
127.0.0.1:6379> SUNION k1 k2 #并集
1) “e”
2) “c”
3) “a”
4) “b”
5) “d”
微博,A用户将所有关注的人放在一个set集合中!将它的粉丝也放在一个集合中!
共同关注,共同爱好,二度好友,推荐好友!(六度分割理论)

Hash哈希类型详解

Map集合,key-map!的时候这个值是一个map集合!本质和String类型没有太大区别,还是一个简单的key-value!
1.

127.0.0.1:6379> hset myhash field1 value1 #set一个具体key-value
(integer) 1
127.0.0.1:6379> hset myhash field2 value2
(integer) 1
127.0.0.1:6379> hset myhash field3 value3
(integer) 1

127.0.0.1:6379> hmset myhash key1 val1 key2 val2 key3 val3 #set多个 key-value
OK
127.0.0.1:6379> hget myhash field1
“value1”
127.0.0.1:6379> hget myhash key2
“val2”
127.0.0.1:6379> hgetall myhash #获取全部的key、value
1) “field1”
2) “value1”
3) “field2”
4) “value2”
5) “field3”
6) “value3”
7) “key1”
8) “val1”
9) “key2”
10) “val2”
11) “key3”
12) “val3”

127.0.0.1:6379> hgetall myhash
1) “field1”
2) “value1”
3) “field2”
4) “value2”
5) “field3”
6) “value3”
7) “key1”
8) “val1”
9) “key2”
10) “val2”
11) “key3”
12) “val3”
127.0.0.1:6379> hdel myhash key3 key2 #删除hash指定key字段!对应的value值也就消失了!
(integer) 2
127.0.0.1:6379> hgetall myhash
1) “field1”
2) “value1”
3) “field2”
4) “value2”
5) “field3”
6) “value3”
7) “key1”
8) “val1”

127.0.0.1:6379> hgetall myhash
1) “field1”
2) “value1”
3) “field2”
4) “value2”
5) “field3”
6) “value3”
7) “key1”
8) “val1”
127.0.0.1:6379> hlen myhash #获取myhash的长度
(integer) 4
127.0.0.1:6379> HEXISTS myhash field1 #判断hash中指定字段是否存在!
(integer) 1
127.0.0.1:6379> HEXISTS myhash field5
(integer) 0

127.0.0.1:6379> hkeys myhash #获取myhash中所有的key
1) “field1”
2) “field2”
3) “field3”
4) “key1”
127.0.0.1:6379> hvals myhash #获取myhash中所有的value
1) “value1”
2) “value2”
3) “value3”
4) “val1”


Zset有序集合类型详解

在set的基础上,增加了一个值,set k1 v1 zset k1 score1 v1
1.

127.0.0.1:6379> zadd myset 1 one
(integer) 1
127.0.0.1:6379> zadd myset 2 two 3 three
(integer) 2
127.0.0.1:6379> ZRANGE myset 0 -1
1) “one”
2) “two”
3) “three”

127.0.0.1:6379> zadd salary 2500 xiaohong
(integer) 1
127.0.0.1:6379> zadd salary 5000 zhangsan
(integer) 1
127.0.0.1:6379> zadd salary 500 kuangshen
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf #按照从小到大的顺序排序
1) “kuangshen”
2) “xiaohong”
3) “zhangsan”
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf withscores #显示全部的用户并且附带成绩
1) “kuangshen”
2) “500”
3) “xiaohong”
4) “2500”
5) “zhangsan”
6) “5000”
127.0.0.1:6379> ZRANGEBYSCORE salary -inf 2500 withscores #显示工资小于等于2500员工的降序排列
1) “kuangshen”
2) “500”
3) “xiaohong”
4) “2500”

127.0.0.1:6379> zrange salary 0 -1
1) “kuangshen”
2) “xiaohong”
3) “zhangsan”
127.0.0.1:6379> zrem salary xiaohong #有序集合移除元素
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) “kuangshen”
2) “zhangsan”
127.0.0.1:6379> zcard salary #获取有序集合中的个数
(integer) 2

  1. 案例思路:set 排序 存储班级成绩表,工资表排序。普通消息,1,重要消息,2。排行榜应用实现,取TOP N测试!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值