1 redis-List
这里的LIst是LinkedList而不是ArrayLIst
ArrayList:底层是数组。优点:根据索引的查询极快(与数据量无关)。缺点:数据的增删操作效率极低(数据量越大,效率越低)。
LinkedList:底层是链表。优点:数据的增删极快(与数据量无关),缺点:根据索引的查询极慢(数据量越大,效率越低)。
为什么是LinkedList?
因为在redis中,最多的操作就是对元素的增删。
使用环境:(1)大数据集合的增删
(2)任务队列
取值:lrange key start stop (lrange key 0 -1 取出所有元素) 从start取到stop,包括首尾,-1则是最后一位。
赋值:lpush key values 从左边开始添加
rpush key values 从右边开始添加
删值:lpop key 删除最左边的元素,并返回该元素
rpop key 删除最右边的元素,并返回该元素
当list内没有元素了,则该list也被删除了,返回(nil)
扩展:获取list的长度 llen key
根据索引删除指定的元素(效率极低,因为要先赋索引) lrem key count value 从左开始删除count个value,如果count为0 ,则删除所有value。
根据索引替换元素(效率极低) lset key index value 从左开始角标为index的值替换成vlaue
从指定位置插入元素: linsert key before value1 value2 在value1的前面插入value2
linsert key after value1 value2 在value1的后面插入value2
两队排列:rpoplpush list1 list2 (任务队列)将list1最后一个元素弹出,然后添加到list2的头部
循环队列:rpoplpush list1 list1 将list1的最后一个弹出后添加到最前
2 redis-set
set集合特点:无序,不重复。
在redis中,set常用在大数据集合的交集,并集,差集运算。
赋值:sadd key values 返回该键值对value的长度,不可重复,重复元素只算1
删值:srem key values
取值:smembers key 返回该key对应的values
sismember key value 返回1或0,1则表示存在该元素,0则不存在
集合运算:
差集:sdiff key1 key2 返回key1对应的set集合有而key2对应的set集合没有的元素
交集:sinter key1 key2 返回key1对应的set集合和key2对应的set集合中都有的元素
并集:sunion key1 key2 返回key1对应的set集合和key2对应的set集合中的所有元素,当然重复元素只算一个
扩展:scard key 统计key对应的set集合元素的数量
srandmember key 随机返回一个属于key对应的set集合元素
sdiffstore set3 set1 set2 将set1和set2的差集保存在set3中
sinterstore set3 set1 set2 将set1和set2的交集保存在set3中
sunionstore set3 set1 set2 将set1和set2的并集保存在set3中
3 redis-有序set
手动赋值,1000 小红,500 小明,100 小王 常用于排行榜
赋值: zadd key scores members
删值: zrem key members
取值: zscore key members
zcard key
zrange key start stop [withscores]
zrevrange key start stop [withscores]
扩展:zremrangebyrank key start stop 按排名从start删到stop
zremrangebyscore key min max 按分数范围删除
zrangebyrank key min max 查看排名范围内的元素
zrangebyscore key min max 查看分数范围内的元素
zincrby key increment member 增加指定元素的分数
zcount key min max 获取在分数范围内的元素个数
zrank key member 返回该member在排行榜的排名(从小到大)
zrevrank key member 返回该member在排行榜的排名(从大到小)
4 redis通用命令
(1)keys pattern :pattern可以是*,也可以是?,*表示0个或多个任意字符,?表示一个任意字符,可以用于匹配相关的key,例如:
keys * :查询redis中所有key
keys ????:查询redis中长度为4的key
keys *name*:查询redis中带有name的key
(2)del keys :删除键值对
(3)exists key: 判断是否存在该key
(4)type key: 返回key对应的value的数据类型
(5)expire key number:设置key的有效或生存时间,单位:秒
(6)ttl key:查看key剩下的超时时间,-1表示未设置有效时间,-2表示已过期,过期的键值对将被redis删除
5 redis扩展知识
(1)消息订阅与发布
subscribe channel:订阅频道,接收其发布的消息
publish channel content:在某频道发布消息
psubscribe channel*:批量订阅频道
(2)redis多数据库
redis中有16个数据库,0-15,默认使用的是0号数据库
切换数据库:select [0-15]
将一个数据库的键值对移动到另一个数据库:move key [0-15]
清空当前数据库数据:flushdb
清空所有数据库数据:flushall
(3)redis事务批量化操作
MySQL事务---------保证数据的完整性和安全
redis事务---------为了进行语句的批量操作
开启事务:multi
提交事务:exec
回滚事务:discard
(4)redis服务器了解命令
quit:退出客户端
dbsize:查看当前数据库中有多少个键值对
info:查看redis相关信息
(5)redis的两种持久化策略
第一种是RDB机制,RDB是redis的默认持久化机制,相当于照快照,可以把很大的数据压缩成很小的.rdb文件保存,优点是保存数据的速度极快,还原数据的速度极快;可用于灾难备份;缺点是因为只要符合RDB机制要求就会照快照,即随时随地在照快照,会占用一部分系统资源,所以内存要比较充裕才能保证系统不崩溃,只适用内存充裕的机器。
怎样才符合RDB机制,照快照?
一.服务器正常关闭时,即./bin/redis-cli shutdown
二.key满足一定条件时,会照一次快照
在redis.conf中有配置了save 900 1,save 300 10,save 60 10000
意思是在900秒内,如果有大于等于1个的key发生变化,则照一次快照;在300秒内,如果有大于等于10个key发生变化,则照一次快照;在60秒内,如果有10000个
key发生变化,则照一次快照(变化指键值对的增删改)
第二种是AOF机制,默认是关闭的。使用的是日志功能实现持久化。
开启AOF:修改redis.conf配置文件,将appendonly no 改为appendonly yes
修改AOF执行策略:三种同步策略:1.everysec,2.always,3.no,1是每秒写入日志文件一次,2是当key发生变化时,将语句写入日志文件,3是不写;通常选择第二种比较安全;即修改redis.conf中的appendfsync always。优点是持续性地占用极少的系统资源,缺点是日志文件太大,不适用于灾难恢复;适用于内存较小的计算机。