It is more or less used in NoSQL development, and it is also a necessary knowledge point for interview. I’ve asked every interview in recent days. However, I feel that the answer is not good, and there are still many knowledge points that need to be sorted out. Here, I’ll comb through several redis notes, and then add the above test questions.
- Redis series (I) introduction to redis
- Redis series (II) 8 data types of redis
- Redis series (III) integration of redis transactions and spring boot
- Redis series (IV) redis profile and persistence
- Redis series (V) publish subscribe mode, master-slave replication and sentinel mode
- Redis series (VI) redis’s cache penetration, cache breakdown and cache avalanche
- Redis series (VII) redis interview questions
- Redis Command Reference
1. What is NoSQL
NoSQL = not only SQL (not just SQL)
Relational databases: tables, rows, columns
Generally refers to the of non relational database, with the birth of Web 2.0 Internet! The traditional relational database is difficult to deal with the Web 2.0 era! Especially large-scale and highly concurrent communities! Many insurmountable problems have been exposed. NoSQL is developing very rapidly in today’s big data environment. Redis is the fastest growing technology and we must master it now!
There are many data types, such as user’s personal information, social networks, and geographic location. The storage of these data types does not need a fixed format! It can be expanded horizontally without redundant operations. MapUse key value pairs to control.
Features of NoSQL：
1. Easy to expand (there is no relationship between data, so it is easy to expand)
2. Large amount of data and high performance (redis writes 80000 times and reads 110000 times a second. NoSQL cache is a fine-grained cache with high performance)
3. The data types are diverse (there is no need to design the database in advance, and it can be used as needed)
Comparison between traditional RDBMS and NoSQL：
Traditional RDBS -Structured organization - SQL -Data and relationships exist in separate tables -Operation language, database definition language -Strict consistency -Basic transaction - ...
NoSQL -Not just data -There is no fixed query language -Key value pair storage, column storage, document storage, graphic database -Final consistency -Cap theorem and base (remote multi activity) -High performance, high availability and high scalability
2. Four categories of NoSQL
KV key value pair: redis
Document database (like JSON and bson):
- Mongodb is aDistributed file storageThe database, written in C + +, is mainly used to process a large number of documents.
- Mongodb is aProducts between relational database and non relational data！ Mongodb is the most functional of non relational data and most like relational database.
Column storage database:
- distributed file system
Figure relational database:
- Instead of storing graphics, he puts relationships, such as circle of friends, social networks, advertising recommendations
3. Getting started with redis
Redis (remote dictionary server), i.e. remote dictionary service!
It is an open source log and key value database written in ANSI C language, supports network, can be based on memory and can be permanently brushed, and provides APIs in multiple languages. Free and open source! Is one of the most popular NoSQL technologies, also known as institutional database.
1. In memory storage, persistence (RDB and AOF)
2. Efficient and can be used for caching
3. Publish subscribe system
4. Map information analysis
5. Counters, timers (e.g. views)
1. Diverse data types
Redis official website:https://redis.io/
Redis Chinese website:http://www.redis.cn/
4. Redis installation started
Download the compressed package from the official website and upload it to the server
[[email protected] opt]# ll -rw-r--r-- 1 root root 2002463 Apr 29 00:18 redis-5.0.8.tar.gz [ [email protected] opt]# tar -zxvf redis-5.0.8.tar.gz # decompression [ [email protected] redis-5.0.8]# yum install gcc-c++ # Increase environmental support [ [email protected] redis-5.0.8]# make # install [[email protected] redis-5.0.8]# make install [ [email protected] redis-5.0.8]# cd /usr/local/bin # Enter the default installation directory of redis [[email protected] bin]# ls jemalloc-config jeprof luajit mcrypt redis-benchmark redis-check-rdb redis-sentinel jemalloc.sh libmcrypt-config luajit-2.0.4 mdecrypt redis-check-aof redis-cli redis-server
[[email protected] bin]# mkdir kconfig [[email protected] bin]# cp /opt/redis-5.0.8/redis.conf kconfig/ [[email protected] bin]# cd kconfig/ [[email protected] kconfig]# ls redis.conf
Modify the configuration file for background startup:
[[email protected] kconfig]# pwd /usr/local/bin/kconfig [[email protected] kconfig]# vim redis.conf
Modify configuration item:
[[email protected] bin]# ls jemalloc-config jeprof libmcrypt-config luajit-2.0.4 mdecrypt redis-check-aof redis-cli redis-server jemalloc.sh kconfig luajit mcrypt redis-benchmark redis-check-rdb redis-sentinel [ [email protected] Bin]# redis server kconfig / redis.conf # start redis through a specific configuration file 8178:C 29 Apr 2020 08:43:40.043 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 8178:C 29 Apr 2020 08:43:40.043 # Redis version=5.0.8, bits=64, commit=00000000, modified=0, pid=8178, just started 8178:C 29 Apr 2020 08:43:40.043 # Configuration loaded
Connect and test using the client:
[[email protected] bin]# redis-cli -p 6379 127.0.0.1:6379> ping PONG 127.0.0.1:6379> set name test OK 127.0.0.1:6379> get name "test" 127.0.0.1:6379>
View redis process: open another window
[[email protected] ~]# ps -ef|grep redis root 8179 1 0 08:43 ? 00:00:00 redis-server 127.0.0.1:6379 root 8210 3437 0 08:44 pts/1 00:00:00 redis-cli -p 6379 root 8306 8281 0 08:48 pts/2 00:00:00 grep --color=auto redis
127.0.0.1:6379> shutdown # Close redis not connected> exit # sign out [[email protected] bin]# ps -ef|grep redis root 8330 3437 0 08:49 pts/1 00:00:00 grep --color=auto redis [[email protected] bin]#
The cluster test may be started with a single machine and multiple redis later.
5. Redis performance test
Redis benchmark is a built-in stress testing tool on the official website.
|Serial number||option||describe||Default value|
|1||-h||Specify the server host name||127.0.0.1|
|2||-p||Specify server port||6379|
|3||-s||Specify server socket|
|4||-c||Specifies the number of concurrent connections||50|
|5||-n||Specify the number of requests||10000|
|6||-d||Specifies the data size of the set / get value in bytes||2|
|7||-k||1=keep alive 0=reconnect||1|
|8||-r||Set / get / incr uses random keys and Sadd uses random values|
|9||-P||Transmission through pipelinerequest||1|
|10||-q||Force to exit redis. Show only query / sec values|
|11||–csv||Export in CSV format|
|12||-l||Generate a loop and permanently execute the test|
|13||-t||Run only a comma separated list of test commands.|
|14||-I||Idle mode. Open only n idle connections and wait.|
#Test 100 concurrent connections and 100000 requests redis-benchmark -h localhost -p 6379 -c 100 -n 100000
====== SET ====== 100000 requests completed in 1.97 seconds # Write test on 100000 requests 100 parallel clients # 100 concurrent clients 3 bytes payload # Write 3 bytes at a time keep alive: 1 # There is only one server to handle these requests, that is, stand-alone performance 19.56% <= 1 milliseconds 98.70% <= 2 milliseconds 99.82% <= 3 milliseconds 99.85% <= 9 milliseconds 99.94% <= 10 milliseconds 99.95% <= 126 milliseconds 99.96% <= 127 milliseconds 100.00% <= 127 milliseconds # All requests were processed in 127 milliseconds 50761.42 requests per second # 50761.42 requests processed per second
6. Basic knowledge
Redis has 16 databases by default, which can be viewed in the configuration file.
[[email protected] bin]# vim kconfig/redis.conf
# Set the number of databases. The default database is DB 0, you can select # a different one on a per-connection basis using SELECT where # dbid is a number between 0 and 'databases'-1 databases 16
The default is 0.
selectTo switch databases, use the
dbsizeView database size:
[[email protected] bin]# redis-cli -p 6379 127.0.0.1:6379> ping PONG 127.0.0.1:6379> select 3 # Switch database OK 127.0.0.1:6379> dbsize # View database size (integer) 0 127.0.0.1:6379> set name jack OK 127.0.0.1:6379> dbsize (integer) 1 127.0.0.1:6379>
View all in the database
127.0.0.1:6379> keys * 1) "name" 127.0.0.1:6379>
Clear current database:
127.0.0.1:6379> flushdb OK 127.0.0.1:6379> keys * (empty list or set)
Clear all databases:
127.0.0.1:6379> flushall OK 127.0.0.1:6379> keys * (empty list or set)
7. Redis is single threaded. What’s so fast (interview question)
Redis is fast. Officials say that redis is based on memory operation. CPU is not redis’s performance bottleneck. Redis’s performance bottleneck is the machine’s memory and network bandwidth. Since it can be implemented by single thread, single thread is used.
Redis is written in C language. The official data provided is 100000 + QPS, which is no worse than memecache, which also uses key value.
Why is redis single thread so fast?
1. Myth 1: high performance servers must be multilinear?
2. Myth 2: multi thread must be more efficient than single thread?
To understand the execution efficiency, CPU > memory > hard disk
Core: redis puts all data in memory. It is said that using a single thread to operate has the highest execution efficiency. During the execution of multiple threads, CPU context switching is required, which is a time-consuming operation. For the memory system, if there is no context switching, the efficiency is the highest. Multiple reads and writes are on one CPU. In the case of memory, this is the best solution.
Redis adopts network IO multiplexing technology to ensure the high throughput of the system when multiple connections are made.Reference articles
The next note will introduce the five major data types and three special types of redis.