持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天
什么是Redis
redis用c编写的key - value内存数据库,也可持久化。
安装
Macos可使用homebrew安装Linux可使用对应包管理器安装或者源码安装docker镜像安装
$ docker pull redis:latest
$ docker run --name redis -d -p 6379:6379 redis:latest
$ docker exec -it redis bash
使用
-
redis命令不区分大小写 -
INFO
查看
redis-server统计信息
- 数据类型
redis包含stringhashlistsetsorted set(zset)类型
String字符串(set & get)
set和get是一对,用于设置和查看string类型的key - value,string是二进制安全的,大概意思就是string类型可以包含所有数据,string类型一个键最大能存储512 MB
127.0.0.1:6379> set name crackzj
OK
127.0.0.1:6379> SET age 18
OK
127.0.0.1:6379> get age
"18"
127.0.0.1:6379> GET name
"crackzj"
del & exists
del删除存在的key,exsits查看key是否存在
127.0.0.1:6379> del age
(integer) 1
127.0.0.1:6379> exists age
(integer) 0
Hash哈希 (hset & hget)
hset & hget用于设置 / 获取hash(map)类型(一次只能操作一个key),hash一般用于存储 对象,hash最多存储 个键值对
127.0.0.1:6379> hset obj name crackzj
(integer) 1
127.0.0.1:6379> hget obj name
"crackzj"
Hash哈希hmset & hmget
hmset & hmget用于一次设置 / 获取多个hash值。
127.0.0.1:6379> hmset obj age 18 gender man
OK
127.0.0.1:6379> hmget obj name age gender
1) "crackzj"
2) "18"
3) "man"
Hash哈希hincrby hexists hdel hlen
以上几个命令都是操作
hash field对象里面字段值的,
hincrby字面意思给指定的field加上给定的值(字段的值必须是可加的,比如整数)hexists测试指定的字段是否存在hdel删除指定的字段hlen返回hash的字段长度
127.0.0.1:6379> hincrby obj age 1
(integer) 19
127.0.0.1:6379> hincrby obj name 2
(error) ERR hash value is not an integer
127.0.0.1:6379> hexists obj sex
(integer) 0
127.0.0.1:6379> hexists obj name
(integer) 1
127.0.0.1:6379> hdel obj gender
(integer) 1
127.0.0.1:6379> hlen obj
(integer) 2
hkeys hvals hgetall
以上三个命令用于操作
hash,类似于hget hmget
hkeys返回hash指定key的所有字段(field)hvals返回hash指定key的所有值(value)hgetall返回hash指定key的字段和值
127.0.0.1:6379> hkeys obj
1) "name"
2) "age"
127.0.0.1:6379> hvals obj
1) "crackzj"
2) "19"
127.0.0.1:6379> hgetall obj
1) "name"
2) "crackzj"
3) "age"
4) "19"
List列表 (lpush/rpush & lrange)
list最多可存储 个元素,lrange起止位置为闭区间。
lpush/rpush用于向列表中加入元素,lpush从头(起始位置)加入,rpush从尾部加入lrange查看指定列表的元素
127.0.0.1:6379> lpush arr crackzj 19
(integer) 2
127.0.0.1:6379> rpush arr man
(integer) 3
127.0.0.1:6379> lrange arr 0 3
1) "19"
2) "crackzj"
3) "man"
List列表 (linsert)
linsert {key} {before|after} {pivot} {value},在列表中查找等于pivot的元素,并在其前(before)或后(after)插入元素value。返回值为列表中元素个数,失败时返回-1。
127.0.0.1:6379> linsert arr before 2 z
(integer) 6
127.0.0.1:6379> lrange arr 0 -1
1) "3"
2) "z"
3) "2"
4) "18"
5) "crackzj"
6) "man"
List列表 (lindex)
lindex {key} {index},获取list指定索引的元素。索引可以为负,即从列表右端开始数起。
127.0.0.1:6379> lindex arr 2
"2"
127.0.0.1:6379> lindex arr -1
"man"
List列表 (llen)
llen返回列表的长度
127.0.0.1:6379> llen
(integer) 6
List列表 (lpop/rpop)
lpop/rpop {key} {count},从列表左端/右端弹出一个元素,count为弹出个数。返回元素的值,不存在返回nil。
127.0.0.1:6379> lpop arr
"3"
127.0.0.1:6379> rpop arr
"man"
List列表 (lrem)
lrem {key} {count} {value},此命令会从list中找到值等于value的元素进行删除,根据count的不同有三种情况:
count>0: 头->尾 删除值等于value的元素,个数countcount<0: 尾->头 删除值等于value的元素,个数countcount=0: 删除所有等于value的元素
127.0.0.1:6379> lrem arr 1 z
(integer) 1
127.0.0.1:6379> lrem arr -1 18
(integer) 1
List列表 (ltrim)
ltrim {key} {start} {end},按照索引的范围修剪列表(并覆盖原列表),start为开始位置的索引,end为结束位置的索引。索引可以为负数,代表从右端开始数起。修剪是从左向右的,所以start需要大于end的索引,否则修剪出来会为空列表。修剪成功返回OK。
一句话总结,ltrim就是提取list的子集
未完待续...
参考文章链接: eririspace.cn/2022/04/02/…