Redis简介
Redis是一个高性能内存key-value数据库,和其他key-value缓存产品相比有其他特点:
- Redis支持数据持久化,可以将内存中的数据保存在磁盘中,重启时可以重新加载使用;
- Redis不仅支持简单的key-value类型的数据,同时还提供list,set,hash,zset等数据结构;
- Redis支持数据备份,即master-slave模式。
Redis性能极高,读110000次/s,写81000次/s。
Redis的所有操作都是原子性的,单个操作是原子性的,多个操作可以支持事务,通过multi和exec指令包起来。
Redis还支持pulish/subscribe,通知,key过期等特性。
安装
windows下使用和安装
- 解压后将文件夹名字改为redis;
- 进入redis目录打开cmd窗口,运行以下命令打开redis服务器(win10下的powershell似乎不行,原因不明)
redis-server.exe redis.windows.cof
- 另启一个cmd窗口,启动redis客户端连接服务器
redis-cli.exe -h 127.0.0.1 -p 6379
linux下使用和安装
暂未用,后续用到再记录
Redis的五大数据结构
redis存储的是key-value键值对,所谓的五大数据结构指的是value的类型,key一般都是string类型,其中key定义的时候不要过长或过短,最好有统一的命名规范。
String
string类型是以二进制存储的,这意味着redis的string可以包含任意数据,比如图片或序列化对象,一个string类型的值最大能存储512MB。
常用命令
set key value
get key
getrange key start end
返回key中字符串值从start到end的字符getset key value
将指定key的值设为value,但返回旧值mget key1 [key2..]
获取多个给定key的值setex key seconds value
设置key和value,并将key的过期时间设为secondssetnx key value
只有key不存在时才设值mset key value [key value..]
同时设置多个k-v对incr key
将key中存储的值加1,若value不能转化成整数,则会报错incrby key increment
将key对应的value加incrementdecr key
decrby key decrement
append key value
在key对应的值后拼接字符串key
hash
hash特别适合存储对象,每个hash可以存储2^32-1个键值对(42.9亿)
常用命令
hdel key field1 [field2..]
删除key中某个字段hexists key field
判断字段是否存在你hget key field
hgetall key
获得key所有字段和值hincreby key field increment
hkeys key
获取key中所有字段hlen key
获取key中字段数量hmget key field1 [field2..]
hmset key field1 value1 [field2 value2..]
hset key field value
hsetnx key field value
hvals key
获取key所有值
list
字符串列表,可以左右添加,用作消息队列等,列表最多存储2^32-1个元素。
常用命令
lpop key
弹出左边第一个元素lpush key value1 [value2..]
在左边依次插入多个值llen key
获取列表长度lrange key start end
获取列表指定范围内的元素,-1表示倒数第一个元素,依次类推lrem key count value
从左往右删除count个value值lset key index value
通过索引设置值rpop key
弹出右边第一个元素rpoplpush source dest
移除source右边第一个元素,加入到dest最左边rpush key value1 [value2..]
set
是字符串的无序集合,元素不可重复,是通过哈希表实现的,所以添加删除查找的时间复杂度都是O(1),最大成员数2^32-1,支持交并差。
常用命令
sadd key mem1 [mem2..]
scard key
获取集合的成员数sdiff key1 [key2]
返回key1和key2的差集sdiffstore dest key1 [key2]
返回key1和key2的差集并存入dest中sinter key1 [key2]
交集sinterstore dest key1 [key2]
sunion key1 [key2]
并集sunionstore dest key1 [key2]
sismember key member
判断member是否在集合key中smembers key
返回key的成员smove source dest member
将member从source移到dest中spop key
移除并返回集合中的一个随机数srandmember key [count]
随机返回集合中count个元素srem key member1 [member2]
移除集合中元素
zset
除了有序外,和set相同,每个元素会关联一个double的分数,通过该分数排序,zset成员是唯一的,但是成员的分数可以相同。
常用命令
zadd key score1 member1 [score2 member2..]
zcard key
zcount key min max
计算在有序集合中指定区间分数内的成员数zincrby key increment member
在有序集合中对指定成员的分数加上增量zinterstore dest numkeys key [key..]
求numkeys个有序集合的交集并存到dest中zrange key start end [withscores]
返回有序集合指定范围内的值(可带分数)zrevrange key start end [withscores]
zremrangebyrank key start end
按索引删zremrangebyscore key start end
按分数删zrank key member
返回有序集合中指定成员的索引zrem key member [member..]
zremrangebylex key min max
移除有序集合中给定的字典区间的所有成员zrangebyscore key min max [withscores] [limit]
通过分数返回有序集合指定区间内的成员
持久化
redis的高性能是因为它所有数据都存在内存当中,要保证重启后数据不丢失,就需要数据持久化。有两种方式——RDB和AOF,可以只用一种,也可以两种结合使用。
RDB方式
在指定的时间间隔内将数据集快照写入到磁盘。
优势
- 整个redis数据只包含一个文件,备份方便
- 对于灾难恢复,比较容易
- 性能最大化,分叉出一些子进程,由子进程进行持久化
劣势
- 不能保证有效性,因为是定时写的
- fork子进程太多
配置
默认持久化方法,在redis.conf中,保存文件是dump.rdb
AOF方式
将以日志的形式记录redis的每一次操作,当redis重启时会从该日志重现redis的每一次操作,重构redis。
优势
- 能带来更高数据安全性,有三种同步:每秒同步、每个修改同步、不同步
- 对日志文件写入采用append模式,所以即便写入的时候出错,也不会影响日志,可以通过redis -check -aof来解决数据一致性
- 如果日志过大,可以自动重写,在重写切换的时候可以更好地保证安全性
- 日志文件格式清晰
劣势
- 对于相同数据集而言,aof文件比rdb文件大
- aof执行效率上会低于rdb
配置
不是默认方式,也在redis.conf中,查找到appendonly no这一行。