redis9种数据类型的基本操作,redis持久化练习—分别启用rdb和aof,并查看是否有对应文件生成

一.九种数据类型基本操作

1.key

2.string

3.list

4.set

5.zset

6.hash

7. bitmaps

8.hyperloglog

二.redis数据持久化

1.RDB方式

2.AOF方式


一.九种数据类型基本操作

1.key

命令语法 描述 演示
keys * 匹配数据库中所有key 127.0.0.1:6379> keys *
 1) "k3"
 2) "k7"
 3) "k8"
 4) "k11"
......
 
keys h?llo 匹配hello,hallo,hxllo等,?表示任意 127.0.0.1:6379> keys k?
1) "k3"
2) "k7"
3) "k8"
4) "k4"
5) "k1"
6) "ki"

keys h*llo

匹配hllo和heeello等,*表示0个或多个 127.0.0.1:6379> keys k*1
1) "k11"
2) "khash1"
3) "k1"
keys h[ae]llo 匹配hello和hallo 127.0.0.1:6379> keys k[i1]
1) "k1"
2) "ki"
DEL key 该命令用于在 key 存在时删除 key 127.0.0.1:6379> set k1 q
OK
127.0.0.1:6379> del k1
(integer) 1
DUMP key 序列化给定 key ,并返回被序列化的值

127.0.0.1:6379> set re hello
OK
127.0.0.1:6379> dump re
"\x00\x05hello\b\x00\xda_3\xc9\xcc-\xaa2"

127.0.0.1:6379> dump hell
(nil)

#hell不存在

EXISTS key 检查给定 key 是否存在,存在返回1,否则返回0 127.0.0.1:6379> exists k20
(integer) 0
127.0.0.1:6379> exists re
(integer) 1
EXPIRE key seconds 为给定 key 设置过期时间,以秒计 127.0.0.1:6379> get re
"hello"
127.0.0.1:6379> expire re 10
(integer) 1
127.0.0.1:6379> get re
"hello"
127.0.0.1:6379> get re
(nil)
EXPIREAT key timestamp EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳 127.0.0.1:6379> expireat qw 12938
(integer) 1
PEXPIRE key milliseconds 设置 key 的过期时间以毫秒计 127.0.0.1:6379> pexpire qw 1500
(integer) 1
PEXPIREAT key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计 127.0.0.1:6379> get k5
"qwe"
127.0.0.1:6379> PEXPIRE k5 15572637268
(integer) 1
KEYS pattern 查找所有符合给定模式( pattern)的 key 127.0.0.1:6379> keys k*
 1) "ki"
 2) "k3"
 3) "k10"
 4) "k7"
 5) "k8"
 6) "k11"
 7) "k5"
 8) "k6"
 9) "k4"
10) "k12"
11) "key-value-store"
12) "k2"
MOVE key db 将当前数据库的 key 移动到给定的数据库 db 当中 127.0.0.1:6379> set su db1
OK
127.0.0.1:6379> move su 1
(integer) 1
127.0.0.1:6379> exists su
(integer) 0
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> exists su
(integer) 1
PERSIST key 移除 key 的过期时间,key 将持久保持 127.0.0.1:6379> get k6
"a"
127.0.0.1:6379> expire k6 20
(integer) 1
127.0.0.1:6379> ttl k6
(integer) 18
127.0.0.1:6379> persist k6
(integer) 1
127.0.0.1:6379> ttl k6
(integer) -1
127.0.0.1:6379> get k6
"a"
PTTL key 以毫秒为单位返回 key 的剩余的过期时间 127.0.0.1:6379> pexpire k6 10000
(integer) 1
127.0.0.1:6379> pttl k6
(integer) 5212
TTL key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live) 127.0.0.1:6379> expire k6 20
(integer) 1
127.0.0.1:6379> ttl k6
(integer) 18
RANDOMKEY 从当前数据库中随机返回一个 key 127.0.0.1:6379> mset a apple b banana
OK
127.0.0.1:6379> randomkey
"k7"
127.0.0.1:6379> randomkey
"key"
127.0.0.1:6379> randomkey
"k3"
127.0.0.1:6379> randomkey
"k8"
127.0.0.1:6379> randomkey
"k5"
127.0.0.1:6379> randomkey
"k2"
127.0.0.1:6379> randomkey
"rank"
127.0.0.1:6379> randomkey
"k2"
127.0.0.1:6379> randomkey
"b"
RENAME key newkey 修改 key 的名称 127.0.0.1:6379> exists k2
(integer) 1
127.0.0.1:6379> rename k2 kkk
OK
127.0.0.1:6379> exists k2
(integer) 0
127.0.0.1:6379> exists kkk
(integer) 1
RENAMENX key newkey 仅当 newkey 不存在时,将 key 改名为 newkey 127.0.0.1:6379> exists k5
(integer) 1
127.0.0.1:6379> exists kkk
(integer) 1
127.0.0.1:6379> renamenx k5 kkk
(integer) 0
127.0.0.1:6379> renamenx k5 asd
(integer) 1
SCAN cursor [MATCH pattern] [COUNT count] 迭代数据库中的数据库键 127.0.0.1:6379> scan 0
1) "19"
2)  1) "b"
    2) "k8"
    3) "k3"
    4) "num"
    5) "key-value-store"
    6) "ki"
    7) "asd"
    8) "key"
    9) "k12"
   10) "k7"
TYPE key 返回 key 所储存的值的类型 127.0.0.1:6379> type kkk
string
SELECT db 选择数据库 数据库为0-15(默认一共16个数据库) 127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> select 0
OK
DBSIZE 查看数据库的key数量 127.0.0.1:6379> dbsize
(integer) 16
FLUSHDB 清空当前数据库
FLUSHALL 清空所有数据库
ECHO 打印命令 127.0.0.1:6379> echo 666
"666"

2.string

String 是 redis 最基本的类型,最大能存储 512MB,一个 key 对应一个 value。

String 类型是二进制安全的,redis 的 string 可以包含任何数据,比如jpg图片或者序列化的对象,string一般用于缓存、限流、计数器、分布式锁、分布式Session。

命令语法 描述 演示
SET key value 设置指定 key 的值 127.0.0.1:6379> set k1 a
OK
GET key 获取指定 key 的值 127.0.0.1:6379> get k1
"a"
GETRANGE key start end 返回 key 中字符串值的子字符,end=-1时表示全部 127.0.0.1:6379> set k2 asdfghjkl
OK
127.0.0.1:6379> getrange k2 2 5
"dfgh"
SETBIT key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit) 127.0.0.1:6379> setbit num 123456 1
(integer) 0
GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit) 127.0.0.1:6379> getbit num 123456
(integer) 1
127.0.0.1:6379> getbit num 123
(integer) 0
MSET key value [key value ...] 同时设置一个或多个 key-value 对 127.0.0.1:6379> mset k2 s k3 f
OK
MGET key1 [key2..] 获取所有(一个或多个)给定 key 的值 127.0.0.1:6379> mget k2 k3
1) "s"
2) "f"
GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value) 127.0.0.1:6379> getset k1 qwe
"a"
SETEX key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位) 127.0.0.1:6379> setex k3 5 r
OK
127.0.0.1:6379> get k3
"r"
127.0.0.1:6379> get k3
(nil)
SETNX key value 只有在 key 不存在时设置 key 的值 127.0.0.1:6379> set k5 w
OK
127.0.0.1:6379> setnx k5 w
(integer) 0
127.0.0.1:6379> setnx k6 q
(integer) 1
SETRANGE key offset value 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始 127.0.0.1:6379> get k6
"ansjankdan"
127.0.0.1:6379> setrange k6 3 aaa
(integer) 10
127.0.0.1:6379> get k6
"ansaaakdan"
STRLEN key 返回 key 所储存的字符串值的长度 127.0.0.1:6379> strlen k6
(integer) 10
MSETNX key value [key value ...] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在 127.0.0.1:6379> msetnx k10 asd k11 dsa k12 qwe
(integer) 1
127.0.0.1:6379> mget k10 k11 k12
1) "asd"
2) "dsa"
3) "qwe"
PSETEX key milliseconds value 与 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间 127.0.0.1:6379> psetex k1 1000 "aaa"
OK
INCR key 将 key 中储存的数字值增一 127.0.0.1:6379> get k2
"1"
127.0.0.1:6379> incr k2
(integer) 2
127.0.0.1:6379> get k2
"2"
INCRBY key increment 将 key 所储存的值加上给定的增量值(increment) 127.0.0.1:6379> get k2
"2"
127.0.0.1:6379> incrby k2 10
(integer) 12
127.0.0.1:6379> get k2
"12"
INCRBYFLOAT key increment 将 key 所储存的值加上给定的浮点增量值(increment) 127.0.0.1:6379> get k2
"12"
127.0.0.1:6379> incrbyfloat k2 0.2
"12.2"
127.0.0.1:6379> get k2
"12.2"
DECR key 将 key 中储存的数字值减一 127.0.0.1:6379> get k3
"5"
127.0.0.1:6379> decr k3
(integer) 4
127.0.0.1:6379> get k3
"4"
DECRBY key decrement key 所储存的值减去给定的减量值(decrement) 127.0.0.1:6379> get k3
"4"
127.0.0.1:6379> decrby k3 2
(integer) 2
127.0.0.1:6379> get k3
"2"
APPEND key value 如果 key 已经存在并且是一个字符串,APPEND 命令将指定的 value 追加到该 key 原来值 value 的末尾 127.0.0.1:6379> get k4
"a"
127.0.0.1:6379> append k4 b
(integer) 2
127.0.0.1:6379> get k4
"ab"

3.list

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含 2^32^ - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

命令语法 描述 演示
LPUSH key value1 [value2] 将一个或多个值插入到列表头部 127.0.0.1:6379>  lpush klist1 a,b,c
(integer) 1
127.0.0.1:6379>  lpush klist1 re
(integer) 2
127.0.0.1:6379>  lpush klist1 vgfb
(integer) 3
127.0.0.1:6379> lrange klist1 0 -1
1) "vgfb"
2) "re"
3) "a,b,c"
LPOP key 移出并获取列表的第一个元素 127.0.0.1:6379> rpush klist1 b
(integer) 2
127.0.0.1:6379> lpop klist1
"a"
LRANGE key start stop 获取列表指定范围内的元素 127.0.0.1:6379> lrange klist1 0 1
1) "b"
LPUSHX key value 将一个值插入到已存在的列表头部 127.0.0.1:6379> lpush klist1 a,b,c
(integer) 1
RPUSH key value1 [value2] 在列表中添加一个或多个值 127.0.0.1:6379> rpush klist1 b
(integer) 2
RPOP key 移除列表的最后一个元素,返回值为移除的元素 127.0.0.1:6379> lrange klist1 0 -1
1) "b"
127.0.0.1:6379>  lpush klist1 a,b,c
(integer) 2
127.0.0.1:6379> rpop klist1
"b"
127.0.0.1:6379> lrange klist1 0 -1
1) "a,b,c"
RPUSHX key value 为已存在的列表添加值 127.0.0.1:6379> rpush klist1 r
(integer) 2
127.0.0.1:6379> lrange klist1 0 -1
1) "a,b,c"
2) "r"
LLEN key 获取列表长度 127.0.0.1:6379> llen klist1
(integer) 2
LINSERT key BEFORE|AFTER pivot value 在列表的元素前或者后插入元素 127.0.0.1:6379> linsert klist1 before "r" "ko"
(integer) 3
127.0.0.1:6379> lrange klist1 0 -1
1) "a,b,c"
2) "ko"
3) "r"
LINDEX key index 通过索引获取列表中的元素 127.0.0.1:6379> lrange klist1 0 -1
1) "a,b,c"
2) "ko"
3) "r"
127.0.0.1:6379> lindex klist1 0
"a,b,c"
LSET key index value 通过索引设置列表元素的值 127.0.0.1:6379> lset klist1 1 ok
OK
127.0.0.1:6379> lrange klist1 0 -1
1) "a,b,c"
2) "ok"
3) "r"
LREM key count value 移除列表元素 127.0.0.1:6379> lrange klist1 0 -1
1) "a,b,c"
2) "ok"
3) "r"
127.0.0.1:6379> lrem klist1 1 ok
(integer) 1
127.0.0.1:6379> lrange klist1 0 -1
1) "a,b,c"
2) "r"
LTRIM key start stop 对一个列表进行修剪,就是让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除 127.0.0.1:6379> ltrim klist1 0 0
OK
127.0.0.1:6379> lrange klist1 0 -1
1) "a,b,c"
BLPOP key1 [key2 ] timeout 移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 127.0.0.1:6379> blpop klist1 10
1) "klist1"
2) "a,b,c"
127.0.0.1:6379> lrange klist1 0 -1
(empty list or set)
127.0.0.1:6379> blpop klist1 10
(nil)
(10.06s)
127.0.0.1:6379> 
BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 原理同上
BRPOPLPUSH source destination timeout 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它;如果列表没有元素会阻塞列表直到等待超时或发现可lpu弹出元素为止 127.0.0.1:6379> lrange klist2 0 -1
1) "5"
127.0.0.1:6379> lrange klist1 0 -1
1) "vgfb"
2) "re"
3) "a,b,c"
127.0.0.1:6379> brpoplpush klist1 klist2 10
"a,b,c"
127.0.0.1:6379> brpoplpush klist1 klist2 10
"re"
127.0.0.1:6379> brpoplpush klist1 klist2 10
"vgfb"
127.0.0.1:6379> brpoplpush klist1 klist2 10
(nil)
(10.09s)
127.0.0.1:6379> lrange klist2 0 -1
1) "vgfb"
2) "re"
3) "a,b,c"
4) "5"
127.0.0.1:6379> lrange klist1 0 -1
(empty list or set)
127.0.0.1:6379> 
RPOPLPUSH source destination 移除列表的最后一个元素,并将该元素添加到另一个列表并返回 原理同上

4.set

Redis 的 Set 是 String 类型的无序集合。集合中成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是 O(1)。 集合中最大的成员数为 2^32^ - 1 (4294967295, 每个集合可存储40多亿个成员)。Set类型一般用于赞、踩、标签、好友关系等。

命令语法 描述 演示
SADD key member1 [member2] 向集合添加一个或多个成员 127.0.0.1:6379> sadd kset1 a
(integer) 1
127.0.0.1:6379> sadd kset1 b
(integer) 1
127.0.0.1:6379> sadd kset1 c
(integer) 1
SMEMBERS key 返回集合中的所有成员 127.0.0.1:6379> smembers kset1
1) "b"
2) "c"
3) "a"
SCARD key 获取集合的成员数 127.0.0.1:6379> scard kset1
(integer) 3
SRANDMEMBER key [count] 返回集合中一个或多个随机数 127.0.0.1:6379> srandmember kset1
"b"
127.0.0.1:6379> srandmember kset1
"a"
127.0.0.1:6379> srandmember kset1
"a"
SISMEMBER key member 判断 member 元素是否是集合 key 的成员 127.0.0.1:6379> sismember kset1 h
(integer) 0
127.0.0.1:6379> sismember kset1 a
(integer) 1
SREM key member1 [member2] 移除集合中一个或多个成员 127.0.0.1:6379> srem kset1 a
(integer) 1
127.0.0.1:6379> smembers kset1
1) "b"
2) "c"
SDIFF key1 [key2] 返回给定所有集合的差集 127.0.0.1:6379> smembers kset1
1) "b"
2) "c"
127.0.0.1:6379> smembers kset2
1) "b"
2) "g"
3) "a"
127.0.0.1:6379> sdiff kset1 kset2
1) "c"
SDIFFSTORE destination key1 [key2] 返回给定所有集合的差集并存储在 destination 中 127.0.0.1:6379> sdiffstore kset3 kset1 kset2
(integer) 1
127.0.0.1:6379> smembers kset3
1) "c"
SINTER key1 [key2] 返回给定所有集合的交集 127.0.0.1:6379> sinter kset1 kset2
1) "b"
SINTERSTORE destination key1 [key2] 返回给定所有集合的交集并存储在 destination 中 原理同上
SUNION key1 [key2] 返回所有给定集合的并集 127.0.0.1:6379> sunion kset1 kset2
1) "g"
2) "b"
3) "a"
4) "c"
SUNIONSTORE destination key1 [key2] 所有给定集合的并集存储在 destination 集合中 原理同上
SMOVE source destination member 将 member 元素从 source 集合移动到 destination 集合 127.0.0.1:6379> smove kset2 kset3 g
(integer) 1
127.0.0.1:6379> smembers kset3
1) "g"
2) "c"
SPOP key 移除并返回集合中的一个随机元素 127.0.0.1:6379> spop kset1
"c"
127.0.0.1:6379> spop kset1
"b"
127.0.0.1:6379> spop kset1
(nil)
SSCAN key cursor [MATCH pattern] [COUNT count]

迭代集合中的元素

cursor 表示游标

pattern 表示匹配的模式

count 表示指定从数据集里返回多少元素,默认值为 10 

127.0.0.1:6379> sscan kset2 0 match b*
1) "0"
2) 1) "b"

5.zset

Redis 有序集合和集合一样也是string类型元素的集合且不允许重复的成员。不同的是每个元素都会关联一个==double类型的分数==。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 2^32^ - 1 (4294967295, 每个集合可存储40多亿个成员)。

Zset类型一般用于排行榜等

命令语法 描述 演示
ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数

127.0.0.1:6379> zadd k1 60 'zhangsan' 

(integer) 1

ZCARD key 获取有序集合的成员数

127.0.0.1:6379> zcard k1 

(integer) 1

ZCOUNT key min max 计算在有序集合中指定区间分数的成员数

127.0.0.1:6379> ZCOUNT k1 50 70 

(integer) 1

ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment

127.0.0.1:6379> zincrby k1 15 'zhangsan'

"75"

ZLEXCOUNT key min max 在有序集合中计算指定字典区间内成员数量 127.0.0.1:6379> zlexcount k1 - +
(integer) 5
ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合指定区间内的成员 127.0.0.1:6379>  zrange k1 0 2 withscores
1) "w"
2) "55"
3) "zhangsan"
4) "60"
5) "li"
6) "77"
ZRANGEBYLEX key min max [LIMIT offset count] 通过字典区间返回有序集合的成员 原理同上
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 通过分数返回有序集合指定区间内的成员 127.0.0.1:6379> zrangebyscore k1 50 80
1) "w"
2) "zhangsan"
3) "li"
ZRANK key member 返回有序集合中指定成员的索引 127.0.0.1:6379> zrank k1 su
(integer) 4
ZREM key member [member ...] 移除有序集合中的一个或多个成员 127.0.0.1:6379> zrem k1 zhao
(integer) 1
127.0.0.1:6379> zcard k1
(integer) 4
ZREMRANGEBYLEX key min max 移除有序集合中给定的字典区间的所有成员 原理同上
ZREMRANGEBYRANK key start stop 移除有序集合中给定的排名区间的所有成员 原理同上
ZREMRANGEBYSCORE key min max 移除有序集合中给定的分数区间的所有成员 原理同上
ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到低 127.0.0.1:6379> zrevrange k1 0 2
1) "su"
2) "li"
3) "zhangsan"
ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分数区间内的成员,分数从高到低排序 原理同上
ZREVRANK key member 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 原理同上
ZSCORE key member 返回有序集中,成员的分数值 127.0.0.1:6379> zscore k1 zhangsan
"60"
127.0.0.1:6379> zscore k1 li
"77"
ZINTERSTORE destination numkeys key [key ...] 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中 原理同上
ZUNIONSTORE destination numkeys key [key ...] 计算给定的一个或多个有序集的并集,并存储在新的 key 中 原理同上
ZSCAN key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成员和元素分值) 原理同上

6.hash

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。Redis 中每个 hash 可以存储 2^32^ - 1 键值对(40多亿)。

Hash类型一般用于存储用户信息、用户主页访问量、组合查询等

命令语法 描述 演示
HSET key field value 将哈希表 key 中的字段 field 的值设为 value 127.0.0.1:6379> hset khash1 field ab
(integer) 1
HGET key field 获取存储在哈希表中指定字段的值 127.0.0.1:6379> hget khash1 field
"ab"
HGETALL key 获取在哈希表中指定 key 的所有字段和值 127.0.0.1:6379> hgetall khash1
1) "field"
2) "ab"
HEXISTS key field 查看哈希表 key 中,指定的字段是否存在

127.0.0.1:6379> hexists khash1 field
(integer) 1

127.0.0.1:6379> hexists khash1 field1
(integer) 0

HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值 原理同上
HKEYS key 获取所有哈希表中的字段 127.0.0.1:6379> hkeys khash1
1) "field"
HVALS key 获取哈希表中所有值 127.0.0.1:6379> hvals khash1
1) "ab"
HLEN key 获取哈希表中字段的数量 127.0.0.1:6379> hlen khash1
(integer) 1
HMGET key field1 [field2] 获取所有给定字段的值 127.0.0.1:6379> hmget khash1 field
1) "ab"
HMSET key field1 value1 [field2 value2] 同时将多个 field-value (域-值)对设置到哈希表 key 中 原理同上
HINCRBY key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment 原理同上
HINCRBYFLOAT key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment 原理同上
HDEL key field1 [field2] 删除一个或多个哈希表字段 原理同上
HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对 原理同上

7. bitmaps

Bitmaps本身不是一种数据类型,实际上它就是字符串(key-value),但是它可以对字符串的位进行操作。

Bitmaps单独提供了一套命令,所以在Redis中使用Bitmaps和使用字符串的方法不太相同。 可以把Bitmaps想象成一个以位为单位的数组, 数组的每个单元只能存储0和1, 数组的下标在Bitmaps中叫做偏移量。

(1)setbit

用于设置Bitmaps中某个偏移量的值(0或1),offset偏移量从0开始

setbit

(2)getbit

用于获取Bitmaps中某个偏移量的值

getbit

(3)bitcount

这个命令用于统计字符串被设置为1的bit数,统计字符串从start字节到end字节比特值为1的数量, 一般情况下,给定的整个字符串都会被进行计数,通过指定额外的 start 或 end 参数,可以让计数只在特定的位上进行。start 和 end 参数的设置,都可以使用负数值:比如 -1 表示最后一个位,而 -2 表示倒数第二个位,start、end 是指bit组的字节的下标数,二者皆包含。

bitcount [start end]

(4)bitop

一个复合操作, 它可以做多个Bitmaps的and(交集) 、 or(并集) 、 not(非) 、 xor(异或) 操作并将结果保存在destkey中

bitop and(or/not/xor) [key…]

8.hyperloglog

HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是:在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。

在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。

命令语法 描述
PFADD key element [element ...] 添加指定元素到 HyperLogLog 中
PFCOUNT key [key ...] 返回给定 HyperLogLog 的基数估算值
PFMERGE destkey sourcekey [sourcekey ...] 将多个 HyperLogLog 合并为一个 HyperLogLog

9.geospatial

GEO,Geographic,地理信息的缩写。该类型,就是元素的2维坐标,在地图上就是经纬度。redis基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等常见操作。

二.redis数据持久化

1.RDB方式

[root@localhost bin]# ll
总用量 21648
-rw-r--r-- 1 root root     700  7月 22 12:57 dump.rdb
-rwxr-xr-x 1 root root 2360344  7月 21 18:55 redis-benchmark
-rwxr-xr-x 1 root root 5742200  7月 21 18:55 redis-check-aof
-rwxr-xr-x 1 root root 5742200  7月 21 18:55 redis-check-rdb
-rwxr-xr-x 1 root root 2507880  7月 21 18:55 redis-cli
-rw-r--r-- 1 root root   57777  7月 22 13:18 redis.conf
lrwxrwxrwx 1 root root      12  7月 21 18:55 redis-sentinel -> redis-server
[root@localhost bin]# vim redis.conf
#save 900 1
#save 300 10
#save 60 10000
 save 25 5
[root@localhost bin]# systemctl restart redis
[root@localhost bin]# ll
总用量 21648
-rw-r--r-- 1 root root     700  7月 22 13:23 dump.rdb
-rwxr-xr-x 1 root root 2360344  7月 21 18:55 redis-benchmark
-rwxr-xr-x 1 root root 5742200  7月 21 18:55 redis-check-aof
-rwxr-xr-x 1 root root 5742200  7月 21 18:55 redis-check-rdb
-rwxr-xr-x 1 root root 2507880  7月 21 18:55 redis-cli
-rw-r--r-- 1 root root   57777  7月 22 13:18 redis.conf
lrwxrwxrwx 1 root root      12  7月 21 18:55 redis-sentinel -> redis-server
-rwxr-xr-x 1 root root 5742200  7月 21 18:55 redis-server

2.AOF方式

[root@localhost bin]# vim redis.conf
appendonly yes

redis9种数据类型的基本操作,redis持久化练习—分别启用rdb和aof,并查看是否有对应文件生成_第1张图片

[root@localhost bin]# ll appendonlydir/
-rw-r--r-- 1 root root     89  7月 22 13:48 appendonly.aof.1.base.rdb
-rw-r--r-- 1 root root      0  7月 22 13:48 appendonly.aof.1.incr.aof
-rw-r--r-- 1 root root     88  7月 22 13:48 appendonly.aof.manifest

你可能感兴趣的:(Mysql,redis,Linux,redis,数据库,缓存)