Redis 五大数据类型操作

学习内容:

1、 String (字符串)
# 命令: keys  get  set  incr(+1) decr(-1)
# ===========================================
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> get key1
(nil)
127.0.0.1:6379> set key1 "hello"
OK
127.0.0.1:6379> get key1
"hello"
127.0.0.1:6379> set key2 0
OK
127.0.0.1:6379> INCR key2
(integer) 1
127.0.0.1:6379> get key2
"1"
127.0.0.1:6379> INCR key2  # 自增 1
(integer) 2
127.0.0.1:6379> get key2
"2"
127.0.0.1:6379> DECR key2  # 自减 1
(integer) 1
127.0.0.1:6379> get key2
"1"
127.0.0.1:6379> DECR key2
(integer) 0
127.0.0.1:6379> get key2
"0"

#   incrby(添加指定的步长)  decrby(减少指定步长)   
127.0.0.1:6379> set view 0
OK
127.0.0.1:6379> INCRBY view 10
(integer) 10
127.0.0.1:6379> INCRby view 5
(integer) 15
127.0.0.1:6379> DECRBY view 12
(integer) 3

# ======================================
# 获取字符串指定范围 range
127.0.0.1:6379> clear
127.0.0.1:6379> set key "hello redis"
OK
127.0.0.1:6379> get key
"hello redis"
127.0.0.1:6379> GETRANGE key 2 5
"llo "
127.0.0.1:6379> GETRANGE key 0 -1
"hello redis"

# 替换指定位置开始的字符串
127.0.0.1:6379> get key
"hello redis"
127.0.0.1:6379> SETRANGE key 2 yy
(integer) 11
127.0.0.1:6379> get key
"heyyo redis"

#========================================
# setex  设置指定key的过期时间
# setnx  不存在再设置key(在分布式锁中会常常使用!)

127.0.0.1:6379> SETEX key3 30 "hello"  # 设置key3的值为hello,过期时间是30s
OK
127.0.0.1:6379> ttl key3  # 查看指定key的过期剩余时间
(integer) 24
127.0.0.1:6379> ttl key3
(integer) 14
127.0.0.1:6379> ttl key3
(integer) -2
127.0.0.1:6379> setnx key4 "redis"  # 如果不存在key4,则进行创建
(integer) 1
127.0.0.1:6379> setnx key4 "mongoDb"  # 如果存在key4,则创建失败
(integer) 0
127.0.0.1:6379> get key4
"redis"

#======================================
# mset mget  # 一次设置获取多个值
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3  #一次性设置多个值
OK
127.0.0.1:6379> keys *  # 获取所有的key
1) "k1"
2) "k3"
3) "k2"
127.0.0.1:6379> mget k1 k2 k3  # 获取多个可以对应的值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4    # msetnx是原子性操作,要么全部成功,反之,因为k1已经存在,
(integer) 0           # 所以设置失败,所以k4的设置也会失败
127.0.0.1:6379> get k4
(nil)

#==============================
# 设置对象
# 设置一个对象 user:1 对象  值为json字符串来保存一个对象
127.0.0.1:6379> set user:1 {name:zhangsan,age:20}
OK
127.0.0.1:6379> get user:1
"{name:zhangsan,age:20}"
# 这里的key是一个巧妙的设计: user:{id}:{filed},
127.0.0.1:6379> mset user:2:name lisi user:2:age 18
OK
127.0.0.1:6379> mget user:2:name user:2:age
1) "lisi"
2) "18"

#==============================
# getset 先get然后再set
127.0.0.1:6379> getset db redis  # 如果不存在db,则返回为nil,然后再设置db的值为redis
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db mongodb  # 先取出db的值,再设置为mongodb
"redis"
127.0.0.1:6379> get db
"mongodb"

2、 List(所有的命令都是以 l 开头的)

# 
127.0.0.1:6379> lpush list one two three  # 将值从list左边插入
(integer) 3
127.0.0.1:6379> lrange list 0 -1  # 查看list的所有值
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lpush list 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> RPUSH list five  # 从list的右边插入
(integer) 5
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
5) "five"

=================================
pop
127.0.0.1:6379> lpop list   # 从左边开始移除
"four"
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "five"
127.0.0.1:6379> rpop list  # 从右边开始移除
"five"
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"

#    lindex
127.0.0.1:6379> lindex list -1  # 获取最后一个下标的值
"one"
127.0.0.1:6379> lindex list 0  # 获取下标为0的值
"three"

# llen(获取当前list的长度)
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LLEN list
(integer) 3

==========================================
# lrem(移除list中的值)
127.0.0.1:6379> lpush list one two three three
(integer) 4
127.0.0.1:6379> lrange list 0 -1  
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lrem list 1 two  # 移除list中1个值为two,
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "one"
127.0.0.1:6379> lrem list 2 three # 移除list的中的2个值,值为three
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "one"

================================
ltrim(截取指定下标范围的list值)
127.0.0.1:6379> lpush list k1 k2 k3 k4 k5
(integer) 5
127.0.0.1:6379> lrange list 0 -1
1) "k5"
2) "k4"
3) "k3"
4) "k2"
5) "k1"
127.0.0.1:6379> ltrim list 2 4  
OK
127.0.0.1:6379> lrange list 0 -1
1) "k3"
2) "k2"
3) "k1"

==============================================
# rpoplpush(移除指定list中的值,移动到另一个list中)
127.0.0.1:6379> lpush list1 k1 k2 k3
(integer) 3
127.0.0.1:6379> lrange list1 0 -1
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379> rpoplpush list1 list2
"k1"
127.0.0.1:6379> lrange list1 0 -1
1) "k3"
2) "k2"
127.0.0.1:6379> lrange list2 0 -1
1) "k1"

3、 set(set中的值是不能重复的,命令以s开头)

#
127.0.0.1:6379> sadd myset k1 k2 k3 # 向set中添加值
(integer) 3 
127.0.0.1:6379> SMEMBERS myset # 查看set中的所有值
1) "k1"
2) "k3"
3) "k2"
127.0.0.1:6379> SISMEMBER myset k1 # 判断某个值是否为set中的成员
(integer) 1
127.0.0.1:6379> SISMEMBER myset k4
(integer) 0
127.0.0.1:6379> SADD myset k1  # set中的值不可以重复  
(integer) 0

127.0.0.1:6379> srem myset k2  # 移除set中指定的值
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "k1"
2) "k3"
127.0.0.1:6379> SCARD myset  # 查看set的长度
(integer) 2

127.0.0.1:6379> SMEMBERS myset
1) "k4"
2) "k1"
3) "k3"
127.0.0.1:6379> SRANDMEMBER myset  # 随机获取set中的 1 个值
"k3"
127.0.0.1:6379> SRANDMEMBER myset 2  # 随机获取 2 个值
1) "k1"
2) "k3"

127.0.0.1:6379> SMEMBERS myset
1) "k4"
2) "k1"
3) "k2"
4) "k3"
127.0.0.1:6379> spop myset  # 随机删除一个元素
"k4"
127.0.0.1:6379> smove myset myset1 k2  # 将myset中指定的值移动到myset1
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "k1"
2) "k3"
127.0.0.1:6379> SMEMBERS myset1
1) "k2"

====================================================
# 交集并集
127.0.0.1:6379> sadd key1 a b c 
(integer) 3
127.0.0.1:6379> sadd key2 c d e
(integer) 3
127.0.0.1:6379> SDIFF key1 key2  # 差集
1) "a"
2) "b"
127.0.0.1:6379> SDIFF key2 key1
1) "e"
2) "d"
127.0.0.1:6379> SUNION key1 key2 # 并集
1) "a"
2) "b"
3) "c"
4) "e"
5) "d"
127.0.0.1:6379> SINTER key1 key2 # 交集
1) "c"

4、 Hash(哈希)
– Map集合,还是key-value(此时的value是一个map集合)的结构!本质和String类型没有太大的区别,还是一个简单的key-value!

127.0.0.1:6379> clear
127.0.0.1:6379> hset myhash k1 v1 k2 v2  # 设置
(integer) 2
127.0.0.1:6379> hget myhash k1  获取hash指定的key的值
"v1"
127.0.0.1:6379> hgetall myhash  # 获取所有的hash键值对
1) "k1"
2) "v1"
3) "k2"
4) "v2"
127.0.0.1:6379> hmget myhash k1 k2  # 获取多个字段的值
1) "v1"
2) "v2"
127.0.0.1:6379> HDEL myhash k1  # 删除哈数中指定的key
(integer) 1
127.0.0.1:6379> hlen myhash  # 获取hash中的map个数
(integer) 1

127.0.0.1:6379> HEXISTS myhash k2  # 判断当前的hash中是否存在指定的k2
(integer) 1

127.0.0.1:6379> HKEYS myhash  # 获取所有的key
1) "k2"
2) "k1"
3) "k3"
127.0.0.1:6379> HVALS myhash  # 获取所有的value
1) "v2"
2) "v1"
3) "v3"

# 
127.0.0.1:6379> hset myhash k4 5 
(integer) 1
127.0.0.1:6379> HINCRBY myhash k4 1 # 给指定的key的value进行自加
(integer) 6
127.0.0.1:6379> HINCRBY myhash k4 5
(integer) 11
127.0.0.1:6379> HINCRBY myhash k4 -8
(integer) 3
127.0.0.1:6379> HSETNX myhash k4 hello  # 如果hash中的key已经存在,则赋值失败,反之
(integer) 0
127.0.0.1:6379> HSETNX myhash k5 hello
(integer) 1

# 应用:hash变更的数据,尤其是使用在用户信息之类的,经常需要变动的信息,hash更适合于对象的存储,String更适合于字符串存储!

5、zset(有序集合)

127.0.0.1:6379> zadd myset 1 one 2 two  # 向zset中设置键值对
(integer) 2
127.0.0.1:6379> zadd myset 3 three
(integer) 1
127.0.0.1:6379> ZRANGE myset 0 -1  # 查询所有的键
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> ZRANGE myset 0 -1 withscores # 查询所有的键和值
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"

# 排序
127.0.0.1:6379> ZRANGE salary 0 -1 # 查询
1) "wangwu"
2) "zhangsan"
3) "lisi"
127.0.0.1:6379> ZRANGE salary 0 -1 withscores
1) "wangwu"
2) "2000"
3) "zhangsan"
4) "5000"
5) "lisi"
6) "5500"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf  # 排序,从小到大
1) "wangwu"
2) "zhangsan"
3) "lisi"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf withscores  # 带上薪水的排序
1) "wangwu"
2) "2000"
3) "zhangsan"
4) "5000"
5) "lisi"
6) "5500"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf 5300 withscores # 获取指定范围内的排序
1) "wangwu"
2) "2000"
3) "zhangsan"
4) "5000"
127.0.0.1:6379> ZREVRANGE salary 0 -1 withscores # 逆序
1) "lisi"
2) "5500"
3) "wangwu"
4) "2000"

==============================
# 移除 zrem

127.0.0.1:6379> zrange salary 0 -1
1) "wangwu"
2) "zhangsan"
3) "lisi"
127.0.0.1:6379> zrem salary zhangsan  # 移除指定的值
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "wangwu"
2) "lisi"
127.0.0.1:6379> zcard salary  # 获取有序集合中的数量
(integer) 2

# 获取指定区间的元素
127.0.0.1:6379> clear
127.0.0.1:6379> zadd myset 1 one 2 two 3 three
(integer) 3
127.0.0.1:6379> ZCOUNT myset 1 3  # 获取指定区间的成员
(integer) 3
127.0.0.1:6379> ZCOUNT myset 0 1
(integer) 1
127.0.0.1:6379> ZCOUNT myset 0 2
(integer) 2

6、Geospatial地理位置处理

127.0.0.1:6379> GEOADD china:city 116.40 39.90 beijing  # 添加地理信息
(integer) 1
127.0.0.1:6379> GEOADD china:city 121.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> GEOADD china:city 106.50 29.53 chongqing
(integer) 1
127.0.0.1:6379> GEOPOS china:city beijing   # 获取指定位置的精度维度
1) 1) "116.39999896287918091"
   2) "39.90000009167092543"
127.0.0.1:6379> GEOPOS china:city beijing chongqing
1) 1) "116.39999896287918091"
   2) "39.90000009167092543"
2) 1) "106.49999767541885376"
   2) "29.52999957900659211"
127.0.0.1:6379> GEODIST china:city beijing shanghai # 获取两地之间的距离(默认单位是m)
"1067378.7564"
127.0.0.1:6379> GEODIST china:city beijing shanghai km # 设置距离单位是km
"1067.3788"
127.0.0.1:6379> GEODIST china:city chongqing shanghai km
"1447.6737"

# 获取以点(110,30)为中心1000km范围内的地点
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km
1) "chongqing"
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km
1) "chongqing"
2) "shanghai"
3) "beijing"
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km withdist  # 获取当前点到范围内的具体距离
1) 1) "chongqing"
   2) "341.9374"
2) 1) "shanghai"
   2) "1105.9098"
3) 1) "beijing"
   2) "1245.2858"
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km withcoord  # 获取具体的维度信息
1) 1) "chongqing"
   2) 1) "106.49999767541885376"
      2) "29.52999957900659211"
2) 1) "shanghai"
   2) 1) "121.47000163793563843"
      2) "31.22999903975783553"
3) 1) "beijing"
   2) 1) "116.39999896287918091"
      2) "39.90000009167092543"
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km withdist  withcoord count 1  # 获取符合条件值的一个
1) 1) "chongqing"
   2) "341.9374"
   3) 1) "106.49999767541885376"
      2) "29.52999957900659211"
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1500 km  # 获取北京周围1500km的地区
1) "chongqing"
2) "shanghai"
3) "beijing"
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1200 km
1) "beijing"
2) "shanghai"
127.0.0.1:6379> ZRANGE china:city 0 -1  # 排序
1) "chongqing"
2) "shanghai"
3) "beijing"
127.0.0.1:6379> zrem china:city chongqing  # 删除指定的元素
(integer) 1

7、HyperLogLog(基数统计,就是统计不重复的个数数量)

# 可以应用于网站的访问人数的统计
127.0.0.1:6379> clear
127.0.0.1:6379> PFADD mykey a b c d e f g h i j b c  # 创建
(integer) 1
127.0.0.1:6379> PFCOUNT mykey # 计算
(integer) 10
127.0.0.1:6379> PFADD mykey1 c d m n e g
(integer) 1
127.0.0.1:6379> PFCOUNT mykey1
(integer) 6
127.0.0.1:6379> PFMERGE mykey2 mykey mykey1 # 将两个进行合并
OK
127.0.0.1:6379> PFCOUNT mykey2
(integer) 12

8、biMap

# 统计上班一周打卡的天数
127.0.0.1:6379> clear
127.0.0.1:6379> setbit sign 0 1  # 设置星期一 打卡
(integer) 0
127.0.0.1:6379> setbit sign 1 1 
(integer) 0
127.0.0.1:6379> setbit sign 2 1 
(integer) 0
127.0.0.1:6379> setbit sign 3 0 
(integer) 0
127.0.0.1:6379> setbit sign 4 0 
(integer) 0
127.0.0.1:6379> setbit sign 5 0 
(integer) 0
127.0.0.1:6379> setbit sign 6 1 
(integer) 0
127.0.0.1:6379> getbit sign 6  # 获取星期日是否打卡
(integer) 1
127.0.0.1:6379> BITCOUNT sign  # 统计总共打卡的天数
(integer) 4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值