学习内容:
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