启动命令:redis-server.exe redis.windows.conf

一、redis基础类型:

1.String
语法 set key value
2.hash
语法 hmset name key value key value
3.list
语法 头部增加lpush name value
尾部增加rpush name value
4.set
语法 sadd name value
5.zset:不可重复,通过score正序排序
语法 zadd name score value

二、持久化

  1. 防止数据丢失,存储在磁盘中,方式:RDB(默认,缩写Redis DataBase)和AOF(缩写Append-only file)<br />存储结构:<br /> 内容是redis通讯协议(RESP )格式的命令文本存储。<br />比较:<br /> 1aof文件比rdb更新频率高,优先使用aof还原数据。<br /> 2aofrdb更安全也更大<br /> 3rdb性能比aof好<br /> 4、如果两个都配了优先加载AOF

三、淘汰策略

(1)volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。
(2)volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰。
(3)volatile-random:从已设置过期时间的数据集中任意选择数据淘汰。
(4)volatile-lfu:从已设置过期时间的数据集挑选使用频率最低的数据淘汰。
(5)allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
(6)allkeys-lfu:从数据集中挑选使用频率最低的数据淘汰。
(7)allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
(8) no-enviction(驱逐):禁止驱逐数据,这也是默认策略。意思是当内存不足以容纳新入数据时,新写入操作就会报错,请求可以继续进行,线上任务也不能持续进行,采用no-enviction策略可以保证数据不被丢失
淘汰机制的实现:
(1)消极方法(passive way),在主键被访问时如果发现它已经失效,那么就删除它。redis在实现GET、MGET、HGET、LRANGE等所有涉及到读取数据的命令时都会调用 expireIfNeeded,它存在的意义就是在读取数据之前先检查一下它有没有失效,如果失效了就删除它
(2)积极方法(active way),周期性地探测,发现失效就删除。消极方法的缺点是,如果key 迟迟不被访问,就会占用很多内存空间,所以才有积极方式。
(3)主动删除:当内存超过maxmemory限定时,触发主动清理策略,该策略由启动参数的配置决定

四、悲观锁、乐观锁

悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。
例如:数据库for update
乐观锁:总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。乐观锁适用于多读的应用类型,这样可以提高吞吐量,其实都是提供的乐观锁。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的
例如:version+1