Redis常用命令

五种基本类型

String类型

1.set设置值 get获取值 EXISTS判断key是否存在

set key1 v1

get key1

keys *

EXISTS key1

2.APPEND追加字符串 STRLEN获取字符串的长度

APPEND key1 "hello"

STRLEN key1

3.incr值自增 decr值自减 INCRBY/DECRBY 设置步长,指定增减量

incr views

decr views

INCRBY views 10

DECRBY views 5

4.GETRANGE 获取指定范围的字符串

getrange key1 0 3

5.SETRANGE 字符串替换

SETRANGE key2 1 xx

6.setex (set with expire) 设置过期时间

setex key1 30 "hello"(设置key1 的值为 hello,30秒后过期)

setnx (set if not exist) 不存在再设置(在分布式锁中会常常使用)

setnx key2 "world"(如果key2不存在,创建key2)

7.mset批量设置值 mget批量获取值

mset k1 v1 k2 v2 k3 v3

mget k1 k2 k3

8.设置对象

第一种方式:用json字符串保存一个对象信息 user:{id} {field:value,field:value}

第二种方式:批量分别设置对象的值的方式 user:{id}:{field} {value}

9.getset 获取旧值并设置新值

getset key1 hello

10.使用场景

计数器 例如:INCRBY 统计多单位的数量 例如:批量对象属性的值存储 user:{id}:{field} {value} 粉丝数 对象缓存存储

List类型

1.LPUSH左边添加值 RPUSH右边添加值 LRANGE指定下标获取元素

LPUSH list one(将一个值或者多个值,插入到列表头部 (左))

RPUSH list right(将一个值或者多个值,插入到列表位部 (右))

LRANGE list 0 1(通过区间获取list具体的值 [0,1]闭区间)

2.LPOP移除并返回最左边元素 RPOP移除并返回最右边元素

LRANGE list 0 -1(查询list列表中的所有元素)

3.Lindex 通过下标获取值

lindex list 0(通过下标获得 list 中的某一个值)

4.Llen 返回列表的长度

LLEN list(返回list列表的长度)

5.Lrem 移除指定的值

LREM list 2 333(移除两个"333"的值)

6.Ltrim 截取

LTRIM list 1 2(通过下标截取指定的位置(闭区间),这个list已经被改变了,截断了只剩下截取的元素)

7.rpoplpush 移除原列表的最右边元素,并添加到新列表的最左边

8.Lset 更新当前下标的值,若当前列表不存在更新则会报错

9.Linsert 将某个具体的value插入到列表中某个元素的前面或者后面

lset list 0 bbb(如果列表存在,更新当前下标的值)

10.使用场景

1).List实际上是一个链表,before Node after , left,right 都可以插入值

2).如果key不存在,创建新的链表;如果key存在,新增内容

3).如果移除了所有值,则是空链表,说明不存在了

5).在两边插入或者改动值,效率最高;若是中间元素,相对来说效率会低一点

6).可以使用List实现消息排队、消息队列 (Lpush Rpop)、 栈( Lpush Lpop)

Set类型

1.sadd 添加元素 SMEMBERS查看所有元素

sadd myset hello(添加元素)

SMEMBERS myset(查看集合中所有值)

2.SISMEMBER 判断某一个值是不是在set集合中

SISMEMBER myset hello(判断集合中是否存在某个值,返回1则存在,返回0则不存在)

3.scard 获取集合中的内容元素个数

SCARD myset(scard 获取集合中的内容元素个数)

4.srem 移除set集合中的指定元素

srem myset aaa(移除set集合中的指定元素)

5.SRANDMEMBER 随机抽选出一个元素

SRANDMEMBER myset(随机抽选出一个元素)

6.spop 删除key,随机删除key

SPOP myset(随机弹出key并返回)

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

SMOVE myset myother redis(将myset集合中的元素,移动至myother中)

8.使用场景

数字集合类:

差集 SDIFF

交集 SINTER

并集 SUNION

Hash类型

1.hset设置值 hget获取值

hset myhash f1 hello(hset设置值)

hget myhash f2(hget获取值)

2.hmset批量设置值 hmget批量获取值

hmset user:2 name lisi age 10

hmget user:2 name age

3.hgetall 获取全部的数据

hgetall myhash

4.hdel 删除hash指定key字段,对应的value值也就消失

删除hash的指定key,值也一并删除 hdel myhash f1

5.hlen 获取hash表的字段数量

查看hash中的键值对数量 hlen myhash

6.HEXISTS 判断hash中指定字段是否存在

HEXISTS判断hash中是否存在指定的key,不存在则返回0 HEXISTS myhash f1

7.hkeys只获得所有field,hvals只获得所有value

hkeys myhash(hkeys 只获得所有键key)

hvals myhash( hvals 只获得所有值value )

8.hincrby 设置增量,若是正数则增加,若是负数则减少

设置正数,给指定属性自增值 HINCRBY myhash f5 2

9.hsetnx 设置值时,若key已存在则失败返回0,不存在则成功返回1

hsetnx myhash f6 aaa (设置值时,若key不存在则成功返回1)

10.使用场景

hash 更适合于对象的存储,String更加适合字符串存储。

Zset类型

1.zadd 添加 zrange 查看

zadd myzset 1 one(添加单个元素)

zrange myzset 0 -1(查看指定下标范围的元素)

2.ZRANGEBYSCORE 实现升序 ZREVRANGEBYSCORE 实现降序

ZRANGEBYSCORE salary -inf +inf(根据salary字段升序排列)

ZREVRANGEBYSCORE salary +inf -inf(根据salary字段降序排列)

3.zrem 移除

zrem salary zs(移除元素)

4.zcard 获取有序集合中元素的个数

zcard salary(获取有序集合中元素的个数)

5.zcount 获取集合中指定区间的元素个数

zcount salary 500 1500(获取指定区间的元素个数)

6.使用场景

1). 可以存储班级成绩表、工资表排序等

2). 带权重进行判断:普通消息 1 ,重要消息 2

3). 实现排行榜应用:将播放量或评分放进有序集合中进行遍历, 或者取TopN测试

三种特殊类型

Geospatial 地理位置

1、GEOADD 添加地理位置

geoadd china:city 116.405285 39.90498 beijing(GEOADD 添加地理位置(经度、纬度、名称))

2、GEOPOS 获得当前定位,即坐标值

geopos china:city wuhan(GEOPOS 获得指定城市的经度和纬度)

3、GEODIST 返回两个指定位置之间的距离

geodist china:city beijing nanjing(北京距离南京的直线距离)

4、georadius 以给定的经纬度为中心, 找出某一半径内的元素

其中# 范围可以使用以下其中一个单位:

m 表示单位为米。

km 表示单位为千米。

mi 表示单位为英里。

ft 表示单位为英尺。 ####在给定以下可选项时, 命令会返回额外的信息:

WITHDIST:在返回位置元素的同时,将位置元素与中心之间的距离也一并返回。距离的单位和用户给定的范围单位保持一致。

WITHCOORD:将位置元素的经度和维度也一并返回。

WITHHASH:以52位有符号整数的形式,返回位置元素经过原始geohash编码的有序集合分值。这个选项主要用于底层应用或者调试,实际中的作用并不大。

使用 COUNT <count> 选项去获取前 N 个匹配元素, 但是因为命令在内部可能会需要对所有被匹配的元素进行处理, 所以在对一个非常大的区域进行搜索时, 即使只使用 COUNT 选项去获取少量元素, 命令的执行速度也可能会非常慢。 但是从另一方面来说, 使用 COUNT 选项去减少需要返回的元素数量, 对于减少带宽来说仍然是非常有用的。

命令默认返回未排序的位置元素。 通过以下两个参数, 用户可以指定被返回位置元素的排序方式:

- ASC:根据中心的位置,按照从近到远的方式返回位置元素。
- DESC:根据中心的位置,按照从远到近的方式返回位置元素。
georadius china:city 110 30 1000 km(# 以 110 , 30 这个经纬度为中心,寻找方圆1000km内的城市)

5、GEORADIUSBYMEMBER 根据位置元素找出位于指定范围内的元素

这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的, 而不是像 GEORADIUS 那样, 使用输入的经度和纬度来决定中心点指定成员的位置被用作查询的中心。

GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

GEORADIUSBYMEMBER china:city beijing 1000 km(根据位置元素,查询指定范围内的元素)

6、GEOHASH 返回一个或多个位置元素的 Geohash 表示

GEOHASH china:city beijing nanjing(# 将位置元素的经纬度转换成11位的hash值显示

将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么则距离越近)

7、GEO 底层的实现原理其实就是 Zset

Hyperloglog 基数统计

使用场景

网页的 UV 即页面访问量(例如,一个人访问一个网站多次,但是还是算作一个人)

传统的方式, set(无序不重复)保存用户的id,然后就可以统计 set 中的元素数量作为标准判断。这个方式如果保存大量的用户id,就会比较麻烦,占内存, 我们的目的是为了计数,而不是保存用户id。

现在的方式,可以使用 Hyperloglog进行存储,占用的内存是固定,2^64 不同元素的基数,只需要12KB内存。如果要从内存角度来比较的话Hyperloglog首选。可能会出现0.81%的 错误率,统计UV任务时,是可以忽略不计的。

使用方法

创建第一组元素 my1

127.0.0.1:6379> PFADD my1 a b c d e f g h i j k (integer) 1

统计 my1 元素的基数数量

127.0.0.1:6379> PFCOUNT my1 (integer) 11

创建第二组元素 my2

127.0.0.1:6379> PFADD my2 j k l m n a d e o p (integer) 1

统计 my2 元素的基数数量

127.0.0.1:6379> PFCOUNT my2 (integer) 10

合并两组 my1 my2 => my3 并集

127.0.0.1:6379> PFMERGE my3 my1 my2 OK

统计 my3 元素的基数数量,即并集的数量

127.0.0.1:6379> PFCOUNT my3 (integer) 16

Bitmap 位存储

使用场景:统计用户信息,活跃 或 不活跃、 登录 或 未登录、 打卡 或 未打卡。涉及 两个状态的,都可以使用Bitmap位存储。

Bitmap 位图也是一种数据结构,都是操作二进制位来进行记录,就只有 0 和 1 两个状态。等价于 365 天 = 365 bit 1字节 = 8bit 46 个字节左右,即若记录某个学生的一年打卡情况,则只需耗费46个字节左右。

使用方法:

使用Bitmap来记录周一到周日的打卡,例如,周一: 1 周二: 1 周三: 1 周四:0 ......

127.0.0.1:6379> setbit ding 0 1 (integer) 0 127.0.0.1:6379> setbit ding 1 1 (integer) 0 127.0.0.1:6379> setbit ding 2 1 (integer) 0 127.0.0.1:6379> setbit ding 3 0 (integer) 0 127.0.0.1:6379> setbit ding 4 1 (integer) 0 127.0.0.1:6379> setbit ding 5 1 (integer) 0 127.0.0.1:6379> setbit ding 6 0 (integer) 0 127.0.0.1:6379> setbit ding 7 0 (integer) 0

查看某一天是否有打卡,返回1则打卡,返回0则未打卡

127.0.0.1:6379> getbit ding 1 (integer) 1 127.0.0.1:6379> getbit ding 3 (integer) 0

统计操作,统计打卡的天数,即统计这周的打卡记录,就可以看到是否有全勤

127.0.0.1:6379> bitcount ding (integer) 5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值