Redis数据库学习
Redis概述
Redis是一个开源的,先进的key-value存储。
它通常被称为数据结构服务器,因为键可以包含字符串,哈希,链表,集合和有序集合
Redis简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。(主--从)
Redis优势
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作
原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis与其他key-value存储有什么不同?
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。
Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,
因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,
在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。
同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
Redis安装
Redis安装分为Linux下安装和win下安装,网络教程较多,此处非重点省略!
Redis数据类型
Redis支持五种数据类型:
string(字符串)
list(列表)
set(集合)(无序集合)
zset(有序集合)
hash(哈希)
String(字符串)
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
String操作:
1.set key value //设置一个键和值,不存在创建,存在则覆盖,返回ok
2.get key //获取一个键的值,返回结果
3.setnx key value //设置一个不存在的键和值
4.setex key seconds value //设置一个具有有效期的键值
5.ttl key //查看键的有效时间
6.setrange key 位置 value //替换字符串
EX: setrange name 4 strs //将name键对应值得第四个位置起替换为.strs
7.mset key1 value1 key2 value2 key3 value3 //批量设置键值
8.msetnx //批量设置不存在的键值对
9.getset //获取原有值替换为其他值
EX: getset key new_value
10.getrange //获取指定范围的值
EX: getrange key 0 4
11.mget //批量获取值
12.incr //加加操作
13.incrby key 2 //设置某个键值加上某个数(正负均可)
14.decr //减减操作
15.decrby key 2 //设置某个键值减去某个数
16.append key app_value //给指定键追加值
17.strlen key //求key的长度
list(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。
你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
列表操作
1. lpush list1 ‘hello’ // 在list1头部插入一个字串
2.rpush list1 ‘world’ //在list1尾部插入一个字串
3.lrange list1 0 -1 //获取list1中的所有内容
4.linsert list1 【before/after】 old_value new_value
//在old值之前或之后插入一个新值
5.lset list1 0 ‘HELLO’ //修改指定位置的值
6.lrem list1 2 ‘hello’ //删除前俩个hello值
7.lrem list1 -2 ‘hello’ // 删除后俩个hello值
8.lrem list1 0 ‘hello’ //删除所有hello值
9.ltrim list1 1 3 //删除指定范围外的值
10.lpop list1 //从list1的头部删除元素并返回
11.rpop list1 // 从list1的尾部删除元素并返回
12.lindex list1 1 //返回list1中索引位置上的元素
13.llen list1 //返回list1上的长度
无序集合(set)
Redis的Set是string类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
sadd 命令
添加一个string元素到,key对应的set集合中,
成功返回1,如果元素已经在集合中返回0,key对应的set不存在返回错误。
sadd key member
无序集合操作
1.sadd key value
sadd myset ‘hello’ //向集合没有set中添加一条数据
2.smembers myset //获取myset中的所有元素
3.srem myset ‘one’ //删除myset中的元素one
4.spop myset //随机删除集合中的一个元素并返回
5.srandmember myset //随机回去myset中的值但不删除
6.smove myset1 myset2 lala //将myset1中的lala移动到myset2中
7.scard myset1 //返回myset1中值得个数
8.sismember myset lala //判断lala是否在myset中
9.sdiff myset1 myset2 //返回俩个集合中的差集
10.sdiffstore newset myset1 myset2 //将俩个集合的差集保存到newset中
11.sinter myset1 myset2 //返回俩集合的交集
12.sinterstore newset myset1 myset2
13.sunion myset1 myset2 //返回俩集合的并集
14.sunionstore newset myset1 myset2
有序集合(zset)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
zadd 命令
添加元素到集合,元素在集合中存在则更新对应score
zadd key score member
有序集合操作
1.zadd zset 1 one //向zset中添加one,排序为1,1 为权重score
2.zrem zset one //删除zset中的元素one
3.zincrby zset 2 one //若存在one,score则加2,不存在则添加为2
4.zrank zset one //返回one在zset中的排名(从小到大)
5.zrevrank zset one //返回one在zset中的排名(从大到小)
6.zrangebyscore zset 2 3 withscores //返回集合中score在给定区间的元素(闭区间)
7.zcount zset 2 3 //返回指定区间值得个数
8.zcard zset //返回集合中元素的个数
9.zremrangebyrank zset 3 3 //删除集合中排名在指定区间的元素
10.zremrangebyscore zset 1 2 //将集合中从小到大排序结果的score在1~2之间的元素删除
hash(哈希)
Redis hash 是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
hash操作
1.hset hashname key value //设置一个哈希表的键值
2.hsetnx hashname key value //设置一个哈希表中不存在的键和值
3.hmset hashname key1 value1 key2 value2…… //批量设置
4.hmget hashnane key1 key2…… //批量获取
5.hexists hashname key //检测key是否存在
6.hlen hashname //获取哈希表中键的数量
7.hdel hashname key //删除哈希表中的key
8.hkeys hashname //返回hash表中所有的键
9.hvals hashname //返回hash表中的所有值
10.hgetall hashname //返回所有的键和值
Redis高级应用
1.安全性 requirepass password
2.持续性 appendonly yes
修改配置文件 vim /etc/redis/redis.conf