Redis基本操作,常用命令

1.Redis入门

官方英文文档
官方中文文档

基础命令:
keys * 获取所有key

127.0.0.1:6379> keys *
1) "k1"
2) "k3"
3) "k2"
4) "name"

exists [keyname] 是否存在key

127.0.0.1:6379> exists k1
(integer) 1
127.0.0.1:6379> exists k0
(integer) 0
127.0.0.1:6379> expire k1 10  #对已存在的key设置过期时间
(integer) 1
127.0.0.1:6379> ttl k1  # 获取key的剩余时间
(integer) 5
127.0.0.1:6379> setex k0 20 jklopq  #创建key时,设置过期
OK
127.0.0.1:6379> ttl k0
(integer) 15
127.0.0.1:6379> ttl k0
(integer) 13
127.0.0.1:6379> setnx k0 'jklasd'  # 如果不存在key,设置,返回1
(integer) 1
127.0.0.1:6379> get k0
"jklasd"
127.0.0.1:6379> setnx k0 'zxc'   # 如果存在key,不设置,返回0
(integer) 0
127.0.0.1:6379> get k0
"jklasd"

type [keyname] 键值对类型

127.0.0.1:6379> type k2
string
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3  # 批量设置
OK
127.0.0.1:6379> keys *
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> mset k1 v3 k4 v4   # 设置并替换
OK
127.0.0.1:6379> keys *
1) "k1"
2) "k3"
3) "k4"
4) "k2"
127.0.0.1:6379> mget k1 k2 k3 k4
1) "v3"
2) "v2"
3) "v3"
4) "v4"
127.0.0.1:6379> msetnx k1 v3 k4 v4  # 不存在再设置,存在即失败,且具有原子性,要么都失败,要么都成功
(integer) 0
127.0.0.1:6379> keys *
1) "k1"
2) "k3"
3) "k2"

1.1.五大数据类型

String

redis会自动识别字符串、整数、浮点数,这三种值,归结为String

127.0.0.1:6379> set k1 v1   #设置String
OK
127.0.0.1:6379> get k1  # 获取key的值
"v1"
127.0.0.1:6379> APPEND k2 "hh" #追加字符串,如果不存在,则新建
(integer) 4
127.0.0.1:6379> STRLEN k2 #获取字符串长度
(integer) 4
127.0.0.1:6379> incr num  # 自增
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
127.0.0.1:6379> decr num  # 自减
(integer) 2
127.0.0.1:6379> decr num
(integer) 1
127.0.0.1:6379> decr num
(integer) 0
127.0.0.1:6379> incrby num 10  # 指定num增加10
(integer) 10
127.0.0.1:6379> incrby num 20
(integer) 30
127.0.0.1:6379> decrby num 5  # 指定num减5
(integer) 25
#################################截取,替换
127.0.0.1:6379> set k4 abcdefg   
OK
127.0.0.1:6379> GETRANGE k4 0 4   # 截取0~4号位字符串
"abcde"
127.0.0.1:6379> get k4   
"abcdefg"
127.0.0.1:6379> GETRANGE k4 0 -1  # 获取全部字符串 等同于get key
"abcdefg"
127.0.0.1:6379> SETRANGE k4 3 '666'  # 替换 ,相当于java的replace
(integer) 7
127.0.0.1:6379> GET k4
"abc666g"
#################################对象
127.0.0.1:6379> mset person:1:name queen person:1:age 18
OK
127.0.0.1:6379> keys *
1) "person:1:age"
4) "person:1:name"
127.0.0.1:6379> mget person:1:name person:1:age
1) "queen"
2) "18"
###################################getset
127.0.0.1:6379> getset k0 hello   #获取旧的值,并设置新的值
(nil)
127.0.0.1:6379> get k0
"hello"
127.0.0.1:6379> getset k0 world
"hello"
127.0.0.1:6379> get k0
"world"

List

有序重复集合,大部分命令都是以“l”开头的

127.0.0.1:6379> lpush list a  #lpush [keyname] value 左插入值
(integer) 1
127.0.0.1:6379> lpush list b
(integer) 2
127.0.0.1:6379> lpush list c
(integer) 3
127.0.0.1:6379> lrange list 0 -1  # lrange [keyname] 0 -1 遍历list
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> rpush list d  #rpush [keyname] value 右插入值
(integer) 4
127.0.0.1:6379> rpush list e
(integer) 5
127.0.0.1:6379> lrange list 0 -1
1) "c"
2) "b"
3) "a"
4) "d"
5) "e"
127.0.0.1:6379> lpop list  # 左移除第一个元素,并返回
"c"
127.0.0.1:6379> rpop list  # 移除最后一个元素,并返回
"e"
127.0.0.1:6379> lrange list 0 -1
1) "b"
2) "a"
3) "d"
127.0.0.1:6379> lindex list 0  # 通过下标获取值
"b"
127.0.0.1:6379> Llen list  # 获取长度
(integer) 3
###############################################移除指定的值
127.0.0.1:6379> lrem list 1 b   # lrem [keyname] 数量 value 移除指定数量的指定的值  这里为移除1个b
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "a"
2) "d"
###############################################截取
127.0.0.1:6379> rpush list a b c d e
(integer) 5
127.0.0.1:6379> ltrim list 2 3  # 截取下标2至下标3的元素
OK
127.0.0.1:6379> lrange list 0 -1
1) "c"
2) "d"
###############################################移动
127.0.0.1:6379> rpoplpush list list2    # 移除list种最右边的元素,移动到list2的最左侧
"d"
127.0.0.1:6379>
127.0.0.1:6379> lrange list 0 -1
1) "c"
127.0.0.1:6379> lrange list2 0 -1
1) "d"
127.0.0.1:6379> rpush list d e f
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "c"
2) "d"
3) "e"
4) "f"
###更新、插入
127.0.0.1:6379> lrange list 0 -1
1) "c"
2) "d"
3) "e"
127.0.0.1:6379> lset list 1 ddd  # `lset [keyname] 下标 newValue`  更新下标1的元素, 如果集合或下标不存在,会报错
OK
127.0.0.1:6379> lrange list 0 -1
1) "c"
2) "ddd"
3) "e"
127.0.0.1:6379> linsert list after e f   #`linsert [keyname] after vlaue newvalue` 往e的后面插入新值f
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "c"
2) "ddd"
3) "e"
4) "f"
127.0.0.1:6379> linsert list before c b  # `linsert [keyname] before value newvalue` 往c的前面插入新值b
(integer) 5
127.0.0.1:6379> lrange list 0 -1
1) "b"
2) "c"
3) "ddd"
4) "e"
5) "f"
  • 如果移除了所有值,空链表,也代表不存在!
  • 在两边插入或者改动值,效率最高! 中间元素,相对来说效率会低一点
  • 可以用list做消息队列,栈

Set

无序不重复的集合,大部分以s开头

127.0.0.1:6379> sadd set v1 v2 v3  # `sadd [keyname] value` 添加元素 直接添加3个元素
(integer) 3
127.0.0.1:6379> sadd set v1  # 添加重复元素,失败,返回0
(integer) 0
127.0.0.1:6379> smembers set  # 遍历set的原色
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379> sismember set v1  # `sismember [keyname] value` 查看元素是否存在
(integer) 1
127.0.0.1:6379> sismember set v5
(integer) 0
127.0.0.1:6379> scard set  # 获取set中元素个数
(integer) 3
127.0.0.1:6379> srem set v1  # 移除元素
(integer) 1
127.0.0.1:6379> smembers set
1) "v3"
2) "v2"
127.0.0.1:6379> SRANDMEMBER set  # SRANDMEMBER随机取出一个元素
"v4"
127.0.0.1:6379> SRANDMEMBER set
"v5"
127.0.0.1:6379> spop set  # 随机移除一个元素
"v4"
127.0.0.1:6379> smembers set 
1) "v3"
2) "v2"
3) "v1"
4) "v5"
127.0.0.1:6379> smove set set2 v5  # `smove [set1name] [set2name] value` 从集合1移动指定的元素到集合2中
(integer) 1
127.0.0.1:6379> smembers set
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379> smembers set2
1) "v5"
# 差集、交集、并集
127.0.0.1:6379> sadd set2 v1
(integer) 1
127.0.0.1:6379> SMEMBERS set2
1) "v1"
2) "v5"
127.0.0.1:6379> SMEMBERS set
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379> SDIFF set set2  # 两个集合的差集
1) "v3"
2) "v2"
127.0.0.1:6379> SUNION set set2  # 两个集合的并集
1) "v3"
2) "v1"
3) "v2"
4) "v5"
127.0.0.1:6379> SINTER set set2  # 两个集合的交集
1) "v1"
  • 总结:可实现共同好友、共同关注等需求。

Hash

key-map集合,大多以h开头

127.0.0.1:6379> hset hash1 k1 v1  # `hset [hashName] [map-kay] [map-value]` 设置一个hash
(integer) 1
127.0.0.1:6379> hget hash1 k1  # 获取hash1中的k1的值
"v1"
127.0.0.1:6379> hmset hash1 k2 v2 k3 v3  # 批量设置
OK
127.0.0.1:6379> hmget hash1 k1 k2 k3  # 批量读取
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> hgetall hash1  # 获取所有的键和所有的值
1) "k1"
2) "v1"
3) "k2"
4) "v2"
5) "k3"
6) "v3"
127.0.0.1:6379> hdel hash1 k1   # 删除指定的map
(integer) 1
127.0.0.1:6379> hgetall hash1
1) "k2"
2) "v2"
3) "k3"
4) "v3"
127.0.0.1:6379> hlen hash1  # 获取hash的map数量
(integer) 2
127.0.0.1:6379> HEXISTS hash1 k2  # 判断hash中指定的字段是否存在
(integer) 1
127.0.0.1:6379> HEXISTS hash1 k1
(integer) 0
127.0.0.1:6379> HSETNX hash1 k2 v2  # 存在不添加,返回0
(integer) 0
127.0.0.1:6379> HSETNX hash1 k6 v6  # 不存在,则添加,返回1
(integer) 1
127.0.0.1:6379> hkeys hash1  # 获取所有的key
1) "k2"
2) "k3"
127.0.0.1:6379> hvals hash1  # 获取所有的值
1) "v2"
2) "v3"
127.0.0.1:6379> hmset hash1 k4 4 k5 5  
OK
127.0.0.1:6379> HINCRBY hash1 k4 1  #`HINCRBY [hashName] [map-key] 值` 设置k4自增1
(integer) 5
127.0.0.1:6379> HINCRBY hash1 k4 -3  #设置k4减3
(integer) 2

ZSet

有序不重复的集合

127.0.0.1:6379> zadd zset1 1 a 2 b 3 c  #`zadd [keyname] 排序值 value` 批量添加元素
(integer) 3
127.0.0.1:6379> zrange zset1 0 -1  # 遍历所有元素
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> zadd zset1 20 d 50 e 30 f
(integer) 3
127.0.0.1:6379> ZRANGEBYSCORE zset1 -inf +inf  #  #将zset的值根据key来从小到大排序并输出
1) "a"
2) "b"
3) "c"
4) "d"
5) "f"
6) "e"
127.0.0.1:6379> ZRANGEBYSCORE zset1 0 20  # 只查询key<=20的值并且排序从小到大
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> ZREVRANGE zset1 0 -1  # 倒序
1) "e"
2) "f"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> ZRANGEBYSCORE zset1 -inf +inf withscores  # 查询指定zset的所有值,包含序号的值
 1) "a"
 2) "1"
 3) "b"
 4) "2"
 5) "c"
 6) "3"
 7) "d"
 8) "20"
 9) "f"
10) "30"
11) "e"
12) "50"
127.0.0.1:6379> zrem zset1 c   # 移除元素
(integer) 1
127.0.0.1:6379> zrange zset1 0 -1
3) "d"
4) "f"
5) "e"
127.0.0.1:6379> zcard zset1   # 查元素个数
(integer) 3
127.0.0.1:6379> zrangebyscore zset1 -inf +inf withscores
1) "d"
2) "20"
3) "f"
4) "30"
5) "e"
6) "50"
127.0.0.1:6379> zcount zset1 20 30  # 查区间的元素个数
(integer) 2

1.2.三大特殊数据类型

1.2.1.geospatial:地理位置

查询城市经纬度,底层的实现原理是ZSet,可以用ZSet的命令
在这里插入图片描述

  • geoadd
    语法·geoadd [keyname] [经度] [纬度] 地理名称·
127.0.0.1:6379> geoadd city 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"  # 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中
(integer) 2
127.0.0.1:6379> geopos city Palermo Catania  # 获取指定城市的经纬度
1) 1) "13.361389338970184"
   2) "38.115556395496299"
2) 1) "15.087267458438873"
   2) "37.50266842333162"
127.0.0.1:6379> ZRANGE city 0 -1  #查所有城市
1) "Palermo"
2) "Catania"
127.0.0.1:6379> GEODIST city Palermo Catania  # 两个城市之间的距离默认单位:米
"166274.1516"
127.0.0.1:6379> GEODIST city Palermo Catania km  # 两个城市之间的距离指定单位:千米
"166.2742"
  • GEORADIUS
    语法GEORADIUS [keyname] 经度 纬度 半径
127.0.0.1:6379> GEORADIUS city 15 37 200 km   # 找以经度15,纬度37为中心,半径200KM的城市
1) "Palermo"
2) "Catania"
127.0.0.1:6379> GEORADIUS city 15 37 200 km withdist  # 找以经度15,纬度37为中心,半径200KM的城市,并打印出直线距离
1) 1) "Palermo"
   2) "190.4424"
2) 1) "Catania"
   2) "56.4413"
127.0.0.1:6379> GEORADIUS city 15 37 200 km withcoord  # 找以经度15,纬度37为中心,半径200KM的城市,并打印出经纬度
1) 1) "Palermo"
   2) 1) "13.361389338970184"
      2) "38.115556395496299"
2) 1) "Catania"
   2) 1) "15.087267458438873"
      2) "37.50266842333162"
127.0.0.1:6379> GEORADIUS city 15 37 200 km count 1  # 找以经度15,纬度37为中心,半径200KM的城市,找其中一个
1) "Catania"
127.0.0.1:6379> GEORADIUS city 15 37 200 km withcoord withdist count 2
1) 1) "Catania"
   2) "56.4413"
   3) 1) "15.087267458438873"
      2) "37.50266842333162"
2) 1) "Palermo"
   2) "190.4424"
   3) 1) "13.361389338970184"
      2) "38.115556395496299"
  • GEORADIUSBYMEMBER
127.0.0.1:6379> GEOADD city 13.583333 37.316667 "Agrigento"
(integer) 1
127.0.0.1:6379> GEORADIUSBYMEMBER city Agrigento 100 km   # 找以“Agrigento”为中心,半径200KM的城市
1) "Agrigento"
2) "Palermo"
  • GEOHASH
    该命令将返回11个字符的Geohash字符串
127.0.0.1:6379> GEOHASH city Palermo Catania   # 返回城市的hash值
1) "sqc8b49rny0"
2) "sqdtr74hyu0"

1.2.2.Hyperloglog:基数

基数统计算法,占用的内存是固定的,2^64个元素,相当于只需要12kb的内存即可。效率极高!

127.0.0.1:6379> pfadd h11 a b c d e f g   # 添加数据集
(integer) 1
127.0.0.1:6379> pfcount h11   # 统计元素个数
(integer) 7
127.0.0.1:6379> pfadd h12 h i j k l m n 
(integer) 1
127.0.0.1:6379> pfmerge h12 h11  # 将h11数据合并到h12,并且去重
OK
127.0.0.1:6379> pfcount h12
(integer) 14
127.0.0.1:6379> pfcount h11
(integer) 7

1.2.3.Bitmap 位存储

Bitmap 位图,数据结构! 都是操作二进制位来进行记录,就只有0 和 1 两个状态!
可以记录登陆信息,打卡记录等状态

127.0.0.1:6379> setbit bit1 1 1   # `setbit [keyname] 描述key 0/1`  设置1的值为1
(integer) 0
127.0.0.1:6379> setbit bit1 2 1
(integer) 0
127.0.0.1:6379> setbit bit1 3 0  # 设置3的值为0
(integer) 0
127.0.0.1:6379> setbit bit1 4 0
(integer) 0
127.0.0.1:6379> getbit bit1 1   # 获取1的值
(integer) 1
127.0.0.1:6379> SETBIT bit1 1 0
(integer) 1
127.0.0.1:6379> GETBIT bit1 1
(integer) 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值