(1)redis基础知识

redis数据库

  • 默认有16个数据库,redis.conf有配置database 16
  • 数据库相关操作
select 2 # 选择2号数据库
dbsize   # 统计已存储的key数
keys *
flushdb  # 清除当前数据库
  • RedisKeys命令
expire '键' '过期时间s'          # 设置过期时间s   pexpire是毫秒级
expireat '键' '过期unix时间戳s' # 设置过期时间戳s pexpireat是毫秒级
ttl '键'   # 查看还剩多久过期s pttl是毫秒级 -1表示未设置过期时间 -2不存在或已过期

数据类型

  • 五大数据类型的命令针对键操作:string、list、set、hash、zset
    • string适合字符串存储,可以用于:计数器、粉丝数、对象缓存存储
    • List左进右出(LPUSH RPOP)可以设计成消息队列;先进后出(LPUSH LPOP)可以设计成
    • set在微博中会有 共同关注sdiff、推荐好友sunion 实现
    • hash适合对象存储,可以存储用户信息、经常变动的信息。区别于string
    • sorted set有序集合,带权重判断(普通消息 1,重要消息 2)、B站排行榜、获取top3
#### string类型
append 
# 原子性 +1
incr/decr
incrby/decrby
# 原子性,且效率更高
mset/mget/msetnx
# 截取出部分字符串
getrange
setex mykey 10 "Hello"  # 设置k-v和过期时间秒数
# 分布式锁中使用
setnx mykey "World"  #key不存在类似于set命令-1,存在什么也不做-0


#### list类型 【最左边是第一个元素,最右边是最后一个元素】
lpush/rpush mylist value
lrange mylist 0 -1            # 获取所有
rpoplpush mylist myotherlist  # 移除最后一个元素放入另一个list,并返回这个值

#### set【无序的、不可重复的】
sadd myset one two three
smembers
sismember
smove
sdiff/sunion  # 交集,并集

#### hash 【值存的是k-v的map集合】
hmset myhash user:1 edison name:1 23
hmget myhash user:1 name:1
hgetall myhash

#### zset【在set上加一个比分,具备排序功能】
zadd myzset score member
zadd salary 1000 zhangsan 800 lisi 300 xiaoming
zrangebyscore salary -inf +inf  # 按照score从低到高排序,分数相同就按照元素字母排序
zrange salary 0 -1              # 获取集合值元素
  • 三种特殊类型命令 geospatial(redis3.2) hyberloglogs(redis2.8) bitmaps

    • geo基于有序集合zset, 用于朋友定位georadiusbymember、附近的人(georadius位置数据事先导入,再半径查询)、打车距离计算 经度纬度查询
    • hyberloglog数据结构,多个集合的基数统计算法,用于网页UV(set需要保存ID,hybe只是计数)、ip流量统计、用户搜索关键字数量
    • bitmaps位存储,string也可实现,统计用户信息(活跃/不活跃,登录/未登录,打卡/未打卡)
    #### geo 【存储经度、纬度、名称】
    # 1. 两极无法直接添加
    # 2. java程序中,会事先下好城市数据,再一次性导入
    geoadd china:city 116.40 39.90 beijing 121.44 31.21 shanghai   # 插入城市的经度纬度名称
    geopos china:city beijing # 查询城市位置,返回两元素数组
    geodist china:city beijing shanghai km # 显示两地距离 km
    georadius china:city 121 31 2000 km withcoord withdist count 2 # 查找方圆2000km的城市
    zrange china:city 0 -1 # geo底层是zset(type china:city验证),可以使用zset命令
    
    #### hybeloglog 【基数统计:不重复的元素】
    # 1. 占用内存固定且很小,12k 0.81%错误率
    pfadd mykey 1 2 3 4 4 4 5 6  # 不重复统计 6
    pfadd mykey2 3 4 5 6 7 8 9
    pmerge mykey3 mykey mykey2  # 存不重复的并集元素
    
    #### bitmaps【位存储】
    # 1. 用户365天的打卡信息 只需要365bit~46K就可以存储
    setbit key 1 0  #周一未打卡
    getbit key 1    #查看周一打卡信息
    bitcount key    #统计为1的总数
    

客户端下的Server命令

config get port  #获取配置参数的值
save #主动保存rdb文件,会阻塞客户端操作
info replication  #主从复制里的角色

redis事务

redis单条命令保持原子性,但事务不保证原子性 要么全部执行,要么全部不执行

redis事务没有隔离级别概念,不存在关系型数据库的幻读脏读问题

一组redis命令在食物中并没有直接执行,只有发起执行命令exec才会执行

出现运行时异常(语法错误)时,其他依然正确执行,不回滚【事务非原子性】*;编译时异常都不执行(拼写错误)*

  • 事务是命令组合(队列),多个redis命令的操作 【redis脚本】

  • redis事务的步骤:

    • 开启事务(multi)
    • 命令入队 (set get sadd …)
    • 取消/放弃事务(discard)
    • 执行事务(exec)
  • 事务中的Redis监视——乐观锁(redis分布式锁

    • 悲观锁

    无论什么操作都加锁,使用才会释放

    • 乐观锁
  1. 任何操作都不会出现问题,所以不会上锁,只是在更新数据的时候去判断数据是否被修改过?

  2. CAS并发算法: MySQL每次提交前,会先查出数据版本version;并用version去判断是否有更新,version相同成功才提交

  3. Redis事务中使用Watch实现乐观锁,监视key是否有变化,有则当前连接事务里的命令不能提交

     watch key 
     multi -...-exec
    
  4. watch 监视键值对,作用是如果事务提交exec时发现监视的监视对发生变化,事务将被取消

  • 开两个客户端连接,模拟并发 多路复用

    redis事务里的乐观锁:
    # 1. A连接正在事务操作,还未执行,B连接修改了值,那么A执行就不成功nil
    # 2. 此时unwatch,再watch money,获取信息再监视
    
    应用场景:电子商城秒杀业务
    

在这里插入图片描述

配置文件

#1.可以引入其他文件
# include .\path\to\local.conf
# include c:\path\to\other.conf

#2.指定主机访问,默认允许本机,所有为*
bind 127.0.0.1
port 6379

#3.通用配置
daemonize yes   # 守护进程后台运行
pidfile /var/run/redis_6379.pid  # 当后台运行时,需要指定pid进程文件
loglevel notice # 日志级别设置 4种
logfile ""      # 日志文件名,默认标准输出
database 16

#4.快照SNAPSHOTTING持久化 .rdb
# save 900 1
# save 300 10
# save 60 10000
save 10 1  # 自定义的每10s内有一次更新就保存rdb
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./

#5.主从复制 replication

#6.安全性,默认无密码,config get requirepass
# requirepass foobared  
# masterauth xxxx     # 主从复制集群里,这个在replicaiotn节里

#7.内存
# maxmemory <bytes>
# maxmemory-policy noeviction # 内存满了的淘汰策略 6种

#8.APPEND ONLY MODE配置 .aof
appendonly no  # 默认不开启,大多数情况下rdb就可以了
appendfilename "appendonly.aof"
appendfsync everysec # 每秒都同步aof 3种
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值