OS : CentOS Linux release 7.7.1908 (Core)
Redis : redis-5.0.9.tar.gz
一、安装启动Redis
[root@redis01 opt]# yum install cc gcc -y
[root@redis01 opt]# tar xzf redis-5.0.9.tar.gz
[root@redis01 opt]# ls
redis-5.0.9 redis-5.0.9.tar.gz
[root@redis01 opt]# cd redis-5.0.9
[root@redis01 redis-5.0.9]# make
[root@redis01 redis-5.0.9]# ./src/redis-server redis.conf
23821:C 31 Aug 2020 21:30:24.390 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
23821:C 31 Aug 2020 21:30:24.390 # Redis version=5.0.9, bits=64, commit=00000000, modified=0, pid=23821, just started
23821:C 31 Aug 2020 21:30:24.390 # Configuration loaded
23821:M 31 Aug 2020 21:30:24.391 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 5.0.9 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 23821
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
23821:M 31 Aug 2020 21:30:24.392 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
23821:M 31 Aug 2020 21:30:24.392 # Server initialized
23821:M 31 Aug 2020 21:30:24.392 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
23821:M 31 Aug 2020 21:30:24.392 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
23821:M 31 Aug 2020 21:30:24.393 * Ready to accept connections
[root@redis01 redis-5.0.9]# netstat -anultp | grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 23821/./src/redis-s
tcp 0 0 127.0.0.1:47086 127.0.0.1:6379 TIME_WAIT -
[root@redis01 redis-5.0.9]# ps -ef | grep redis
root 23821 1238 0 05:57 pts/0 00:00:20 ./src/redis-server 127.0.0.1:6379
root 23966 23836 0 09:11 pts/1 00:00:00 grep --color=auto redis
[root@redis01 redis-5.0.9]#
[root@redis01 redis-5.0.9]# ./src/redis-cli
127.0.0.1:6379>
二、数据类型的使用场景
1.string类型
(1)单值缓存
[root@redis01 redis-5.0.9]# ./src/redis-cli
127.0.0.1:6379> set name pony
OK
127.0.0.1:6379> get name
"pony"
127.0.0.1:6379>
(2)对象缓存
127.0.0.1:6379> set user:1 '{"name":"pony","scores":90}' # json格式存储对象
OK
127.0.0.1:6379> get user:1
"{\"name\":\"pony\",\"scores\":90}"
127.0.0.1:6379> mset user:1:name pony user:1:scores 90 # 使用mset,mget(性能较高)
OK
127.0.0.1:6379> mget user:1:name user:1:scores
1) "pony"
2) "90"
(3)分布式锁
127.0.0.1:6379> setnx name JACK (当不存在name是才设置name为JACK,如果存在则不更改原值)
(integer) 0
127.0.0.1:6379> get name
"pony"
127.0.0.1:6379> set names Jack
OK
127.0.0.1:6379> get names
"Jack"
127.0.0.1:6379>
(4)计数器
127.0.0.1:6379> incr number
(integer) 1
127.0.0.1:6379> incr number
(integer) 2
127.0.0.1:6379> incr number
(integer) 3
127.0.0.1:6379> get number
"3"
127.0.0.1:6379>
(5)Web集群session共享
spring session + redis实现session共享
(6)分布式系统全局序列号
127.0.0.1:6379> incrby orderid 1000
(integer) 1000
127.0.0.1:6379> incrby orderid 1000
(integer) 2000
127.0.0.1:6379> incrby orderid 1000
(integer) 3000
127.0.0.1:6379> get orderid
"3000"
127.0.0.1:6379>
2.Hash常用操作
(1)对象存储
127.0.0.1:6379> hmset user name ponyMa scores 66
OK
127.0.0.1:6379> hmget user name scores
1) "ponyMa"
2) "66"
127.0.0.1:6379>
(2)电商购物车
127.0.0.1:6379> hset cart:1001 1008 1
(integer) 1
127.0.0.1:6379> hincrby cart:1001 1008 1
(integer) 2
127.0.0.1:6379> hlen cart:1001
(integer) 1
127.0.0.1:6379> hget cart:1001 1008
"2"
127.0.0.1:6379> hdel cart:1001 1008
(integer) 1
127.0.0.1:6379> hget cart:1001 1008
(nil)
127.0.0.1:6379>
127.0.0.1:6379> hgetall cart:1001
1) "1008"
2) "1"
127.0.0.1:6379> hgetall cart:1002
1) "1008"
2) "2"
127.0.0.1:6379>
3.List常用操作
栈: lpush + lpop -> FILO
队列: lpush + rpop
127.0.0.1:6379> lpush l 1 2 3
(integer) 3
127.0.0.1:6379> lrange l -3 0
1) "3"
127.0.0.1:6379> lrange l -1 2
1) "1"
127.0.0.1:6379>
127.0.0.1:6379> lrange le -1 2
(empty list or set)
127.0.0.1:6379> lpush lage 1 2 3
(integer) 3
127.0.0.1:6379> lpop lage
"3"
127.0.0.1:6379> lrange lage 0 10
1) "2"
2) "1"
127.0.0.1:6379> rpop lage
"1"
127.0.0.1:6379> lrange lage 0 10
1) "2"
127.0.0.1:6379>
4.set常用操作(无序不重复)
127.0.0.1:6379>
127.0.0.1:6379> sadd t 1
(integer) 1
127.0.0.1:6379> sadd t 1 # 不重复
(integer) 0
127.0.0.1:6379> smembers t
1) "1"
127.0.0.1:6379>
127.0.0.1:6379> sadd sa 1 2 3 4 5 6 7 8 9 0 #创建sa集合
(integer) 10
127.0.0.1:6379> smembers sa # 遍历
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
7) "6"
8) "7"
9) "8"
10) "9"
127.0.0.1:6379> scard sa # 统计个数
(integer) 10
127.0.0.1:6379> sismember sa 11 # 判断是否为其元素
(integer) 0
127.0.0.1:6379> sismember sa 1
(integer) 1
127.0.0.1:6379> srandmember sa 5 # 随机选出5个元素
1) "8"
2) "9"
3) "4"
4) "1"
5) "6"
127.0.0.1:6379> spop sa 5 # 随机选出5个元素并删除
1) "3"
2) "4"
3) "5"
4) "6"
5) "9"
127.0.0.1:6379> smembers sa
1) "0"
2) "1"
3) "2"
4) "7"
5) "8"
127.0.0.1:6379> srem sa 0 # 删除指定元素
(integer) 1
127.0.0.1:6379> smembers sa
1) "1"
2) "2"
3) "7"
4) "8"
127.0.0.1:6379>
运算符操作:
127.0.0.1:6379> smembers sa
1) "1"
2) "2"
3) "7"
4) "8"
127.0.0.1:6379> sadd sd 1 5 9
(integer) 3
127.0.0.1:6379> sinter sa sd # 求交集
1) "1"
127.0.0.1:6379> sinterstore new_sad sa sd # 交集存入new_sad
(integer) 1
127.0.0.1:6379> smembers new_sad
1) "1"
127.0.0.1:6379> sunion sa sd # 求并集
1) "1"
2) "2"
3) "5"
4) "7"
5) "8"
6) "9"
127.0.0.1:6379> sunionstore ss sa sd # 并集存入ss
(integer) 6
127.0.0.1:6379> smembers ss
1) "1"
2) "2"
3) "5"
4) "7"
5) "8"
6) "9"
127.0.0.1:6379> sdiff sa sd # 求差集
1) "2"
2) "7"
3) "8"
127.0.0.1:6379> sdiffstore sdf sa sd # 差集存入sdf
(integer) 3
127.0.0.1:6379> smembers sdf
1) "2"
2) "7"
3) "8"
127.0.0.1:6379>
5.zset的常用操作(有序不重复)
127.0.0.1:6379> zadd za 1 redis
(integer) 1
127.0.0.1:6379> zadd za 2 mongodb
(integer) 1
127.0.0.1:6379> zadd za 3 java
(integer) 1
127.0.0.1:6379> zrange za 0 10
1) "redis"
2) "mongodb"
3) "java"
127.0.0.1:6379> zrange za 0 10 withscores
1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "java"
6) "3"
127.0.0.1:6379> zrange za 0 10
1) "redis"
2) "mongodb"
3) "java"
127.0.0.1:6379> zadd za 3 java
(integer) 0
127.0.0.1:6379> zcard za
(integer) 3
127.0.0.1:6379> zcount za 1 2
(integer) 2
127.0.0.1:6379> zadd za 2 javascript
(integer) 1
127.0.0.1:6379> zcount za 1 2
(integer) 3
127.0.0.1:6379> zscore za java
"3"
127.0.0.1:6379> zrank za redis
(integer) 0
127.0.0.1:6379> zrank za java
(integer) 3
127.0.0.1:6379> zrange za 0 2
1) "redis"
2) "javascript"
3) "mongodb"
127.0.0.1:6379> zrange za 0 3
1) "redis"
2) "javascript"
3) "mongodb"
4) "java"
127.0.0.1:6379>