Redis命令行对常用数据结构String、list、set、zset、hash等增删改查操作

1.Redis命令的小套路

- NX:not exist
- EX:expire
- M:multi

2.基本操作

①切换数据库

Redis默认有16个数据库。
115 # Set the number of databases. The default database is DB 0, you can select
116 # a different one on a per-connection basis using SELECT <dbid> where
117 # dbid is a number between 0 and 'databases'-1
118 databases 16
使用select进行切换,数据库索引从0开始
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> select 0
OK
127.0.0.1:6379> 

②查看数据库长度

数据库长度就是这个数据库中存储了多少条数据。

127.0.0.1:6379> dbsize
(integer) 3

③清空全库

127.0.0.1:6379> flushall

3.KEY操作

在实际操作中对于Key的定义大家注意下面几点:
- Key不要太长,超过1024字节将消耗过多内存,降低查询效率。尽管Redis支持的Key最大长度为    512MB。
- Key仍然要做到见名知意。
- 在同一个项目中遵循同一个命名规范,习惯上多个单词用“:”分开。例如:“user:token:session:id”
- Redis命令不区分大小写,Key区分大小写。

●KEYS PATTERN
  把匹配PATTERN的key返回。PATTERN中可以使用“*”匹配多个字符,使用“?”匹配单个字符
●TYPE KEY
  返回KEY对应的值的类型
●MOVE KEY DB
  把一组键值对数据移动到另一个数据库中
●DEL KEY [KEY ...]
  根据KEY进行删除,至少要指定一个KEY
●EXISTS KEY [KEY ...]
  检查指定的KEY是否存在。指定一个KEY时,存在返回1,不存在返回0。可以指定多个,返回存在的KEY的数量。
●RENAME KEY NEWKEY
  重命名一个KEY,NEWKEY不管是否是已经存在的都会执行,如果NEWKEY已经存在则会被覆盖。
●RENAMENX KEY NEWKEY
  只有在NEWKEY不存在时能够执行成功,否则失败
●TTL KEY
  以秒为单位查看KEY还能存在多长时间
  正数:剩余的存活时间(单位:秒)
  -1:永不过期
  -2:不存在的Key
●EXPIRE KEY SECONDS
  给一个KEY设置在SECONDS秒后过期,过期会被Redis移除。
●PERSIST KEY
  移除过期时间,变成永久key

4.string操作

●SET KEY VALUE [EX SECONDS] [PX MILLISECONDS] [NX|XX]
  给KEY设置一个string类型的值。
  EX参数用于设置存活的秒数。
  PX参数用于设置存活的毫秒数。
  NX参数表示当前命令中指定的KEY不存在才行。
  XX参数表示当前命令中指定的KEY存在才行。
●GET KEY
  根据key得到值,只能用于string类型。
●APPEND KEY VALUE
  把指定的value追加到KEY对应的原来的值后面,返回值是追加后字符串长度
●STRLEN KEY
  直接返回字符串长度
●INCR KEY
  自增1(要求:参与运算的数据必须是整数且不能超过整数Integer范围)
●DECR KEY
  自减1(要求:参与运算的数据必须是整数且不能超过整数Integer范围)
●INCRBY KEY INCREMENT
  原值+INCREMENT(要求:参与运算的数据必须是整数且不能超过整数Integer范围)
●DECRBY KEY DECREMENT
  原值-DECREMENT(要求:参与运算的数据必须是整数且不能超过整数Integer范围)
●GETRANGE KEY START END
  从字符串中取指定的一段,索引从0开始
  START是开始取值的索引
  END是结束取值的索引
●SETRANGE KEY OFFSET VALUE
  从offset(从0开始的索引)开始使用VALUE进行替换
  包含offset位置
●SETEX KEY SECONDS VALUE
  设置KEY,VALUE时指定存在秒数
●SETNX KEY VALUE
  新建字符串类型的键值对
●MSET KEY VALUE [KEY VALUE ...]
  一次性设置一组多个键值对
●MGET KEY [KEY ...]
  一次性指定多个KEY,返回它们对应的值,没有值的KEY返回值是(nil)
●MSETNX KEY VALUE [KEY VALUE ...]
  一次性新建多个值
●GETSET KEY VALUE
  设置新值,同时能够将旧值返回

5.list操作

●LPUSH key value [value ...]
  针对key指定的list,从左边放入元素
●RPUSH key value [value ...]
  针对key指定的list,从右边放入元素
●LRANGE key start stop
  根据list集合的索引打印元素数据
  正着数:0,1,2,3,...
  倒着数:-1,-2,-3,...
●LLEN key
  返回list集合的长度
●LPOP key
  从左边弹出一个元素。
  弹出=返回+删除。
●RPOP key
  从右边弹出一个元素。
●RPOPLPUSH source destination
  从source中RPOP一个元素,LPUSH到destination中
●LINDEX key index
  根据索引从集合中取值
●LINSERT key BEFORE|AFTER pivot value
  在pivot指定的值前面或后面插入value
  如果pivot值有重复的,那么就从左往右数,以第一个遇到的pivot为基准
  BEFORE表示放在pivot前面
  AFTER表示放在pivot后面
●LPUSHX key value
  只能针对存在的list执行LPUSH
●LREM key count value
  根据count指定的数量从key对应的list中删除value
  具体执行时从左往右删除,遇到一个删一个,删完为止
●LSET key index value
  把指定索引位置的元素替换为另一个值
●LTRIM key start stop
  仅保留指定区间的数据,两边的数据被删除

6.set操作

●SADD key member [member ...]
  给key指定的set集合中存入数据,set会自动去重
●SMEMBERS key
  返回可以指定的set集合中所有的元素
●SCARD key
  返回集合中元素的数量
●SISMEMBER key member
  检查当前指定member是否是集合中的元素
  返回1:表示是集合中的元素
  返回0:表示不是集合中的元素
●SREM key member [member ...]
  从集合中删除元素
●SINTER key [key ...]
  将指定的集合进行“交集”操作
  集合A:a,b,c
  集合B:b,c,d
  交集:b,c
●SINTERSTORE destination key [key ...]
  取交集后存入destination
●SDIFF key [key ...]
  将指定的集合执行“差集”操作
  集合A:a,b,c
  集合B:b,c,d
  A对B执行diff:a
  相当于:A-交集部分
●SDIFFSTORE destination key [key ...]
●SUNION key [key ...]
  将指定的集合执行“并集”操作
  集合A:a,b,c
  集合B:b,c,d
  并集:a,b,c,d
●SUNIONSTORE destination key [key ...]
●SMOVE source destination member
  把member从source移动到destination

【测试数据
SADD set:lot a b c d e f g h i j k l m n o p q r s t u v w x y z aa bb cc dd ee ff gg hh ii jj kk ll mm nn oo pp qq rr ss tt uu vv ww xx yy zz
】

●SSCAN key cursor [MATCH pattern] [COUNT count]
  基于游标的遍历。cursor是游标值,第一次显示第一块内容时,游标取值为0;根据后续返回的新的游标值获取下一块数据。直到游标值变成0,说明数据遍历完成。
●SRANDMEMBER key [count]
  从集合中随机返回count个数量的元素,count不指定就返回1个(数据有可能重复出现)
●SPOP key [count]
  从集合中随机弹出count个数量的元素,count不指定就弹出1个(保证不会有重复数据出现)

7.hash操作

●HSET key field value
  插入新数据返回1
  修改旧数据返回0
●HGETALL key
●HGET key field
●HLEN key
●HKEYS key
●HVALS key
●HEXISTS key field
●HDEL key field [field ...]
●HINCRBY key field increment
●HMGET key field [field ...]
●HMSET key field value [field value ...]
●HSETNX key field value
  要求field是新建的

8.zset操作

●ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
●ZRANGE key start stop [WITHSCORES]
●ZCARD key
●ZSCORE key member
●ZINCRBY key increment member
●ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
  在分数的指定区间内返回数据
  min参数可以通过 -inf 表示负无穷
  max参数可以通过 +inf 表示正无穷

  默认是闭区间
  可以通过 (min (max 形式指定开区间,例如:(50 (80
●ZRANK key member
  先对分数进行升序排序,返回member的排名。排名从0开始
●ZREM key member [member ...]

9.Geospatial

查询经纬度数据  http://www.jsons.cn/lngcode

①添加地理位置

GEOADD key longitude latitude member [longitude latitude member ...]

规则:

1.两极无法直接添加,一般会下载城市数据,直接通过 Java 程序一次性导入。

2.取值范围 有效的经度从 -180 度到 180 度。 有效的纬度从 -85.05112878 度到 85.05112878 度。 当坐标位置超出指定范围时,该命令将会返回一个错误。

3.已经添加的数据,是无法再次往里面添加的。

192.168.109.100:6379> GEOADD "china:city" 114.085947 22.547 shenzhen
(integer) 1
192.168.109.100:6379> GEOADD "china:city" 113.280637 23.125178 guangzhou
(integer) 1

②查询已添加的地理位置

Geo类型在Redis内部其实是使用zset类型存储的,所以可以使用zset的命令进行常规操作。

192.168.109.100:6379> ZRANGE china:city 0 -1 
1) "shenzhen"
2) "guangzhou"
192.168.109.100:6379> ZRANGE china:city 0 -1 WITHSCORES
1) "shenzhen"
2) "4046433733682118"
3) "guangzhou"
4) "4046533764066819"

③删除已添加的地理位置

192.168.109.100:6379> ZREM china:city guangzhou
(integer) 1

④获取指定地区的坐标值

192.168.109.100:6379> GEOPOS china:city shenzhen
1) 1) "114.08594459295272827"
   2) "22.54699993773966327"

⑤计算两地之间的直线距离

192.168.109.100:6379> GEODIST china:city guangzhou shenzhen km
"104.6426"

单位:

m 表示单位为米[默认值]。

km 表示单位为千米。 mi 表示单位为英里。

ft 表示单位为英尺。

如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位。

⑥以给定坐标为中心,在指定半径内查找元素

192.168.109.100:6379> GEORADIUS china:city 110 20 1000 km WITHCOORD WITHDIST
1) 1) "shenzhen"
   2) "509.4622"
   3) 1) "114.08594459295272827"
      2) "22.54699993773966327"
2) 1) "guangzhou"
   2) "485.7406"
   3) 1) "113.28063815832138062"
      2) "23.12517743834835215"

WITHCOORD表示显示经纬度

WITHDIST表示显示到中心的距离

⑦在指定元素周围查找其他元素

192.168.109.100:6379> GEORADIUSBYMEMBER china:city shenzhen 300 km WITHCOORD WITHDIST
1) 1) "shenzhen"
   2) "0.0000"
   3) 1) "114.08594459295272827"
      2) "22.54699993773966327"
2) 1) "guangzhou"
   2) "104.6426"
   3) 1) "113.28063815832138062"
      2) "23.12517743834835215"

10.hyperloglogs

①基数概念

一个集合中不重复元素的个数。例如:集合{1,2,5,1,7,2,5}中元素个数是7,但是基数是4。而hyperloglogs的主要功能就是进行基数统计。

②hyperloglogs命令

[1]添加

192.168.109.100:6379> PFADD user:access:1 tom jerry andy jim andy jerry tom
(integer) 1
192.168.109.100:6379> PFADD user:access:2 andy jerry tom bob kate
(integer) 1
192.168.109.100:6379> PFADD user:access:3 mary harry tom jerry
(integer) 1

[2]统计

192.168.109.100:6379> PFCOUNT user:access:1 user:access:2 user:access:3
(integer) 8

[3]合并

192.168.109.100:6379> PFMERGE user:access:merge user:access:1 user:access:2 user:access:3
OK
192.168.109.100:6379> PFCOUNT user:access:merge
(integer) 8

11.bitmap位图

直接对数据的二进制位进行操作

192.168.109.100:6379[5]> set a hello
OK
192.168.109.100:6379[5]> GETBIT a 0
(integer) 0
192.168.109.100:6379[5]> GETBIT a 1
(integer) 1
192.168.109.100:6379[5]> GETBIT a 2
(integer) 1
192.168.109.100:6379[5]> GETBIT a 3
(integer) 0
192.168.109.100:6379[5]> GETBIT a 4
(integer) 1
192.168.109.100:6379[5]> GETBIT a 5
(integer) 0
192.168.109.100:6379[5]> SETBIT a 5 1
(integer) 0
192.168.109.100:6379[5]> get a
"lello"
192.168.109.100:6379[5]> BITCOUNT a
(integer) 22

setbit设置指定比特位

getbit获取指定比特位

bitcount统计所有比特位中1的数量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值