Redis内存数据库

一、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机制。即Redisappend模式不断的将修改数据写入到老的磁盘文件中,同时Redis还会创建一个新的文件用于记录此期间有哪些修改命令被执行。因此在进行rewrite切换时可以更好的保证数据安全性。

4). AOF包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。事实上,我们也可以通过该文件完成数据的重建。


             



猜你喜欢

转载自blog.csdn.net/u013178480/article/details/79816770