目 录CONTENT

文章目录

redis数据库常用命令

简中仙
2023-01-31 / 0 评论 / 0 点赞 / 48 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2023-10-08,若内容或图片失效,请留言反馈。 本文如有错误或者侵权的地方,欢迎您批评指正!

一、Redis 数据类型

数据类型可以存储的值操作
STRING字符串、整数或者浮点数对整个字符串或者字符串的其中一部分执行操作
对整数和浮点数执行自增或者自减操作
LIST列表从两端压入或者弹出元素
读取单个或者多个元素
进行修剪,只保留一个范围内的元素
SET无序集合添加、获取、移除单个元素
检查一个元素是否存在于集合中
计算交集、并集、差集
从集合里面随机获取元素
HASH包含键值对的无序散列表添加、获取、移除单个键值对
获取所有键值对
检查某个键是否存在
ZSET有序集合添加、获取、删除元素
根据分值范围或者成员来获取元素
计算一个键的排名

1、全局命令

# redis-cli
127.0.0.1:6379> keys *             //列出所有键值名,但在企业环境禁止使用
1) "mylist"
2) "v5"
3) "k2"
4) "k3"
5) "k1"
6) "v1"
7) "key:__rand_int__"
127.0.0.1:6379> keys v*             //查看当前数据库中以v开头的数据
1) "v5"
2) "v22"
3) "v1"
127.0.0.1:6379> keys v?             //查看当前数据库中以v开头后面包含任意一位的数据
1) "v5"
2) "v1"
127.0.0.1:6379> keys v??             //查看当前数据库中以v开头后面包含任意两位的数据
1) "v22"
127.0.0.1:6379> DBSIZE             //查看有多少键值数
(integer) 8
127.0.0.1:6379> EXISTS k1             //查看键值是否存在
(integer) 1
127.0.0.1:6379> EXPIRE k2 20             //设置K2过期时间为20秒,20秒后k2自动取消
(integer) 1
127.0.0.1:6379> PERSIST k2             //取消k2的过期时间
(integer) 1
127.0.0.1:6379> TTL k2             //查看k2的生命周期
(integer) 15
127.0.0.1:6379> TYPE k1             //查看数据类型
string

2、字符串类型:string

# redis-cli
127.0.0.1:6379> set k1 1             //创建键值
OK
127.0.0.1:6379> get k1             //查看键值
"1"
127.0.0.1:6379> del k1             //删除键值 
(integer) 1
127.0.0.1:6379> get k1             //查看键值
(nil)
127.0.0.1:6379> exists v22             //判断v22键是否存在
(integer) 1             //表示v22键存在
127.0.0.1:6379> exists v2             //判断v2键是否存在
(integer) 0             //表示v2键不存在
127.0.0.1:6379> keys v*             //查看当前数据库中以v开头的数据
1) "v5"
2) "v22"
3) "v1"
127.0.0.1:6379> rename v22 v2             //将v22重命名为v2
OK
127.0.0.1:6379> keys v*             //查看当前数据库中以v开头的数据
1) "v2"
2) "v5"
3) "v1"
127.0.0.1:6379> get v1             //查看键值
"4"
127.0.0.1:6379> get v2             //查看键值
"5"
127.0.0.1:6379> rename v1 v2             //将v1重命名为v2
OK
127.0.0.1:6379> get v1             //查看键值
(nil)
127.0.0.1:6379> get v2             //查看键值
"4"             //源key的值会覆盖目标key的值
127.0.0.1:6379> get v2
"4"
127.0.0.1:6379> get k2
"2"
127.0.0.1:6379> renamenx v2 k2
(integer) 0             //目标key存在则不进行重命名
127.0.0.1:6379> INCR k3             //键值k3为整数,递增加1
(integer) 4
127.0.0.1:6379> INCRBY k3 10             //递增k3的量值10 
(integer) 14
127.0.0.1:6379> MSET k4 v4 k5 v5 k6 v6 k7 v7             //批量创建键值
OK
127.0.0.1:6379> MGET k4 k5 k6 k7             //批量查看键值
1) "v4"
2) "v5"
3) "v6"
4) "v7"

3、列表:list

127.0.0.1:6379> RPUSH list1 1 2 3 4             //创建列表list1,值为1 2 3 4
(integer) 4
127.0.0.1:6379> RPUSH list1 5 6 7 8             //在list1右侧添加5 6 7 8
(integer) 8
127.0.0.1:6379> LPUSH list1 0             //在list1左侧添加0
(integer) 9
127.0.0.1:6379> LRANGE list1 0  -1             //查看list1所有值
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
7) "6"
8) "7"
9) "8"
127.0.0.1:6379> RPOP list1             //删除右侧最后一个值
"8"
127.0.0.1:6379> LPOP list1             //删除左侧第一个值
"0"
127.0.0.1:6379> LTRIM list1 0 2             //仅保留前3位,其他值删除
OK
127.0.0.1:6379> LRANGE list1 0  -1
1) "1"
2) "2"
3) "3"

4、哈希:hash

127.0.0.1:6379> HMSET user:1000 username zhangsan age 17 job it             //创建hash键值user:1000 
OK
127.0.0.1:6379> HGET user:1000 username             //查看键值中username参数
"zhangsan"
127.0.0.1:6379> HGET user:1000 age             //查看键值中age参数
"17"
127.0.0.1:6379> HGET user:1000 job             //查看键值中job参数
"it"
127.0.0.1:6379> HMSET user:1000 tel 18866668888             //添加值tel
OK

5、集合:set

127.0.0.1:6379> SADD set1 1 2 3             //创建集合set1
(integer) 3
127.0.0.1:6379> SMEMBERS set1             //查看集合set1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SADD set1 1 4             //为集合set1添加值1 4 ,但集合特性是去除重复,所以1无法再添加
(integer) 1
127.0.0.1:6379> SREM set1 1 4             //删除集合的值1 4
(integer) 2
127.0.0.1:6379> sadd set2 1 4 5             //创建第二个集合set2
(integer) 3
127.0.0.1:6379> SDIFF set1 set2             //求差集
1) "2"
2) "3"
127.0.0.1:6379> SINTER set1 set2             //求合集(交集)
(empty list or set)
127.0.0.1:6379> SUNION set1 set2             //求并集
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

6、多数据库常用命令

1、多数据库间切换:使用select命令切换数据库

127.0.0.1:6379> select 10
OK
127.0.0.1:6379[10]> select 15
OK
127.0.0.1:6379[15]> select 0
OK

2、多数据库间移动数据
Redis的多数据库在一定程度上是相对独立的。例如,在数据库0上面存放的K1的数据,在其他的1-15的数据库上是无法查看到的。

127.0.0.1:6379> set k1 100
OK
127.0.0.1:6379> get k1
"100"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get k1
(nil)

Redis数据库提供了一个move命令,其可以进行多数据库的数据移动。命令的基本语法格式为 "move key dbindex" 。其中,key表示当前数据库的目标键,dbindex表示目标数据库的序号

127.0.0.1:6379> get k1
"100"
127.0.0.1:6379> move k1 1
(integer) 1
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get k1
"100"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> get k1
(nil)

3、清除数据库内数据

清空当前数据库的数据,使用FLUSHDB命令

清空所有数据库的数据,使用FLUSHALL命令

二、Redis 高级数据类型

1、BitMap

在我们平时开发过程中,会有⼀些 bool 型数据需要存取,⽐如⽤户⼀年的签到记录,签了是 1,没签是0,要记录 365 天。如果使⽤普通的 key/value,每个⽤户要记录 365 个,当⽤户上亿的时候,需要的存储空间是惊⼈的。

为了解决这个问题,Redis 提供了位图数据结构,这样每天的签到记录只占据⼀个位,365 天就是 365个位,46 个字节 (⼀个稍⻓⼀点的字符串) 就可以完全容纳下,这就⼤⼤节约了存储空间。

位图不是特殊的数据结构,它的内容其实就是普通的字符串,也就是 byte 数组。我们可以使⽤普通的get/set 直接获取和设置整个位图的内容,也可以使⽤位图操作 getbit/setbit 等将 byte 数组看成「位数组」来处理。

当我们要统计⽉活的时候,因为需要去重,需要使⽤ set 来记录所有活跃⽤户的 id,这⾮常浪费内存。

这时就可以考虑使⽤位图来标记⽤户的活跃状态。每个⽤户会都在这个位图的⼀个确定位置上,0 表示不活跃,1 表示活跃。然后到⽉底遍历⼀次位图就可以得到⽉度活跃⽤户数。这个类型不仅仅可以⽤来让我们改⼆进制改字符串值,最经典的就是⽤户连续签到。

key 可以设置为 前缀:⽤户id:年⽉ 譬如 setbit sign:123:1909 0 1

代表⽤户ID=123签到,签到的时间是19年9⽉份,0代表该⽉第⼀天,1代表签到了

第⼆天没有签到,⽆需处理,系统默认为0

第三天签到 setbit sign:123:1909 2 1

可以查看⼀下⽬前的签到情况,显示第⼀天和第三天签到了,前8天⽬前共签到了2天

1、BitMap 命令

  • SETBIT - 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
  • GETBIT - 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
  • BITCOUNT - 计算给定字符串中,被设置为 1 的比特位的数量。
  • BITPOS
  • BITOP
  • BITFIELD

2、BitMap 示例

127.0.0.1:6379> setbit sign:123:1909 0 1
0
127.0.0.1:6379> setbit sign:123:1909 2 1
0
127.0.0.1:6379> getbit sign:123:1909 0
1
127.0.0.1:6379> getbit sign:123:1909 1
0
127.0.0.1:6379> getbit sign:123:1909 2
1
127.0.0.1:6379> getbit sign:123:1909 3
0
127.0.0.1:6379> bitcount sign:123:1909 0 0
2

2、HyperLogLog

HyperLogLog 是用于计算唯一事物的概率数据结构(从技术上讲,这被称为估计集合的基数)。如果统计唯一项,项目越多,需要的内存就越多。因为需要记住过去已经看过的项,从而避免多次统计这些项。

HyperLogLog 提供了两个指令 pfadd 和 pfcount,根据字⾯意义很好理解,⼀个是增加计数,⼀个是获取计数。

pfadd ⽤法和 set 集合的 sadd 是⼀样的,来⼀个⽤户 ID,就将⽤户 ID 塞进去就是,pfcount 和 scard⽤法是⼀样的,直接获取计数值。

HyperLogLog 命令

  • PFADD - 将任意数量的元素添加到指定的 HyperLogLog 里面。
  • PFCOUNT - 返回 HyperLogLog 包含的唯一元素的近似数量。
  • PFMERGE - 将多个 HyperLogLog 合并(merge)为一个 HyperLogLog , 合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的可见集合(observed set)的并集。合并得出的 HyperLogLog 会被储存在 destkey 键里面, 如果该键并不存在, 那么命令在执行之前, 会先为该键创建一个空的 HyperLogLog 。

示例:

127.0.0.1:6379> pfadd codehole user1
(integer) 1
127.0.0.1:6379> pfcount codehole
(integer) 1
127.0.0.1:6379> pfadd codehole user2
(integer) 1
127.0.0.1:6379> pfcount codehole
(integer) 2
127.0.0.1:6379> pfadd codehole user3
(integer) 1
127.0.0.1:6379> pfcount codehole
(integer) 3
127.0.0.1:6379> pfadd codehole user4
(integer) 1
127.0.0.1:6379> pfcount codehole
(integer) 4
127.0.0.1:6379> pfadd codehole user5
(integer) 1
127.0.0.1:6379> pfcount codehole
(integer) 5
127.0.0.1:6379> pfadd codehole user6
(integer) 1
127.0.0.1:6379> pfcount codehole
(integer) 6
127.0.0.1:6379> pfadd codehole user7 user8 user9 user10
(integer) 1
127.0.0.1:6379> pfcount codehole
(integer) 10

3、GEO

这个功能可以将用户给定的地理位置(经度和纬度)信息储存起来,并对这些信息进行操作。

GEO 命令

三、DB

在 Redis 下,默认有16个数据库,数据库是由一个整数索引标识(就是说数据库名是 0-15),而不是由一个数据库名称。默认情况下,一个客户端连接到数据库 0。

0

评论区