Redis入门:https://www.imooc.com/learn/839 学习笔记
NoSQL:NoSQL = Not Only SQL,全新的数据库理念,泛指非关系型数据库。
@main/2021/四类NoSQL数据库比较.53gl5f6sk6w0.jpg" alt="四类NoSQL数据库比较">
Redis:C 语言开发的开源的、高性能的数据库,通过提供多种键值数据类型来适应不同情况下的场景需求。
高性能键值对数据库。
tar -zxvf redis-6.2.1.tar.gz
cd redis-6.2.1
make
make PREFIX=/usr/local/redis install
cp redis.conf /usr/local/redis
cd /usr/local/redis
# PATH="/usr/local/redis:$PATH"
# 前端启动
redis-server
# vim redis.conf
daemonize yes
# 后端启动
redis-server redis.conf
# 查看进程
ps -ef | grep -i redis
# 停止
redis-cli shutdown
# 客户端
redis-cli
docker pull redis:latest
docker run --name some-redis -d -p 63790:6379 redis
docker exec -it some-redis bash
set name zhangsan
get name
keys *
del name
<dependencies>
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.5.1</version>
</dependency>
</dependencies>
// 1、设置ip和port
Jedis jedis = new Jedis("192.168.9.16", 63790);
// 2、保存数据
jedis.set("name", "mooc");
// 3、获取数据
String value = jedis.get("name");
System.out.println(value);
// 4、释放资源
jedis.close();
// 1、获取连接池的配置对象
JedisPoolConfig config = new JedisPoolConfig();
// 设置对打连接数
config.setMaxTotal(30);
// 设置最大空闲连接数
config.setMinIdle(10);
// 2、获取连接池
JedisPool pool = new JedisPool(config, "192.168.9.16", 63790);
// 3、获取核心对象
Jedis jedis = null;
try {
// 通过连接池获得连接
jedis = pool.getResource();
// 设置数据
jedis.set("name", "zhangsan");
// 获取数据
System.out.println(jedis.get("name"));
} catch (Exception e) {
e.printStackTrace();
} finally {
// 释放资源
if (jedis != null) {
jedis.close();
}
if (pool != null) {
pool.close();
}
}
Key 定义的注意点:
# 赋值
set name zhangsan
getset name lisi
# 取值
get name
# 删除
del name
# 数值增减
incr num
decr num
incrby num 5
decrby num 3
# 字符串追加,返回字符串的长度
append num 5
# 赋值
hset myhash username jack
hset myhash age 18
hmset myhash2 username rose age 21
# 取值
hget myhash username
hmget myhash username age
hgetall myhash
# 删除
hdel myhash2 username
hdel myhash2 username age
del myhash2
# 数值增减
hincrby myhash age 5
hdecrby myhash age 3
# 键存在
hexists myhash username
hexists myhash password
# 长度
hlen myhash
# 键值查看
hkeys myhash
hvals myhash
# 两端添加
lpush mylist a b c
lpush mylist 1 2 3
rpush mylist2 a b c
rpush mylist2 1 2 3
# 查看列表
lrange mylist 0 5
lrange mylist20 -1
lrange mylist20 -2
# 两端弹出
lpop mylist
rpop mylist2
# 获取列表元素个数
llen mylist
llen mylist3
# 添加成功
lpushx mylist x
rpushx mylist2 y
# 失败
lpushx mylist3 x
lpush mylist3 1 2 3
lpush mylist3 1 2 3
lpush mylist3 1 2 3
lrange mylist3 0 -1
# 删除从左边开始2个3
lrem mylist3 2 3
lrange mylist3 0 -1
# 删除从右边开始2个1
lrem mylist3 -2 1
lrange mylist3 0 -1
# 删除所有的2
lrem mylist3 0 2
lrange mylist3 0 -1
# 设置下标为3(下标从0开始)的元素值为mmm
lset mylist 3 mmm
lpush mylist4 a b c
lpush mylist4 a b c
lrange mylist4 0 -1
linsert mylist4 before b 11
linsert mylist4 after b 22
lpush mylist5 1 2 3
lpush mylist6 a b c
lrange mylist5 0 -1
lrange mylist6 0 -1
rpoplpush mylist5 mylist6
lrange mylist5 0 -1
lrange mylist6 0 -1
@main/2021/rpoplpush使用场景.10n4z5iftj5s.jpg" alt="rpoplpush使用场景">
# 添加、删除元素
sadd myset a b c
sadd mysey a
sadd myset 1 2 3
srem myset 1 2
# 获得集合中的元素
smembers myset
sismember myset x
# 集合的差集运算
sadd mya1 a b c
sadd myb1 a c 1 2
sdiff mya1 myb1
sdiffstore my1 mya1 myb1
# 集合的交集运算
sinter mya1 myb1
sinterstore my2 mya1 myb1
# 集合的并集运算
sunion mya1 myb1
sunionstore my3 mya1 myb1
# 数量
scard myset
# 随机
srandmember myset
使用场景:
# 添加元素
zadd mysort 70 zhangsan 80 lisi 90 wangwu
zadd mysort 100 zhangsan
zadd mysort 85 jack 95 rose
zadd mysort 60 tom
# 获得元素
zscore mysort zhangsan
zcard mysort
# 删除元素
zrem mysort tom wangwu
# 范围查询
zrange mysort 0 -1
zrange mysort 0 -1 withscores
zrevrange mysort 0 -1 withscores
# 按排序删除
zremrangebyrank mysort 0 4
# 按分数范围删除
zremrangebyscore mysort 80 90
# 按分数过滤
zrangebyscore mysort 80 90 withscores
zrevrangebyscore mysort 90 80 withscores
zrevrangebyscore mysort 90 80 withscores limit 0 2
# 数值增减
zincrby mysort 3 lisi
zscore mysort lisi
# 按分数计数
zcount mysort 80 90
使用场景:
keys *
keys my?
del my1 my2 my3
exists my1
exists mya1
get company
rename company new_company
get new_company
# 单位:秒
expire new_company 1000
# 剩余时间
ttl new_company
type new_company
type mylist
type myset
type myhash
type mysort
# 从 0 到 15
select 0
# 将 set 移动到 1 号数据库
move myset 1
# multi 开启事务
# exec 提交事务
# discard 回滚事务
两种持久化的方式:
持久化使用的方式:
# vim redis.conf
# 每 900 秒(15min)至少有 1 个key 发生变化,那么就保存快照
save 900 1
# 每 300 秒(5min)至少有 10 个key 发生变化,那么就保存快照
save 300 10
# 每 60 秒(1min)至少有 10000 个key 发生变化,那么就保存快照
save 60 10000
dbfilename dump.rdb
dir ./
# vim redis.conf
appendonly no
appendfsync always
# appendfsync everysec
# appendfsync no