目录
一、概述
1、Redis
2、Redis的安装
Redis Windows环境设置
3、String: 字符串
3.1、字符串
3.2、数值
3.3、bitmap
4、Hash: 散列
5、List: 列表
6、Set: 集合
7、Sorted Set: 有序集合
常识:
磁盘:1.寻址:ms(毫秒)2.带宽:MB/s
内存:1.寻址:ns (纳秒) 2.带宽:GB/s
秒-->毫秒-->微妙-->纳秒
磁盘比内存在寻址上慢了10W倍
内存带宽
前端总线频率/工作频率 | 最高带宽 | |
Pentium4 |
400MHz |
3.2GB/s |
Pentium4 |
533MHz |
4.2GB/s |
Pentium4 |
800MHz |
6.4GB/s |
DDR266 |
266MHz |
2.1GB/s |
双通道DDR266 |
266MHz |
4.2GB/s |
DDR333 |
333MHz |
2.7GB/s |
双通道DDR333 |
333MHz |
5.4GB/s |
DDR400 |
400MHz |
3.2GB/s |
双通道DDR400 |
400MHz |
6.4GB/s |
磁盘 内存 常识
基础知识:
关系型数据库建表:必须给出schema,类型:字节宽度,存储:倾向于行级存储
面试题:数据库:表很大,性能下降?
1、增删改变慢
2、查询速度呢?
1个或少量查询依然很快
2.并发大的时候会受硬盘带宽影响速度
SAP HANA:内存级别的关系型数据库 2T容量 贵:定制服务机器
数据在磁盘和内存体积不一样的
折中方案
memcached
redis
...
2个基础设施
1.冯诺依曼体系的硬件
2.以太网,tcp/ip的网络
DB-Engines 数据库引擎
NoSQL(NoSQL = Not Only SQL),意即"不仅仅是SQL",泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴漏了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。(例如谷歌每天为它们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
Redis官网
Redis中文网站
Redis ( Remote DIctionary Server ) 通常被称为数据结构服务器,因为值 ( value ) 可以是字符串 ( String ) , 哈希 ( Map ) , 列表 ( list ) , 集合 ( Sets ) 或有序集合 ( Sorted Sets ) 等类型。
redis 是二进制安全的
Docker中安装redis Spring Boot入门+深入(六)-Docker
Redis默认有16个库,库的进入
127.0.0.1:6379> set k1 hello
OK
127.0.0.1:6379> get k1
"hello"
127.0.0.1:6379> select 8
OK
127.0.0.1:6379[8]> get k1
(nil)
127.0.0.1:6379[8]>
==============================
直接redis-cli -n 8进入指定8库
#因为我环境在docker中前面添加了docker exec -it 16d9d3a548a1:其他环境不用添加
[root@localhost ~]# docker exec -it 16d9d3a548a1 redis-cli -n 8
SELECT 8 failed: NOAUTH Authentication required.
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379[8]>
帮助的使用
127.0.0.1:6379> help
redis-cli 7.0.11
To get help about Redis commands type:
"help @" to get a list of commands in
"help " for help on
"help " to get a list of possible help topics
"quit" to exit
To set redis-cli preferences:
":set hints" enable online hints
":set nohints" disable online hints
Set your preferences in ~/.redisclirc
127.0.0.1:6379> help @set
SADD key member [member ...]
summary: Add one or more members to a set
since: 1.0.0
SCARD key
summary: Get the number of members in a set
since: 1.0.0
SDIFF key [key ...]
summary: Subtract multiple sets
since: 1.0.0
SDIFFSTORE destination key [key ...]
summary: Subtract multiple sets and store the resulting set in a key
since: 1.0.0
SINTER key [key ...]
summary: Intersect multiple sets
since: 1.0.0
SINTERCARD numkeys key [key ...] [LIMIT limit]
summary: Intersect multiple sets and return the cardinality of the result
since: 7.0.0
SINTERSTORE destination key [key ...]
summary: Intersect multiple sets and store the resulting set in a key
since: 1.0.0
SISMEMBER key member
summary: Determine if a given value is a member of a set
since: 1.0.0
SMEMBERS key
summary: Get all the members in a set
since: 1.0.0
SMISMEMBER key member [member ...]
summary: Returns the membership associated with the given elements for a set
since: 6.2.0
SMOVE source destination member
summary: Move a member from one set to another
since: 1.0.0
SPOP key [count]
summary: Remove and return one or multiple random members from a set
since: 1.0.0
SRANDMEMBER key [count]
summary: Get one or multiple random members from a set
since: 1.0.0
SREM key member [member ...]
summary: Remove one or more members from a set
since: 1.0.0
SSCAN key cursor [MATCH pattern] [COUNT count]
summary: Incrementally iterate Set elements
since: 2.8.0
SUNION key [key ...]
summary: Add multiple sets
since: 1.0.0
SUNIONSTORE destination key [key ...]
summary: Add multiple sets and store the resulting set in a key
since: 1.0.0
127.0.0.1:6379>
清空缓存
127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379>
1、redis 注册为服务
redis-server.exe --service-install redis.windows.conf --service-name redis --port 6379
2、redis 服务卸载
redis-server.exe --service-uninstall --service-name redis
3、redis 设置密码
redis.windows.conf 文件中的requirepass password
requirepass后为密码设置
正反向索引:正向:从0开始依次递增。反向:最后一位为-1,前一位为-2,一直到最前方。
127.0.0.1:6379> help set
SET key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]
summary: Set the string value of a key
since: 1.0.0
group: string
127.0.0.1:6379> set k1 hello
OK
127.0.0.1:6379> get k1
"hello"
127.0.0.1:6379> set k1 world nx #nx:不存在key,才能设置成功, 使用场景:1.分布式锁2.只能新建
(nil)
127.0.0.1:6379> get k1
"hello"
127.0.0.1:6379> set k2 hello xx #xx:存在key,才能设置成功,只能更新
(nil)
127.0.0.1:6379> get k2
(nil)
127.0.0.1:6379> mset k3 a k4 b
OK
127.0.0.1:6379> mget k3 k4
1) "a"
2) "b"
127.0.0.1:6379> APPEND k1 world
(integer) 10
127.0.0.1:6379> get k1
"helloworld"
#正反向索引
127.0.0.1:6379> GETRANGE k1 5 9
"world"
127.0.0.1:6379> GETRANGE k1 5 -1
"world"
127.0.0.1:6379> GETRANGE k1 0 -1
"helloworld"
127.0.0.1:6379> SETRANGE k1 5 ' man'
(integer) 10
127.0.0.1:6379> GETRANGE k1 0 -1
"hello mand"
127.0.0.1:6379> STRLEN k1
(integer) 10
127.0.0.1:6379> get k1
"hello mand"
127.0.0.1:6379> type k1
string
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> help set
SET key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]
summary: Set the string value of a key
since: 1.0.0
group: string
127.0.0.1:6379> set k1 99
OK
127.0.0.1:6379> type k1
string
127.0.0.1:6379> set k2 hello
OK
127.0.0.1:6379> type k2
string
127.0.0.1:6379> help OBJECT
OBJECT
summary: A container for object introspection commands
since: 2.2.3
group: generic
OBJECT ENCODING key
summary: Inspect the internal encoding of a Redis object
since: 2.2.3
group: generic
OBJECT FREQ key
summary: Get the logarithmic access frequency counter of a Redis object
since: 4.0.0
group: generic
OBJECT HELP
summary: Show helpful text about the different subcommands
since: 6.2.0
group: generic
OBJECT IDLETIME key
summary: Get the time since a Redis object was last accessed
since: 2.2.3
group: generic
OBJECT REFCOUNT key
summary: Get the number of references to the value of the key
since: 2.2.3
group: generic
127.0.0.1:6379> OBJECT help
1) OBJECT [ [value] [opt] ...]. Subcommands are:
2) ENCODING
3) Return the kind of internal representation used in order to store the value
4) associated with a .
5) FREQ
6) Return the access frequency index of the . The returned integer is
7) proportional to the logarithm of the recent access frequency of the key.
8) IDLETIME
9) Return the idle time of the , that is the approximated number of
10) seconds elapsed since the last access to the key.
11) REFCOUNT
12) Return the number of references of the value associated with the specified
13) .
14) HELP
15) Prints this help.
127.0.0.1:6379> OBJECT ENCODING k2
"embstr"
127.0.0.1:6379> OBJECT ENCODING k1
"int"
127.0.0.1:6379> get k1
"99"
127.0.0.1:6379> set k3 aa
OK
127.0.0.1:6379> OBJECT ENCODING k3
"embstr"
127.0.0.1:6379> APPEND k3 bb
(integer) 4
127.0.0.1:6379> OBJECT ENCODING k3
"raw"
127.0.0.1:6379> set k10 中
OK
127.0.0.1:6379> get k10 #redis 是二进制安全的
"\xe4\xb8\xad"
127.0.0.1:6379> exit
[root@localhost ~]# docker exec -it 16d9d3a548a1 redis-cli --raw
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> get k10
中
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
127.0.0.1:6379> MSETNX k1 a k2 b
1
127.0.0.1:6379> mget k1 k2
a
b
127.0.0.1:6379> MSETNX k2 c k3 d
0
127.0.0.1:6379> mget k1 k2 k3
a
b
127.0.0.1:6379>
字符串中有数值
127.0.0.1:6379> get k1
"99"
127.0.0.1:6379> INCR k1
(integer) 100
127.0.0.1:6379> get k1
"100"
127.0.0.1:6379> help incr
INCR key
summary: Increment the integer value of a key by one
since: 1.0.0
group: string
127.0.0.1:6379> incrby k1 2
(integer) 102
127.0.0.1:6379> get k1
"102"
127.0.0.1:6379> DECR k1
(integer) 101
127.0.0.1:6379> DECR k1 2
(error) ERR wrong number of arguments for 'decr' command
127.0.0.1:6379> DECRBY k1 2
(integer) 99
127.0.0.1:6379> INCRBYFLOAT k1 0.5
"99.5"
127.0.0.1:6379> get k1
"99.5"
127.0.0.1:6379>
使用场景:抢购,秒杀,详情页,点赞,评论,规避并发下,对数据库的事物操作,完全由redis内存操作代替。
127.0.0.1:6379> help setbit
SETBIT key offset value #offset:二进制位的偏移量,二进制位也是有索引的从0开始依次递增
summary: Sets or clears the bit at offset in the string value stored at key
since: 2.2.0
group: bitmap
127.0.0.1:6379> setbit k1 1 1 #把二进位索引为1的位置的值设置为1,只能设置为1或0
0
127.0.0.1:6379> STRLEN k1
1
127.0.0.1:6379> get k1 #ascii码0100 0000代表@
@
127.0.0.1:6379> setbit k1 7 1
0
127.0.0.1:6379> STRLEN k1
1
127.0.0.1:6379> get k1 #ascii码0100 0001代表A
A
127.0.0.1:6379> setbit k1 9 1 #长度增1超过8位
0
127.0.0.1:6379> STRLEN k1
2
127.0.0.1:6379> get k1
A@
127.0.0.1:6379> help bitpos
BITPOS key bit [start [end [BYTE|BIT]]] #start,end 二进制 字节索引
summary: Find first bit set or clear in a string
since: 2.8.7
group: bitmap
127.0.0.1:6379> bitpos k1 1 0 0 #二进制位1第一次出现的位置在0-0字节索引中
1
127.0.0.1:6379> bitpos k1 1 1 1 #二进制位1第一次出现的位置在1-1字节索引中
9
127.0.0.1:6379> bitpos k1 1 0 1 #二进制位1第一次出现的位置在0-1字节索引中
1
127.0.0.1:6379> help bitcount
BITCOUNT key [start end [BYTE|BIT]] #start,end 二进制 字节索引
summary: Count set bits in a string
since: 2.6.0
group: bitmap
127.0.0.1:6379> bitcount k1 0 1 #k1的ascii码0100 0001 0100 0000 索引0-1字节有3个1
3
127.0.0.1:6379> bitcount k1 0 0
2
127.0.0.1:6379> bitcount k1 1 1
1
127.0.0.1:6379> help bitop
BITOP operation destkey key [key ...]
summary: Perform bitwise operations between strings
since: 2.6.0
group: bitmap
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> setbit k1 1 1
0
127.0.0.1:6379> setbit k1 7 1
0
127.0.0.1:6379> get k1
A
127.0.0.1:6379> setbit k2 1 1
0
127.0.0.1:6379> setbit k2 6 1
0
127.0.0.1:6379> get k2
B
127.0.0.1:6379> bitop and andkey k1 k2
1
127.0.0.1:6379> get andkey
@
127.0.0.1:6379> bitop or orkey k1 k2
1
127.0.0.1:6379> get orkey
C
127.0.0.1:6379>
ASCII
[root@localhost ~]# yum install man man-pages # 安装man man-pages
.....
[root@localhost ~]# man ascii
ASCII(7) Linux Programmer's Manual ASCII(7)
NAME
ascii - ASCII character set encoded in octal, decimal, and hexadecimal
DESCRIPTION
ASCII is the American Standard Code for Information Interchange. It is a 7-bit code. Many 8-bit codes (such as ISO 8859-1, the Linux default character set) contain ASCII as
their lower half. The international counterpart of ASCII is known as ISO 646.
The following table contains the 128 ASCII characters.
C program '\X' escapes are noted.
Oct Dec Hex Char Oct Dec Hex Char
────────────────────────────────────────────────────────────────────────
000 0 00 NUL '\0' 100 64 40 @
001 1 01 SOH (start of heading) 101 65 41 A
002 2 02 STX (start of text) 102 66 42 B
003 3 03 ETX (end of text) 103 67 43 C
004 4 04 EOT (end of transmission) 104 68 44 D
005 5 05 ENQ (enquiry) 105 69 45 E
006 6 06 ACK (acknowledge) 106 70 46 F
007 7 07 BEL '\a' (bell) 107 71 47 G
010 8 08 BS '\b' (backspace) 110 72 48 H
011 9 09 HT '\t' (horizontal tab) 111 73 49 I
012 10 0A LF '\n' (new line) 112 74 4A J
013 11 0B VT '\v' (vertical tab) 113 75 4B K
014 12 0C FF '\f' (form feed) 114 76 4C L
015 13 0D CR '\r' (carriage ret) 115 77 4D M
016 14 0E SO (shift out) 116 78 4E N
017 15 0F SI (shift in) 117 79 4F O
020 16 10 DLE (data link escape) 120 80 50 P
021 17 11 DC1 (device control 1) 121 81 51 Q
022 18 12 DC2 (device control 2) 122 82 52 R
023 19 13 DC3 (device control 3) 123 83 53 S
024 20 14 DC4 (device control 4) 124 84 54 T
025 21 15 NAK (negative ack.) 125 85 55 U
026 22 16 SYN (synchronous idle) 126 86 56 V
027 23 17 ETB (end of trans. blk) 127 87 57 W
030 24 18 CAN (cancel) 130 88 58 X
031 25 19 EM (end of medium) 131 89 59 Y
032 26 1A SUB (substitute) 132 90 5A Z
033 27 1B ESC (escape) 133 91 5B [
034 28 1C FS (file separator) 134 92 5C \ '\\'
035 29 1D GS (group separator) 135 93 5D ]
036 30 1E RS (record separator) 136 94 5E ^
037 31 1F US (unit separator) 137 95 5F _
040 32 20 SPACE 140 96 60 `
041 33 21 ! 141 97 61 a
Manual page ascii(7) line 1 (press h for help or q to quit)
bitmap使用场景:1.统计用户登录天数,且窗口随机
#对user1用户进行登录统计 按照bitmap进行存储,46字节存储了一个用户一年的是否登录
# 1 2....7..........364 #代表天数
# user1 0 1 ...1..........364
# user2 ......................
#....用户数...
127.0.0.1:6379> setbit user1 1 1
0
127.0.0.1:6379> setbit user1 7 1
0
127.0.0.1:6379> setbit user1 364 1
0
127.0.0.1:6379> STRLEN user1
46
127.0.0.1:6379> bitcount user1 -2 -1
1
127.0.0.1:6379>
使用场景2:统计系统中的活跃用户,1-3号之间的活跃用户总数
#统计20600101-20600103之间的用户活跃数,每一位代表一个用户
# u1 u2 u3 .....u7..u9.......
#20600101 0 1 0 ...0...0........
#20600102 0 1 0 ...0...1........
#20600103 0 0 0 ...1...0........
127.0.0.1:6379> setbit 20600101 1 1
0
127.0.0.1:6379> setbit 20600102 9 1
0
127.0.0.1:6379> setbit 20600102 1 1
0
127.0.0.1:6379> setbit 20600103 7 1
0
127.0.0.1:6379> bitop or destkey 20600101 20600102 20600103 #或 去重
2
127.0.0.1:6379> bitcount destkey 0 -1
3
127.0.0.1:6379>
map(k-v):可对field进行数值计算
使用场景:点赞,收藏,详情页
127.0.0.1:6379> help @hash
HDEL key field [field ...]
summary: Delete one or more hash fields
since: 2.0.0
HEXISTS key field
summary: Determine if a hash field exists
since: 2.0.0
HGET key field
summary: Get the value of a hash field
since: 2.0.0
HGETALL key
summary: Get all the fields and values in a hash
since: 2.0.0
HINCRBY key field increment
summary: Increment the integer value of a hash field by the given number
since: 2.0.0
HINCRBYFLOAT key field increment
summary: Increment the float value of a hash field by the given amount
since: 2.6.0
HKEYS key
summary: Get all the fields in a hash
since: 2.0.0
HLEN key
summary: Get the number of fields in a hash
since: 2.0.0
HMGET key field [field ...]
summary: Get the values of all the given hash fields
since: 2.0.0
HMSET key field value [field value ...]
summary: Set multiple hash fields to multiple values
since: 2.0.0
HRANDFIELD key [count [WITHVALUES]]
summary: Get one or multiple random fields from a hash
since: 6.2.0
HSCAN key cursor [MATCH pattern] [COUNT count]
summary: Incrementally iterate hash fields and associated values
since: 2.8.0
HSET key field value [field value ...]
summary: Set the string value of a hash field
since: 2.0.0
HSETNX key field value
summary: Set the value of a hash field, only if the field does not exist
since: 2.0.0
HSTRLEN key field
summary: Get the length of the value of a hash field
since: 3.2.0
HVALS key
summary: Get all the values in a hash
since: 2.0.0
127.0.0.1:6379> hset u1 name zwj
(integer) 1
127.0.0.1:6379> hmset u1 age 18 address dl
OK
127.0.0.1:6379> hget u1 name
"zwj"
127.0.0.1:6379> hmget u1 name age
1) "zwj"
2) "18"
127.0.0.1:6379> hkeys u1
1) "name"
2) "age"
3) "address"
127.0.0.1:6379> hvals u1
1) "zwj"
2) "18"
3) "dl"
127.0.0.1:6379> hgetall u1
1) "name"
2) "zwj"
3) "age"
4) "18"
5) "address"
6) "dl"
127.0.0.1:6379> HINCRBYFLOAT u1 age 0.5
"18.5"
127.0.0.1:6379> hget u1 age
"18.5"
127.0.0.1:6379> HINCRBYFLOAT u1 age -1
"17.5"
127.0.0.1:6379> hget u1 age
"17.5"
127.0.0.1:6379>
List:可以描述栈:同向命令
List:可以描述队列:反向命令
List:可以描述数组
List:阻塞,单播队列 FIFO
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> lpush k1 a b c d e f #lpush:从左边放元素
(integer) 6
127.0.0.1:6379> lpop k1
"f"
127.0.0.1:6379> lpop k1
"e"
127.0.0.1:6379> lpop k1
"d"
127.0.0.1:6379> lpush k1 a b c d e f
(integer) 6
127.0.0.1:6379> LRANGE k1 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> rpush k2 a b c d e f
(integer) 6
127.0.0.1:6379> LRANGE k2 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
127.0.0.1:6379> help lindex
LINDEX key index #根据索引取,类似数组
summary: Get an element from a list by its index
since: 1.0.0
group: list
127.0.0.1:6379> help lset
LSET key index element #根据索引更新
summary: Set the value of an element in a list by its index
since: 1.0.0
group: list
127.0.0.1:6379> LRANGE k1 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> LINDEX k1 2
"d"
127.0.0.1:6379> LINDEX k1 -1
"a"
127.0.0.1:6379> lset k1 3 xxx
OK
127.0.0.1:6379> LRANGE k1 0 -1
1) "f"
2) "e"
3) "d"
4) "xxx"
5) "b"
6) "a"
127.0.0.1:6379> help @list
BLMOVE source destination LEFT|RIGHT LEFT|RIGHT timeout
summary: Pop an element from a list, push it to another list and return it; or block until one is available
since: 6.2.0
BLMPOP timeout numkeys key [key ...] LEFT|RIGHT [COUNT count]
summary: Pop elements from a list, or block until one is available
since: 7.0.0
BLPOP key [key ...] timeout
summary: Remove and get the first element in a list, or block until one is ava ilable
since: 2.0.0
BRPOP key [key ...] timeout
summary: Remove and get the last element in a list, or block until one is avai lable
since: 2.0.0
BRPOPLPUSH source destination timeout
summary: Pop an element from a list, push it to another list and return it; or block until one is available
since: 2.2.0
LINDEX key index
summary: Get an element from a list by its index
since: 1.0.0
LINSERT key BEFORE|AFTER pivot element # 插入元素在前/后
summary: Insert an element before or after another element in a list
since: 2.2.0
LLEN key
summary: Get the length of a list
since: 1.0.0
LMOVE source destination LEFT|RIGHT LEFT|RIGHT
summary: Pop an element from a list, push it to another list and return it
since: 6.2.0
LMPOP numkeys key [key ...] LEFT|RIGHT [COUNT count]
summary: Pop elements from a list
since: 7.0.0
LPOP key [count]
summary: Remove and get the first elements in a list
since: 1.0.0
LPOS key element [RANK rank] [COUNT num-matches] [MAXLEN len]
summary: Return the index of matching elements on a list
since: 6.0.6
LPUSH key element [element ...]
summary: Prepend one or multiple elements to a list
since: 1.0.0
LPUSHX key element [element ...]
summary: Prepend an element to a list, only if the list exists
since: 2.2.0
LRANGE key start stop
summary: Get a range of elements from a list
since: 1.0.0
LREM key count element #移除元素 count为正,从头开始移除,为负,从后开始移除
summary: Remove elements from a list
since: 1.0.0
LSET key index element
summary: Set the value of an element in a list by its index
since: 1.0.0
LTRIM key start stop
summary: Trim a list to the specified range
since: 1.0.0
RPOP key [count]
summary: Remove and get the last elements in a list
since: 1.0.0
RPOPLPUSH source destination
summary: Remove the last element in a list, prepend it to another list and ret urn it
since: 1.2.0
RPUSH key element [element ...]
summary: Append one or multiple elements to a list
since: 1.0.0
RPUSHX key element [element ...]
summary: Append an element to a list, only if the list exists
since: 2.2.0
127.0.0.1:6379>
set:去重
127.0.0.1:6379> help @set
SADD key member [member ...]
summary: Add one or more members to a set
since: 1.0.0
SCARD key
summary: Get the number of members in a set
since: 1.0.0
SDIFF key [key ...]
summary: Subtract multiple sets
since: 1.0.0
SDIFFSTORE destination key [key ...]
summary: Subtract multiple sets and store the resulting set in a key
since: 1.0.0
SINTER key [key ...]
summary: Intersect multiple sets
since: 1.0.0
SINTERCARD numkeys key [key ...] [LIMIT limit]
summary: Intersect multiple sets and return the cardinality of the result
since: 7.0.0
SINTERSTORE destination key [key ...]
summary: Intersect multiple sets and store the resulting set in a key
since: 1.0.0
SISMEMBER key member
summary: Determine if a given value is a member of a set
since: 1.0.0
SMEMBERS key
summary: Get all the members in a set
since: 1.0.0
SMISMEMBER key member [member ...]
summary: Returns the membership associated with the given elements for a set
since: 6.2.0
SMOVE source destination member
summary: Move a member from one set to another
since: 1.0.0
SPOP key [count]
summary: Remove and return one or multiple random members from a set
since: 1.0.0
SRANDMEMBER key [count]
summary: Get one or multiple random members from a set
since: 1.0.0
SREM key member [member ...]
summary: Remove one or more members from a set
since: 1.0.0
SSCAN key cursor [MATCH pattern] [COUNT count]
summary: Incrementally iterate Set elements
since: 2.8.0
SUNION key [key ...]
summary: Add multiple sets
since: 1.0.0
SUNIONSTORE destination key [key ...]
summary: Add multiple sets and store the resulting set in a key
since: 1.0.0
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> sadd k1 t a s d f fdsf we s t
(integer) 7
127.0.0.1:6379> SMEMBERS k1
1) "fdsf"
2) "s"
3) "f"
4) "d"
5) "a"
6) "we"
7) "t"
127.0.0.1:6379> SREM k1 s f #移除元素
(integer) 2
127.0.0.1:6379> SMEMBERS k1
1) "fdsf"
2) "d"
3) "a"
4) "we"
5) "t"
127.0.0.1:6379> sadd k2 1 2 3 4 5
(integer) 5
127.0.0.1:6379> sadd k3 4 5 6 7 8
(integer) 5
127.0.0.1:6379> SINTER k2 k3 #集合的交集
1) "4"
2) "5"
127.0.0.1:6379> SINTERSTORE k4 k2 k3 #集合的交集并存储到key中
(integer) 2
127.0.0.1:6379> SMEMBERS k4
1) "4"
2) "5"
127.0.0.1:6379> SDIFF k2 k3 #差集 前后顺序,取前面的差集
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SDIFF k3 k2 #差集
1) "6"
2) "7"
3) "8"
127.0.0.1:6379> help SRANDMEMBER
SRANDMEMBER key [count] #取出随机数
#正数:取出一个去重的结果集(不能超过已有集)
#负数:取出一个带有重复的结果集,一定满足你要的数量
#0:不返回
#使用场景:抽奖
summary: Get one or multiple random members from a set
since: 1.0.0
group: set
127.0.0.1:6379> sadd k10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
(integer) 33
127.0.0.1:6379> SRANDMEMBER k10 6 #模拟双色球等抽奖
1) "20"
2) "9"
3) "32"
4) "29"
5) "14"
6) "6"
127.0.0.1:6379> help SPOP
SPOP key [count] #取出1个,符合抽奖过程
summary: Remove and return one or multiple random members from a set
since: 1.0.0
group: set
127.0.0.1:6379>
使用场景:抽奖
Sorted Set:物理内存左小右大,不随命令发生变化
127.0.0.1:6379> help @sorted-set
BZMPOP timeout numkeys key [key ...] MIN|MAX [COUNT count]
summary: Remove and return members with scores in a sorted set or block until one is available
since: 7.0.0
BZPOPMAX key [key ...] timeout
summary: Remove and return the member with the highest score from one or more sorted sets, or block until one is available
since: 5.0.0
BZPOPMIN key [key ...] timeout
summary: Remove and return the member with the lowest score from one or more sorted sets, or block until one is available
since: 5.0.0
ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]
summary: Add one or more members to a sorted set, or update its score if it already exists
since: 1.2.0
ZCARD key
summary: Get the number of members in a sorted set
since: 1.2.0
ZCOUNT key min max
summary: Count the members in a sorted set with scores within the given values
since: 2.0.0
ZDIFF numkeys key [key ...] [WITHSCORES]
summary: Subtract multiple sorted sets
since: 6.2.0
ZDIFFSTORE destination numkeys key [key ...]
summary: Subtract multiple sorted sets and store the resulting sorted set in a new key
since: 6.2.0
ZINCRBY key increment member
summary: Increment the score of a member in a sorted set
since: 1.2.0
ZINTER numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] [WITHSCORES]
summary: Intersect multiple sorted sets
since: 6.2.0
ZINTERCARD numkeys key [key ...] [LIMIT limit]
summary: Intersect multiple sorted sets and return the cardinality of the result
since: 7.0.0
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
summary: Intersect multiple sorted sets and store the resulting sorted set in a new key
since: 2.0.0
ZLEXCOUNT key min max
summary: Count the number of members in a sorted set between a given lexicographical range
since: 2.8.9
ZMPOP numkeys key [key ...] MIN|MAX [COUNT count]
summary: Remove and return members with scores in a sorted set
since: 7.0.0
ZMSCORE key member [member ...]
summary: Get the score associated with the given members in a sorted set
since: 6.2.0
ZPOPMAX key [count]
summary: Remove and return members with the highest scores in a sorted set
since: 5.0.0
ZPOPMIN key [count]
summary: Remove and return members with the lowest scores in a sorted set
since: 5.0.0
ZRANDMEMBER key [count [WITHSCORES]]
summary: Get one or multiple random elements from a sorted set
since: 6.2.0
ZRANGE key start stop [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]
summary: Return a range of members in a sorted set
since: 1.2.0
ZRANGEBYLEX key min max [LIMIT offset count]
summary: Return a range of members in a sorted set, by lexicographical range
since: 2.8.9
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
summary: Return a range of members in a sorted set, by score
since: 1.0.5
ZRANGESTORE dst src min max [BYSCORE|BYLEX] [REV] [LIMIT offset count]
summary: Store a range of members from sorted set into another key
since: 6.2.0
ZRANK key member
summary: Determine the index of a member in a sorted set
since: 2.0.0
ZREM key member [member ...]
summary: Remove one or more members from a sorted set
since: 1.2.0
ZREMRANGEBYLEX key min max
summary: Remove all members in a sorted set between the given lexicographical range
since: 2.8.9
ZREMRANGEBYRANK key start stop
summary: Remove all members in a sorted set within the given indexes
since: 2.0.0
ZREMRANGEBYSCORE key min max
summary: Remove all members in a sorted set within the given scores
since: 1.2.0
ZREVRANGE key start stop [WITHSCORES]
summary: Return a range of members in a sorted set, by index, with scores ordered from high to low
since: 1.2.0
ZREVRANGEBYLEX key max min [LIMIT offset count]
summary: Return a range of members in a sorted set, by lexicographical range, ordered from higher to lower strings.
since: 2.8.9
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
summary: Return a range of members in a sorted set, by score, with scores ordered from high to low
since: 2.2.0
ZREVRANK key member
summary: Determine the index of a member in a sorted set, with scores ordered from high to low
since: 2.0.0
ZSCAN key cursor [MATCH pattern] [COUNT count]
summary: Incrementally iterate sorted sets elements and associated scores
since: 2.8.0
ZSCORE key member
summary: Get the score associated with the given member in a sorted set
since: 1.2.0
ZUNION numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] [WITHSCORES]
summary: Add multiple sorted sets
since: 6.2.0
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
summary: Add multiple sorted sets and store the resulting sorted set in a new key
since: 2.0.0
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> zadd k1 8 apple 2 banana 3 orange
(integer) 3
127.0.0.1:6379> ZRANGE k1 0 -1
1) "banana"
2) "orange"
3) "apple"
127.0.0.1:6379> ZRANGE k1 0 -1 withscores
1) "banana"
2) "2"
3) "orange"
4) "3"
5) "apple"
6) "8"
127.0.0.1:6379> ZINCRBY k1 2.5 banana
"4.5"
127.0.0.1:6379> ZRANGE k1 0 -1 withscores
1) "-1"
2) "0"
3) "orange"
4) "3"
5) "banana"
6) "4.5"
7) "apple"
8) "8"
127.0.0.1:6379> zrem k1 -1
(integer) 1
127.0.0.1:6379> ZRANGE k1 0 -1 withscores
1) "orange"
2) "3"
3) "banana"
4) "4.5"
5) "apple"
6) "8"
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> zadd k1 80 a 60 b 70 c
(integer) 3
127.0.0.1:6379> zadd k2 60 b 100 d 40 e
(integer) 3
127.0.0.1:6379> ZUNIONSTORE k3 2 k1 k2
(integer) 5
127.0.0.1:6379> ZRANGE k3 0 -1 withscores
1) "e"
2) "40"
3) "c"
4) "70"
5) "a"
6) "80"
7) "d"
8) "100"
9) "b"
10) "120"
127.0.0.1:6379> ZUNIONSTORE k4 2 k1 k2 weights 1 0.5 # 并集 权重
(integer) 5
127.0.0.1:6379> ZRANGE k4 0 -1 withscores
1) "e"
2) "20"
3) "d"
4) "50"
5) "c"
6) "70"
7) "a"
8) "80"
9) "b"
10) "90"
127.0.0.1:6379> ZUNIONSTORE k4 2 k1 k2 aggregate max # 并集 取最大值
(integer) 5
127.0.0.1:6379> ZRANGE k4 0 -1 withscores
1) "e"
2) "40"
3) "b"
4) "60"
5) "c"
6) "70"
7) "a"
8) "80"
9) "d"
10) "100"
127.0.0.1:6379> ZRANGE k4 0 -1
1) "e"
2) "b"
3) "c"
4) "a"
5) "d"
Sorted Set:排序是怎么实现的增删改查的速度?-->skip list:跳跃表
Redis缓存数据库(二)
干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!