Redis分享

Redis简介
    redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
下载地址 http://download.redis.io/releases/redis-4.0.10.tar.gz

Redis安装(linux版本)

  • 下载压缩包
  • 安装gcc环境 yum install gcc c++  
  • 解压 tar -zxvf  redis-4.0.10.tar.gz
  • make 编译    
  • make install PREFIX=/usr/local/redis   
  • 启动 cd /usr/local/redis/bin   ./redis-server
  • 测试 ./redis-cli     ping

Redis数据类型

  • 字符串 
set name value
get name
getset name 先获取在设置
del name
incr key 指定key的value递增1
decr key
incrby key 指定key的value加几
decrby key
append key 追加
  • Hash类型
hset hashkey key value
hmset hashkey   keye value  key value多个
hget  hashkey key
hmget hashkey key value
hgetall  hashkey  获取全部
hdel  hashkey key key
hincrby hashkey key  增量
hexists hashkey key
hlen  hashkey  获取所有属性数量
hkeys hashkey   获取所有属性名称
hvals hashkey  获取素有的值
  • list类型
rpoplpush key1 key2 
lpush key value value...  从左侧插入
rpush key value value...   从右侧添加
lrange key start end  
lpop key 弹出左侧第一个元素弹出之后就不存在了
rpop  key 弹出右侧第一个元素
llen  key 获取元素个数
lpushx key 关联list头部插入一个值
rpushx key    linsert key 	before value1 value 在某个元素之前插入   
lrem key count 3 删除count个3
count>0 从头到尾 count=0所有 count<0 从尾到头
lset key index value 设置某个角标元素
  • set类型
不能有重复元素 
sadd key  value 1  value2
srem key  value
smembers key  set所有元素
sismember key value  判断元素是否存在1存在 0不存在
差集计算
sadd key1 abc
sadd key2 b
sdiff key1 key2
交集计算
sinter key1 key2
并集运算
sunion key1 key2
scard key set中的数量
srandmember key 随机返回
  • sorted-set类型
有序set
排名 微博话题
zadd key  key value
zadd key 
zscore key key
zcard key
zrem key key
zrange key 0 -1

Redis使用场景

  • 秒杀抢购缓存
  • 任务队列  
  • 网站访问统计
  • 应用排行榜
  • 数据过期处理
  • 分布式集群架构session分离

常见问题

  • 缓存和数据库双写一致性问题
  • 缓存雪崩问题
  • 缓存击穿问题

redis和数据库双写一致性问题

        分析:一致性问题是分布式常见问题,还可以再分为最终一致性和强一致性。数据库和缓存双写,就必然会存在不一致的问题。答这个问题,先明白一个前提。就是如果对数据有强一致性要求,不能放缓存。我们所做的一切,只能保证最终一致性。另外,我们所做的方案其实从根本上来说,只能说降低不一致发生的概率,无法完全避免。因此,有强一致性要求的数据,不能放缓存。
        首先,采取正确更新策略,先更新数据库,再删缓存。其次,因为可能存在删除缓存失败的问题,提供一个补偿措施即可,例如利用消息队列。

缓存穿透,即黑客故意去请求缓存中不存在的数据,导致所有的请求都怼到数据库上,从而数据库连接异常。

解决方案:

(一)利用互斥锁,缓存失效的时候,先去获得锁,得到锁了,再去请求数据库。没得到锁,则休眠一段时间重试

(二)采用异步更新策略,无论key是否取到值,都直接返回。value值中维护一个缓存失效时间,缓存如果过期,
异步起一个线程去读数据库,更新缓存。需要做缓存预热(项目启动前,先加载缓存)操作。

(三)提供一个能迅速判断请求是否有效的拦截机制,比如,利用布隆过滤器,内部维护一系列合法有效的key。
迅速判断出,请求所携带的Key是否合法有效。如果不合法,则直接返回。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值