认识Nosql
了解redis
安装redis
这里安装是在Linux中安装,提供两种方法,一种就是自己手动配置redis,另一种就是通过ailiyun 的yum在线仓库直接下载,不用下载gcc这个编译器
方法一:
第一步:先装 epel 扩展源(redis 在 epel 里面)
yum install -y epel-release第二步安装redis
yum install -y redis;
第三步:启动 + 设置开机自启
# 启动redis systemctl start redis # 开机自动启动 systemctl enable redis
第四步:验证是否启动成功
redis-cli
vi /etc/redis.conf
# 修改三项: # bind 127.0.0.1 前面加#注释 # protected-mode yes → protected-mode no # 新增 requirepass 123456
#5. 重启生效 systemctl restart redis
#6. 防火墙开放端口 firewall-cmd --add-port=6379/tcp --permanent firewall-cmd --reload
#7. 验证 redis-cli -a 123456
进去后输入ping,返回PONG就代表 redis 正常运行。 按exit退出 redis 客户端。
方法二:
1. 安装编译依赖
gcc yum install -y gcc tcl
#2. 下载redis源码包(也可以本地下载好,上传到linux) wget https://download.redis.io/releases/redis-6.2.6.tar.gz
#3. 解压 tar -zxvf redis-6.2.6.tar.gz
#4. 进入源码目录 cd redis-6.2.6
#5. 编译 make
#6. 安装到/usr/local/redis make install PREFIX=/usr/local/redis
#7. 复制配置文件 cp redis.conf /usr/local/redis/bin/
#8. 修改配置文件 vi /usr/local/redis/bin/redis.conf # bind 127.0.0.1 注释 # protected-mode yes → no # requirepass 123456 # daemonize yes 打开后台运行
#9. 启动redis cd /usr/local/redis/bin ./redis-server redis.conf
#10. 防火墙放行端口 firewall-cmd --add-port=6379/tcp --permanent firewall-cmd --reload #11. 连接测试 ./redis-cli -a 123456
数据结构:
通用命令:
keys * # 查看所有key,生产禁止!全库扫描 exists key del key expire key 秒 # 设置过期时间 ttl key # 查看剩余过期时间,-1永久,-2已过期 persist key # 取消过期 type key # 查看key的数据类型 rename key newkeyRedis的String型命令:
# 存值 SET name jack
# 取值 GET name
# 不存在才存(不覆盖) SETNX lock 1
# 存值 + 设置过期时间(秒) SET code 666666 EX 300
# 同时存多个 MSET k1 v1 k2 v2
# 同时取多个 MGET k1 k2
# 数字+1 INCR count
# 设置过期时间 EXPIRE name 60
# 查看剩余过期时间 TTL name
# 删除key DEL name
# 判断key是否存在 EXISTS name
List集合命令:
特点:双向列表,可重复,有序
# 左侧插入(头插) lpush key v1 v2 v3 # 右侧插入(尾插) rpush key v1 v2 v3 # 左侧弹出元素 lpop key # 右侧弹出元素 rpop key # 根据索引查看元素,start=0,end=-1代表全部 lrange key start end # 根据索引获取元素 lindex key index # 获取列表长度 llen key # 删除指定值,count>0从头删count个;count<0从尾删;count=0删除全部匹配值 lrem key count value # 保留区间内元素,其余删掉 ltrim key start end # 修改指定索引位置的值 lset key index value储存结构图:
左右读写快,中间操作慢;有序可以重复
Set集合列表:
无序,元素唯一,不可重复
# 添加元素 sadd key m1 m2 m3 # 获取集合所有元素 smembers key # 判断元素是否存在 sismember key member # 删除元素 srem key m1 m2 # 随机弹出一个元素 spop key # 获取集合元素总数 scard key # 集合交集:同时存在两个集合里的元素 sinter set1 set2 # 集合并集 sunion set1 set2 # 集合差集(set1有,set2没有) sdiff set1 set2储存结构图:
user:tag ────> { "java" , "redis" , "mysql" } key 元素不重复,无固定顺序元素去重,支持并集,交集的运算
Hash:
# 设置字段 hset key field value # 批量设置多个字段 hmset key f1 v1 f2 v2 # 获取单个字段 hget key field # 获取多个字段 hmget key f1 f2 # 获取该hash下【所有field和value】 hgetall key # 获取所有field名称 hkeys key # 获取所有value值 hvals key # 判断field是否存在 hexists key field # 删除hash中的field hdel key f1 f2 # 获取hash里面field的数量 hlen key # 字段数字自增 hincrby key field 增量存储结构图:
user:1001 ───> { name:"张三", age:20, sex:"男" } key field1:value1, field2:value2适合储存对象,单独修改某一个属性;
zset集合:
元素唯一,每个元素带分数,按分数从小到大排序(默认)
# 添加成员,score在前,member在后 zadd key score1 member1 score2 member2 # 按score升序查询,start end,-1全部;WITHSCORES 同时返回分数 zrange key start end [WITHSCORES] # 按score降序查询 zrevrange key start end [WITHSCORES] # 根据分数范围查询 zrangebyscore key min max [WITHSCORES] # 删除成员 zrem key member1 member2 # 获取元素总数 zcard key # 获取某个member对应的分数 zscore key member # 查询member的排名(升序,从0开始) zrank key member # 查询member的排名(降序) zrevrank key member # 给指定成员分数增加增量 zincrby key increment member # 删除指定分数区间的元素 zremrangebyscore key min max储存结构图:
rank:game ───> [ (score:90, member:"小明"), (score:80, member:"小红") ] key 成员唯一,根据score自动排序