【NoSql】Redis

发布于:2025-03-16 ⋅ 阅读:(14) ⋅ 点赞:(0)

Ubuntu22.04版本编译安装 Redis

Redis version=7.4.2

#解压源码包
tar -zxvf redis-stable.tar.gz
cd redis-stable/
make
make install

安装好了后,可执行文件默认会放入/usr/local/bin/

root@luobozi:~ ls /usr/local/bin/*
/usr/local/bin/redis-cli
/usr/local/bin/redis-benchmark  /usr/local/bin/redis-sentinel
/usr/local/bin/redis-check-aof  /usr/local/bin/redis-server
/usr/local/bin/redis-check-rdb

redis-cli
redis-server
redis-benchmark
redis-sentinel
redis-check-rdb
redis-check-aof

cp配置文件

cp ./redis-stable/redis.conf /etc/
bind 0.0.0.0

redis-server /etc/redis/redis.conf

redis数据类型

  1. 字符串Strings
  2. 列表Lists
  3. 集合Sets
  4. 哈希Hashes
  5. 有序集合SortedSets
  6. 流Stream
  7. 地理空间Geospatial
  8. 基数统计HyperLogLog
  9. 位图Bitmap
# set 插入数据
192.168.100.30:6379> set key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]

EX seconds:多少秒之后过期
PX milliseconds:多少毫秒之后过期
EXAT unix-time-seconds:指定时间戳过期(秒)
PXAT unix-time-milliseconds:指定时间戳过期(毫秒)
KEEPTTL:设置指定的生存时间

NX:键不存在时设置value值(key存在,不会修改值)
XX:键存在更新value值(默认)

字符串Strings

192.168.100.30:6379> set k2 bbb NX
OK
192.168.100.30:6379> set k2 ccc NX
(nil)
192.168.100.30:6379> set k2 ccc xx
OK
192.168.100.30:6379> get k2
"ccc"
192.168.100.30:6379> type k2
string
192.168.100.30:6379> del k2
(integer) 1
192.168.100.30:6379> get k2
(nil)

过期时间

# 设置10s后过期
192.168.100.30:6379> set time1 10s ex 10
OK
# 设置10000ms后过期
192.168.100.30:6379> set time1 10s px 10000
OK
# 时间戳后过期
192.168.100.30:6379> set time1 10s exat 1742027980
OK

# 查看过期时间
192.168.100.30:6379> set time1 10s ex 100
OK
192.168.100.30:6379> ttl time1
(integer) 95

同时设置多个值

mset
msetnx

192.168.100.30:6379> mset k1 v1 k2 v2 k3 v3
OK
# 返回的顺序和key保持一致
192.168.100.30:6379> mget k1 k2
1) "v1"
2) "v2"
192.168.100.30:6379> mget k2 k1
1) "v2"
2) "v1"

#  msetnx 键不存在时设置value值,只要key存在则命令整体会失败
192.168.100.30:6379> msetnx k1 v11 k4 v4
(integer) 0
192.168.100.30:6379> mget k1 k2 k3 k4
1) "v1"
2) "v2"
3) "v3"
4) (nil)

字符串操作

# 切片操作
192.168.100.30:6379> set k1 abcd12345678
OK
192.168.100.30:6379> get k1
"abcd12345678"
192.168.100.30:6379> getrange k1 0 4
"abcd1"
192.168.100.30:6379> getrange k1 0 -1
"abcd12345678"

# 替换操作
192.168.100.30:6379> setrange k1 2 xxx
(integer) 12
192.168.100.30:6379> get k1
"abxxx2345678"


# 默认不支持赋值等数学符号运算,可以通过下面的方式加减
192.168.100.30:6379> incr k1
(integer) 101
192.168.100.30:6379> incrby k1 5
(integer) 106
192.168.100.30:6379> get k1
"106"
192.168.100.30:6379> decr k1
(integer) 105
192.168.100.30:6379> decrby k1 5
(integer) 100


#获取字符串长度
192.168.100.30:6379> strlen k1
(integer) 3
192.168.100.30:6379> get k1
"100"

#追加数据到字符串末尾
192.168.100.30:6379> append k1 abc
(integer) 6
192.168.100.30:6379> get k1
"100abc"

列表

在redis中,列表的底层实现是双向链表,可以容纳40多亿个数据



192.168.100.30:6379> lpush lk1 1 2 3 4
(integer) 4
192.168.100.30:6379> lpush lk1 5
(integer) 5
192.168.100.30:6379> lrange lk1 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"

#可以看到 push 顺序是从1 push 到5
--------------------------
lpush  ->  1 2 3 4 5
--------------------------
# 查看就是 5 4 3 2 1 
--------------------------
lrange  -> 5 4 3 2 1
--------------------------


192.168.100.30:6379> lindex lk1 0
"5"
192.168.100.30:6379> lindex lk1 2
"3"
192.168.100.30:6379> llen lk1
(integer) 5
192.168.100.30:6379> rpush lk1  a b c d
(integer) 9
192.168.100.30:6379> lrange lk1 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
6) "a"
7) "b"
8) "c"
9) "d"
--------------------------
 1 2 3 4 5	a b c d	 <- rpush 
--------------------------


# 拿走左边的数据(移除)
192.168.100.30:6379> lpop lk1
"5"
192.168.100.30:6379> lrange lk1 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "a"
6) "b"
7) "c"
8) "d"
# 拿走右边的数据
192.168.100.30:6379> rpop lk1
"d"
192.168.100.30:6379> lrange lk1 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "a"
6) "b"
7) "c"

# 删除2个(如果有2个)指定的元素
192.168.100.30:6379> lrem lk1 2 a
(integer) 1
192.168.100.30:6379> lrange lk1 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "b"
6) "c"



# 将一个列表的元素移动到另一个列表
192.168.100.30:6379> lpush lk2 1 2 3 4 5 6
(integer) 6
192.168.100.30:6379> lrange lk2 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
192.168.100.30:6379> lpush lk3 a b c d e f
(integer) 6
192.168.100.30:6379> lrange lk3 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
192.168.100.30:6379> rpoplpush lk2 lk3
"1"
192.168.100.30:6379> lrange lk2 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
192.168.100.30:6379> lrange lk3 0 -1
1) "1"
2) "f"
3) "e"
4) "d"
5) "c"
6) "b"
7) "a"

# 只保留指定的下标元素
192.168.100.30:6379> lrange lk3 0 -1
1) "1"
2) "f"
3) "e"
4) "d"
5) "c"
6) "b"
7) "a"
192.168.100.30:6379> LTRIM lk3 0 1
OK
192.168.100.30:6379> lrange lk3 0 -1
1) "1"
2) "f"

# 修改指定下标的值
192.168.100.30:6379> lset lk3 0 Redis
OK
192.168.100.30:6379> lrange lk3 0 -1
1) "Redis"
2) "f"

# 指定在哪个值前后插入数据
192.168.100.30:6379> linsert lk3 before Redis  hello
(integer) 3
192.168.100.30:6379> linsert lk3 after Redis world
(integer) 4
192.168.100.30:6379> lrange lk3 0 -1
1) "hello"
2) "Redis"
3) "world"
4) "f"