1.什么是redies?
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value(nosql)数据库。它基于内存存储,速度快。
2.redis的五种常见的数据类型
String:类似于map<string,string>类型,key,vaule都是string类型。
常见的操作指令:
setnx key value:如果key存在就不设置值,返回0,如果不存在key就设置值(为原子性操作)
获取原来的值并设置新值:getset key newValue
expire key :设置过期时间;
设置值:set key vaule;
获取值:get key;
批量插入值:mset key1 vaule1 key2 vaule2;
批量获取值:mget key1 key2;
删除值:del key;
vaule自增:incr key;
vaule自减:decr key;
指定增加多少:incrby key 10 (增加10);
指定减少多少:decrby key 10;
Hash:可以看做是hash中key为一个对象的key,vaule为一个对象的vaule,vaule中有很多对象的属性,比如,key值为“学生”,vaule可以为name=张三,age=18。
hash的常见指令:
设置值:hset key field value;
获取值:hget key field ;
获取key的所有属性值:hgetall key;
批量插入值:hmset key filed value [field value...];
批量获取值:hmget key field1 field2……;
删除值:hdel key feild;
获取所有属性的值:hgetall key ;
获取key属性的个数:hlen key;
原key的field不存在则set成功,返回1,否则失败,返回0:hsetnx key filed vaule;
list:类似于链表结构,可以从左右两边分别插入,如果该链被移除,则该条不存在
list类型常见的数据指令:
从左侧插入值:lpush key vaule[vaule....];
lpushx:和lpush相似,但是会判断key是否存在,若key不存在则不进行任何操作;
rpushx:与lpushx相似;
右边插入数据 r是right的缩写:rpush key vaule[vaule....]
查看start---end中的数据,左包右包 -1表示到最后: lrange key start end;
查看链表总长度:llen key;
弹出左边第一个数据:lpop key;
弹出右边第一个数据:rpop key;
阻塞式弹出:如左侧阻塞式弹出某一个key值,就会看有没有key值如果有就先弹出key值,再从左往右弹出属性的值,如果没有就会出现命令阻塞,指导添加新的值或者命令时间过期,如果同时写多个key值时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。
左侧阻塞式弹出:blpop key[key...] timeout;(timeout为过期时间)
右测阻塞式弹出:brpop key[key...] timeout;
弹出list1右边的放入list2左边的:rpoplpush list1 list2;(医院排队);
阻塞版本;brpoplpush:阻塞版本;
lrem key count value:
count>0从左边删除count个value
count<0从右边删除count个value
count=0删除所有的value
set:是string类型的无序集合,集合成员唯一不允许出现重复数据
set集合中添加元素:sadd key element [element...];
查看所有元素:smembers key;
查看元素是否属于该集合:sismember key element;
删除集合中的元素:srem 检查指定元素是否存在于集合中,那么移除这个元素
查看元素中集合的数量:scard key;
随机获取集合中某一元素:srandmember key;
zset:zset在set集合的基础上给每一个元素一个分数描述,从而使元素变得有序可循,默认按分数升序排序。
添加元素 每个元素都会携带一个分数:zadd key score member1 score member2…
Redis内存满了怎么办?
- 一般Redis的内存都是可以通过配置文件来配置最大内存的大小,条件允许的话可以通过改变Redis的内存大小来解决。
//设置Redis最大占用内存大小为100M
127.0.0.1:6379> config set maxmemory 100mb
//获取设置的Redis能使用的最大内存大小
127.0.0.1:6379> config get maxmemory
- Redis的内存淘汰
既然可以设置Redis最大占用内存大小,那么配置的内存就有用完的时候。那在内存用完的时候,还继续往Redis里面添加数据不就没内存可用了吗?
noeviction(默认策略):对于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外)
allkeys-lru:从所有key中使用LRU算法进行淘汰
volatile-lru:从设置了过期时间的key中使用LRU算法进行淘汰
allkeys-random:从所有key中随机淘汰数据
volatile-random:从设置了过期时间的key中随机淘汰
volatile-ttl:在设置了过期时间的key中,根据key的过期时间进行淘汰,越早过期的越优先被淘汰