redis详解

redis详解

一、 五种类型

1.list

 取关:lrem list 1 one(移除指令)
 ltrim list 1 2(截取)
 rpoplpush list otherlist(移除列表最后一个元素到新的列表)
 lrange list 0 -1(查看列表)
 lset list 0 item(更新指定下标的值)
 LINSERT list before "world" "other"(在某值前面插值)

2.set

sadd list "hello"(插入值)
smembers list(查看)
sismember list "hello"(判断某个值在set集合中)
scard list(获取set集合的元素个数)
srem list hello(移除)
srandmember list(随机抽选一个元素)
spop list(随机删除一个元素)
smove list otherlist "hello"(将一个指定元素移到另一个集合)
注:共同关注、共同好友、好友推荐功能实现
 --差集:sdiff list otherlist
 --交集:sinter list otherlist(共同好友)
 --并集:sunion list otherlist

3.Hash

hset myhash name mrzhang(插入值)
hget myhash name(获取值)
hmset myhash name1 mrzhang name2 mryang(插入多值)
hmget myhash name1 name2(获取多值)
hgetall myhash(获取全部数据)
hdel myhash name1(删除指定key)
hlen myhash(获取hash表的字段数量)
hexists myhash name1(判断key是否存在)
hkeys myhash(获取所有key)
hvals myhash(获取所用value)
应用:用户信息之内或经常变动信息的保存,适合对象的存储

4.Zset(有序集合)

zadd salary 500 mrzhang(添加一个值)
zrangebyscore salary -inf +inf(根据薪水排除,从小到大)	
zrangebyscore salary 0 -1(根据薪水排除,从大到小)	
zrangebyscore salary -inf 2500 withscores (显示工资小于2500员工升序)
zrem salary mrzhang(移除)
zcard salary(获取有序集合的个数)
应用:班级成绩表 工资表排序 排行榜应用

5.string

set key v1(设置值)
get key(获取值)
keys *(获取所有值)
exists key(判断某值是否存在)
append key "hello"(追加字符串)
strlen key(获取字符串长度)
incr views(自增1)
decr views(自减1)
incrby views 10(设置指定增量)
deceby views 5(设置指定减量)
getrange key 0 3(获取指定范围)
getrange key 1 xx(替换指定位置的字符串)
setex key 30 "hello"(设置过期时间)
setnx mkey "redis"(存在报错,不存在创建,分布式锁常常用)
mset k1 v1 k2 v2 k3 v3 (设置多值)
mget k1 k2 k3(获取多个值)
msetnx k1 v1 k4 v4(原子操作,一起成功一起失败)
存对象:
mset user:1:name zhangsan user:1:age 2
set user:1:name user:1:age
getser db redis(不存在,返回nil)
getset db mongdb(如果存在,获取原来值,并设置新的值)
应用:计数器、统计多单位数量

二、 三种特殊类型

1.geospatial地理位置

定位、附件的人、打车距离计算
geoadd china:city 146.40 39.90  beijing 
geoadd china:city 121.47 31.23  shanghai
geoadd china:city 106.50 29.53  chongqi
geoadd china:city 120.16 30.24  hangzhou
geopos china:city shanghai(获取次数经度纬度)

两地之间距离
geodist china:city beijing shanghai km
我附件的人
georadius china:city  110 30 1000 km(根据经纬度获取附件1000km内的城市) withcoord(获取城市经纬度值)  withdist(显示到中间距离)
找出指定元素周围的其他元素
georadiusbymember china:city   4000 km
讲二维经纬度转换一维字符串
geohash china:city   beijing chongqi

2.Hyperloglog

基数(不重复的元素);Redis Hyperloglog 基数统计的算法(一个人访问一个网站多次,但是还是算一个人)。
pfadd mykey a b c d e(创建第一组元素)
pfcount mykey(查看元素)
pfadd mykey2 e fg h(创建第二组元素)
pfmerge mykey3 mykey mykey2(合并两组元素)

3.Bitmap

统计用户信息。活跃/不活跃、打卡/不打卡等两个状态。

 ```
 使用bitmap记录周一到周日打卡记录
 setbit sign 0 1
 setbit sign 1 1
 setbit sign 2 0
 setbit sign 3 1
 setbit sign 4 0
 setbit sign 5 1
 setbit sign 6 0
 getbit sign 2(查询某一天是否打卡)
 bitcount sign (统计打卡天数)
 ```

三、 事务

1.Redis 事务没有隔离级别的概念
2.Redis单条命令保存原子性的,但事务不保证原则性;
 
 ```
redis的事务
 1.开启事务(multi )
 2.命令入队(set k1 v1  set k2 v2 set k3 v3)
 3.执行事务(exec)
 4.取消事务(discard)
 ```

四、RDB持久化

rdb保存的文件dump.rdb
redis.conf配置
	dbfilename dump.rdb
触发机制:1.save的规则满足,会自动触发rdb规则;
				  2.执行flushall命令,会自动触发rdb规则;
				  3.退出redis,也会产生rdb文件。
恢复rdb文件:只需将rdb文件放到我们的redis启动目录下
                     (查询位置 config get  dir)

优点:1.适合大规模的数据恢复;
		   2.对数据的完整性要求不高。
缺点:1.需要一定的时间间隔,如果redis宕机,最后一次的数据会丢失。
		   2.fork进程需要一定的内存空间。

五、AOF持久化

以日志形式来记录每次写操作。
redis.conf配置
	appendonly yes
	dbfilename  "appendonly.aof"

aof文件错位修复:redis-check-aof --fix

优点:1.每一次修改都同步,文件的完整性更好;
		  2.每秒同步一次,可能会丢失一秒数据。
缺点:1.相对数据文件来说,aof远大于rdb
		   2.aof运行效率比rdb慢。

六、发布订阅

 ## 1.订阅端
	subsrcibe mrzhang

 ## 2.发送端
 	publish mrzhang "hello,world"

七、哨兵模式

1.配置哨兵配置文件
sentinel.conf
sentinel monitor myredis 127.0.0.1 6937 1
2.启动哨兵
redis-sentinel sentinel.conf

八、redis缓存穿透、雪崩、击穿

1、redis缓存穿透

去redis没有命中数据,访问数据库
解决方案:布隆过滤器(布隆算法)通过一定的错误率来降低内存占用

2、redis缓存雪崩

redis中多条数据某一时刻突然集体失效;或redis数据库挂掉
解决方案:1.设置不同的过期时间,让缓存失效的时间点尽量均匀;
2.redis集群,分布式缓存(防止单台服务器挂掉);

3、redis缓存击穿

redis中某一条数据突然失效;
缓存雪崩和缓存击穿,实质都是缓存穿透一种特殊表现形式。
解决方案:缓存失效通过增加锁(zookeeper分布式锁),给请求数据库的线程加锁,控制数据库的访问量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值