目录
1. 使用redis有哪些好处?
(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
(2) 支持丰富数据类型,支持string,list,set,sorted set,hash
(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
redis 是一个基于内存的高性能key-value数据库。
五种数据类型:
- 字符串 string
- 字符串列表 list
- 有序字符串集合 sorted set
- 哈希 hash
- 字符串集合 set
key定于:
- 不要太长不要超过1024字节
- 不要过短降低了可读性
- 统一命名规范
存储String
是以二进制方式安全的,存入和获取都是相同的方式
value最多可以容纳的数据长度是512M。
存储string常用命令
赋值 :set key value
删除 : del key
取值 : get key, getset key value 先获取后在去设置
数值增减 :
incr:是将interger类型递增加一,如果没有就设置一个初始值0.不是integer会报错。
decr:是将integer类型递减1,如果是0的场合就会生成-1.如果没有key就会设置成0然后递减1.不是integer类型,就 会报错。
incrby key N: 可以把数值增加N
decrby key N: 可以把数值减少N
扩展命令 : append key value 用于字符串的连接。没有key就会创建。
nil 是指的空数据
存储hash
可以看作一个map的容器,string key,String value;适合用于存储用户信息。
每个hash可以存储4294967295个键值对。
存储hash常用命令
赋值 :
(1)hset key <key,value>单个键值对存储
hset key key value
(2)hmset key <key,value> <key,value> 多个键值对存储
hmset key key value key value
删除 :
hdel key <key,key> 返回删除key的个数。如果没有删除就返回0
del key 删除整个集合。
取值 :
hget key <key> 取得单个数据
hmget key <key,key> 取得多个数据
hgetall key 取得全部数据
增加数字:
hincrby key <key,value>
hincrby myhash age 5 相当于把age的数字加了5
自学命令 :
判断某个集合中key是否存在。
hexists key <key> 如果存在就会返回 1,不存在就返回0
查看集合里面有多少属性.
hlen key
获得所有key。
hkeys key
获取所有值。
hvals key
存储list
是按照插入顺序排序的链表和普通链表一样。可以从头部和尾部添加,如果键不存在就会创建一个新的列表。
arraylist使用数字的方式
linkedlist使用双向链接方式
双向链表中增加数据
双向链表中删除数据
存储list常用命令:
两端添加
lpush mylist a bc
lpush mylist 1 2 3
rpush mylist2 a b c
rpush mylist2 1 2 3
查看链表
lrange mylist 0 5
3 2 1 c b a
lrange mylist2 0 -1 获取全部
a b c 1 2 3
lrange mylist2 0 -2
a b c 1 2
两端弹出
lpop key 就把链表中的第一个元素弹出,并且返回。存在返回正常值,不存在返回null。
rpop key 就把链表中的最后一个元素弹出,并且返回。存在返回正常值,不存在返回null。
获取列表元素的个数
llen key
扩展命令
lpushx key value 会在列表第一位插入value,返回列表个数。插入不存在的key就会返回0.并且不插入。
rpushx key value 会在列表最后一位插入value,返回列表个数。插入不存在的key就会返回0.并且不插入。
lrem key count value 删除count个为value元素。
count>0就从头向尾 遍历删除count个为value元素。
count<0就从尾向头 遍历删除count个为value元素。
count = 0删除链表中等于value值的所有元素。
lset key index value 在index位置插入 value值
linsert key before value value1 在value之前插入value1
linsert key aftervalue value1 在value之后插入value1
rpoplpush key1 key2 将key1最后的之弹出压入到key2最首
主要用于队列,消费者和生产者。正常消费成功就弹出,失败就放到另一个队列中。
储存set
和list类型相同,不相同的是Set集合中不允许出现重复的元素。
存储set常用命令
添加/删除元素
sadd key a b c :添加成功返回3
srem key a :删除成功返回1
集合中的差集运算
返回两个集合中相差的元素
sdiff key1 key2 取出key1中与key2相差的数据
集合中的并集运算
sunion key1 key2 两个集合全部数据取出,相同元素不被显示
获取集合中的元素
smember key: 查看set中元素
sismember key value: 在key中存在value就返回1 不存在返回0
集合中的交际运算
sinter key1 key2 取出两个集合中key一样值
扩展命令
scard key 获取集合中元素的数量。
srandmember key 获取集合中随意一个值。
sdiffstore key1 key2 key3 :把key1和key2相差的数据存放在key3中。
sintstorn key1 key2 key3 :取出两个集合中元素一样值,并存放在key3中
使用场景:
跟踪一些唯一的数据
用于维护数据之间的关联关系
存储sorted-set
- sorted-set中每一个数据都会有一个分数与之关联,redis就是根据分数从小到大进行排序。值是唯一的,但是分数是可以重复的。在sorted-set中添加删除数据都很很快的。
- sorted-set的成员在集合中的位置是有序的。
存储sorted-set常用命令
添加元素
zadd key 70 value1 80 value2 90 value3 :70,80,90是分数。存储成功后返回存储元素的个数。
zadd key 100 value1 :就会把100替换到70的分数。存在返回0
删除元素
zrem key value1 value2:就会删除对于的value1和value2的元素。并返回删除的个数。
扩展命令
获得元素
zscore key value : 就可以把value的分数给获取。
zcard key :获取集合中的元素的个数。
范围查询
zrange key 0 -1 :获取元素值。
zrange key 0 -1 withscores :获取元素值和分数值。从小到大的顺序取出。
zrevrange key 0 -1 withscores:获取元素值和分数值。从大到小的顺序取出。
zremrangebyrank key start end :根据范围删除。
zremrangebyscore key 80 100:把80-100分数之间的元素给删除。
zrangebyscore key 0 100 : 取出0-100元素
zrangebyscore key 0 100 withscores: 取出0-100元素和分数
zrangebyscore key 0 100 withscores limit 0 2 : 取出0-100前两个元素和分数
zincrby key 3 value :把value的分数值给添加3,返回加后的分数。
zcount key 80 90 : 返回80-90分数之间的个数。
keys通用操作
keys *:查看全部的key。
keys my?:查看my开头全部的key。
del key1 key2 key3 :删除key返回删除的数。
exists key: 查看key是否存在。存在返回1,不存在返回0;
rename keyname newkeyname :重命名key。
expire key 1000:设置过期时间。1000秒
ttl key:查看所剩于的过期时间。没有设置返回-1.
type key:获取key是属于哪个类型。
多数据库
一个redis可以包含多个数据库,客户端可以指定我连接那个实例的数据库。一个redis最多可以提供十六个数据库。0-15 ,默认是0.通过select选择数据库。
select 1:选择数据库。
move key 1:把key移到1号数据库中。
事务操作
事务中所有命令都会被串行执行化顺序执行,事务执行期间,redis不会给其余客户端提供服务。从而保证事务中的命令都被原子化执行。如果事务之间命令执行失败,他也会继续执行。
multi:开始
exec :提交
discard:回滚
redis持久化
RDB方式:默认支持,在指定时间内将数据的快照写入到磁盘。
优势:
redis只包含一个文件。 便于统计。
对灾难恢复比较不错。可以把文件压缩后,
性能最大化。可以分线程去去操作持久化。数据很大,选择rdb启动性能会很高。
劣势:
保持高可用性保证数据不被丢失,不能使用rdb方式。他是定时去做写入磁盘。
配置:
redis.conf
save 900 1 :900秒有一次更改就快照一次。
save 300 10:300秒有10次更新就快照一次。
save 60 10000:60秒有1w次更新就快照一次。
dbfilename dump.rdb:文件名
dir ./:文件的路径
AOF方式:以日志方式记录我服务器的每一个操作。在redis启动的时候,会读文件内容,构建数据库。保证数据库中的数据完整。
优势:
有更高的数据安全性。每秒同步(异步),每修改同步(同步持久化效率最低),不同步。
redis-check-aof解决数据一致性。
日志过大,自动启动重写机制。
劣势:
aof的文件大于rdb。
aof效率小于rdb
配置:
redis.conf
appendonly no :代表不被启用。
appendfsysc
always:每修改一下写入一次。
everysec:每秒同步
no:不适用持久化
https://www.imooc.com/video/14922
https://blog.csdn.net/guchuanyun111/article/details/52057407