一、Redis基础知识
1. Redis是单进程
2. Redis默认安装16个库(下标0-15),可以通过select切换库,如:select 7,选择第8个库。初始默认使用0号库。
3. Dbsize查看当前数据库的key的数量
4. 输入redis命令时,按Tab键可以自动补全
5. Flushdb清除当前库 flushall清除所有库
6. 统一密码管理,16个库都是同样密码,要么都OK,要么一个也连接不上
7. Redis索引都是从0开始
8. 默认端口是6397
二、Redis五大数据类型
1. 字符串String
2. 列表List
3. 哈希Hash:特别适合用于存储对象,类似于Java里面的Map<String,Object>
4. 集合Set
5. 有序集合Zset(sorted set):每个元素都会关联一个double类型的分数
三、Redis常用命令
1.key:
keys * :所有的key
exits key的名字,判断某个key是否存在
move key db 将某个可以移到其它库,当前库就没有了
expire key 秒钟:为给定的key设置过期时间
ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期(过期即被移出内存)
type key 查看你的key是什么类型
2.string(单值单value):
set/get/del/append/strlen
incr/decr/incrby/decby,一定要是数字才能进行加减,
例子:incr key, incrby key 数字
getrange/setrange,类似于between…and…
例子:getrange k1 0 -1,得到的是全部
getrange k1 0 3,得到索引为0到3的4个
setrange k1 0 xxx,将k1从索引为0设置为xxx
setex(set with expire)/setnx(setif mot exist):例子:setex k1 10
setnxk1 10
mset/mget/msetnx: 同时进行多个操作,例子:mset k1 v1 k2 v2 k3 v3
mgetk1 k2 k3
3.list(单值多value)
lpush/rpush/lrange: 例子:lpush list01 1 2 3 4 5
lpop/rpop:从左(l)右(r)栈顶退出一个
lindex,按照索引下标获得元素
llen
lrem key 删N个value
ltrim key 开始index 结束index,截取指定范围的值后再赋值给key
rpoplpush 源列表目的列表
lset key index value
linsert key before/after 值1 值2
4. set
sadd(添加)/smembers(所有的member)/sismember(判断是否存在)
scard,获取集合里边的元素个数
srem key value 删除集合中某个元素
srandmember key 一个整数n,从set中随机获取n个数
spop key 随机出栈
smove key1 key2 在key1里的某个值 作用是将key1里的某个值赋给key2
数学集合类:差集:sdiff sdiff set01 set02,在set01里但是不在set02里
交集:sinter
并集:sunion
1. hash
hset/hget/hmset/hmget/hgetall/hdel
hset user id1
hget user id
hmsetcustomer id 1 name david age 12
hmget customer id name age
hgetallcustomer
hdel user id
hlen : hlen user
hexists key 在key里面的某个key,判断是否存在。不存在(0),存在(1)
举例:hexistscustomer id,返回(integer) 1
5. hash
hset/hget/hmset/hmget/hgetall/hdel
hset user id1
hget user id
hmsetcustomer id 1 name david age 12
hmget customer id name age
hgetallcustomer
hdel user id
hlen : hlen user
hexists key 在key里面的某个key,判断是否存在。不存在(0),存在(1)
举例:hexistscustomer id,返回(integer) 1
hkeys/hvals: hkeyscustomer, 得到customer的所有keys
hvals customer, 得到customer的所有values
hincrby/hincrbyfloat:
hsetnx:
6. zset(sortedset):在set基础上,加了一个socre值
zadd/zrange:
例子:zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5
zrangezset01 0 -1,得到所有的keys
zrangezset 0 -1 with scores,得到:
四、Redis持久化(RDB和AOF)
(1)RDB
在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是snapshot快照,它恢复时是将快照文件直接读到内存里。
Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能。
如果需要大规模数据的恢复,且对数据恢复的完整性不是非常敏感,那rdb比aof更加的高效。Rdb的缺点是最后一次持久化后的数据可能丢失。
(2) AOF
1). 该机制可以带来更高的数据安全性,即数据持久性。Redis中提供了3中同步策略,即每秒同步、每修改同步和不同步。事实上,每秒同步也是异步完成的,其效率也是非常高的,所差的是一旦系统出现宕机现象,那么这一秒钟之内修改的数据将会丢失。而每修改同步,我们可以将其视为同步持久化,即每次发生的数据变化都会被立即记录到磁盘中。可以预见,这种方式在效率上是最低的。至于无同步,无需多言,我想大家都能正确的理解它。
2). 由于该机制对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。然而如果我们本次操作只是写入了一半数据就出现了系统崩溃问题,不用担心,在Redis下一次启动之前,我们可以通过redis-check-aof工具来帮助我们解决数据一致性的问题。
3). 如果日志过大,Redis可以自动启用rewrite机制。即Redis以append模式不断的将修改数据写入到老的磁盘文件中,同时Redis还会创建一个新的文件用于记录此期间有哪些修改命令被执行。因此在进行rewrite切换时可以更好的保证数据安全性。
4). AOF包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。事实上,我们也可以通过该文件完成数据的重建。