Redis缓存数据库

这篇具有很好参考价值的文章主要介绍了Redis缓存数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、概述

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 数据库引擎

1、Redis

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 是二进制安全的

 2、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 @<group>" to get a list of commands in <group>
      "help <command>" for help on <command>
      "help <tab>" 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>

Redis Windows环境设置

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后为密码设置

3、String: 字符串

3.1、字符串

正反向索引:正向:从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 <subcommand> [<arg> [value] [opt] ...]. Subcommands are:
 2) ENCODING <key>
 3)     Return the kind of internal representation used in order to store the value
 4)     associated with a <key>.
 5) FREQ <key>
 6)     Return the access frequency index of the <key>. The returned integer is
 7)     proportional to the logarithm of the recent access frequency of the key.
 8) IDLETIME <key>
 9)     Return the idle time of the <key>, that is the approximated number of
10)     seconds elapsed since the last access to the key.
11) REFCOUNT <key>
12)     Return the number of references of the value associated with the specified
13)     <key>.
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>

3.2、数值

字符串中有数值

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内存操作代替。

3.3、bitmap

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>

4、Hash: 散列

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>

5、List: 列表

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>

6、Set: 集合

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>

使用场景:抽奖

7、Sorted Set: 有序集合

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缓存数据库(二)

干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!文章来源地址https://www.toymoban.com/news/detail-440336.html

到了这里,关于Redis缓存数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis---数据库和缓存如何保证一致性?

    用「读 + 写」请求的并发的场景来分析: 假如某个用户数据在缓存中不存在,请求 A 读取数据时从数据库中查询到年龄为 20,在未写入缓存中时另一个请求 B 更新数据。它更新数据库中的年龄为 21,并且清空缓存。这时请求 A 把从数据库中读到的年龄为 20 的数据写入到缓存

    2024年01月24日
    浏览(57)
  • Redis如何保障缓存与数据库的数据一致性问题?

    目录 一.最经典的数据库加缓存的双写双删模式 二. 高并发场景下的缓存+数据库双写不一致问题分析与解决方案设计 三、上面高并发的场景下,该解决方案要注意的问题 1.1 Cache Aside Pattern概念以及读写逻辑 (1)读的时候,先读缓存,缓存没有的话,那么就读数据库,然后取

    2023年04月21日
    浏览(49)
  • redis的缓存更新策略以及如何保证redis与数据库的数据一致性

    redis的缓存更新策略有这么几种: 1、由应用直接和redis以及数据库相连接:         查询数据时,应用去redis中查询,查不到的话再由应用去数据库中查询,并将查询结果放在redis;         更新数据时,由应用去触发redis数据的删除以及数据库的update。 2、应用只跟redi

    2024年02月13日
    浏览(57)
  • Springboot+Redis:实现缓存 减少对数据库的压力

    🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏 Redis实战与进阶 本专栏讲解Redis从原理到实践 这是苏泽的个人主页可以看到我其他的内容哦👇👇 努力的苏泽 http://suzee.blog.csdn.net/   目录 缓存如何实现?

    2024年03月24日
    浏览(59)
  • 数据库缓存服务——NoSQL之Redis配置与优化

    目录 一、缓存概念 1.1 系统缓存 1.2 缓存保存位置及分层结构 1.2.1 DNS缓存 1.2.2 应用层缓存 1.2.3 数据层缓存 1.2.4 硬件缓存 二、关系型数据库与非关系型数据库 2.1 关系型数据库 2.2 非关系型数据库 2.3 关系型数据库和非关系型数据库区别: 2.4 非关系型数据库产生背景 2.5 总结

    2024年02月15日
    浏览(50)
  • Redis数据库 | 发布订阅、主从复制、哨兵模式、缓存雪崩

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息 Redis 客户端可以订阅任意数量的频道 Redis主从复制是指在Redis中设置一个主节点(Master)和一个或多个从节点(Slave),

    2024年02月15日
    浏览(57)
  • REDIS21_缓存双写一致方案、先更新数据库再删除缓存

    ①. 缓存双写一致性,谈谈你的理解 如果redis中有数据,需要和数据库中的值相同 如果redis中无数据,数据库中的值要是最新值 ②. 什么时候同步直写? 小数据,某条、某一小戳热点数据,要求立刻变更,可以前台服务降价一下,后台马上同步直写 ③. 什么时候异步缓写? 正常业务,马

    2023年04月08日
    浏览(47)
  • Redis缓存MySQL数据库存储二者如何保证数据一致性

    在大型互联网应用中,由于数据库读写频繁、压力大等原因,我们通常会使用缓存来减少数据库的访问次数,提高系统的性能。而Redis作为一个高性能的内存数据库,成为了缓存的首选方案之一。但是,缓存和数据库之间存在数据一致性的问题,如何解决这个问题呢?本文将

    2023年04月19日
    浏览(52)
  • redis面试题目-如何保证数据库与缓存的数据一致性

    原视频:https://www.bilibili.com/video/BV1Km4y1r75f?p=62vd_source=fa75329ae3880aa55609265a0e9f5d34 由于缓存和数据库是分开的,无法做到原子性的同时进行数据修改,可能出现缓存更新失败,或者数据库更新失败的情况,这时候会出现数据不一致,影响前端业务 先更新数据库,再更新缓存。缓

    2024年02月05日
    浏览(64)
  • 如何保证Redis缓存和数据库的一致性问题

    熟练掌握Redis缓存技术? 那么请问Redis缓存中有几种读写策略,又是如何保证与数据库的一致性问题 今天来聊一聊常用的三种缓存读写策略 首先我们来思考一个问题 写 先更新缓存 再更新数据库 首先如果缓存更新成功但数据库更新失败,会导致数据不一致的问题 其次当请求

    2024年02月14日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包