Redis概述与常用命令

  • 性能优越的三大原因:
  1. 基于ANSIC语言编写,接近于汇编语言的机器语言,运行快速
  2. 基于内存读写,快于关系型数据库的磁盘读写
  3. 数据结构只有六种,较为简单,因此规则少,而数据库是范式,完整性、规范性需要考虑的规则多,处理业务会比较复杂
  • 在JavaWeb中的应用
  1. 缓存:内存虽然高效但空间有限,价格也高昂,需要考虑使用Redis存储的条件:比如数据命中率是否高,数据是否读操作更多, 业务数据大小是否不会给缓存带来很大压力
  2. 高速读写:多应用于商品秒杀、抢红包、抢票等。一般缓存不能持久化,或者持久化的数据不规范,因此需要把这些数据存入数据库,所以在请求操作完Redis的读写后,会去判断业务是否结束,结束就触发事件将缓存数据批量一次性写入数据库完成持久化工作
  • 缺点:并不完全安全稳定,基于内存,一旦停电或者机器故障容易丢失数据;其数据完整性、事务能力、安全性、可靠性以及可拓展性远不如关系型数据库
  • 六种数据类型说明
  1. String字符串:可以是保存字符串、整数、浮点数;可以对字符串进行增加字符、求子串;对整数或者浮点数实现计算,如自增
  2. list列表:链表,每一个节点都包含一个字符串;支持从链表两端插入或弹出节点,或者通过偏移对它进行裁剪,还可以读取一个或者多个节点,根据条件删除或者查找
  3. set集合:收集器,但无序不重复,在它里面每一个元素都是字符串;可以新增、读取、删除单个元素,检测一个元素是否在集合中;计算它和其他集合的交并补等;随机从集合中读取元素
  4. hash哈希散列表:类似于Map,无序键值对;可以增删改查单个键值对获取所有键值对
  5. zset有序集合:有序,可以包含字符串、整数、浮点数、分值,元素排序是根据分值大小;可以增删查改元素,根据分值范围或者成员来获取对应元素
  6. hyperLogLog基数:作用是计算重复的值,以确定存储的数量;只提供基数的运算,不提供返回的功能
  • Redis操作命令

下载:wget http://download.redis.io/releases/redis-5.0.5.tar.gz

安装:https://blog.csdn.net/qq_37575994/article/details/85049802

字符串操作

set key value 设置键值对

get key 通过键获取值

del key 通过键删除

strlen key 键指向的字符串的长度

getset key value 修改值并返回旧值

getrange key start end 获取子串

append key value 新值=旧值+这个value

扫描二维码关注公众号,回复: 11240631 查看本文章

以下只能对整数操作

incr key 在原字段+1

incrby key increment 在原字段上加整数

decr key 在原子段上-1

decrby key decrement 在原字段上减去整数

incrbyfloat keyincrement 在原字段上加上浮点数(可以操作浮点数或者整数

哈希

hdel key field1 [field2...] 删除hash结构中个某个字段

hexists key field 判断hash结构中是否存在某个field字段,返回1或0

hgetall key 获取所有hash结构中的键值,返回键和值

hincrby key field increment 指定给hash结构中的某一整数字符串字段加上一个整数

hincrbyfloat key field increment 指定给hash结构中某一数字型字符串字段加上一个浮点数

hkeys key 返回hash中所有的键

hlen key返回hash中键值对的数量

hmget key field1 [field2...]返回指定键的值,如果多个依次返回

hmset key field1 value1 [...] 设置多个键值对

hset key field value 在hash结构中设置单个键值对

hsetnx key field value 但hash结构中不存在对应的键,才设置值

hvals key 获取hash结构中所有的值

链表linked-list,双向链表

(以下操作不安全)

lpush key node1 [node2..]把节点加到链表最左边

rpush key node1 [node2...]把节点加到链表最右边

lindex key index 读取下标为index的节点,返回节点字符串,从0开始算

llen key 链表长度

lpop key 删除左边第一个节点并返回

rpop key 

linsert key before|after pivot node 插入一个节点node,并且可以指定在值为pivot的节点的前或后,list不存在会报错,没有对应的pivot也会插入失败返回-1

lpushx list node 如果存在key为list的链表,则插入节点node,并且从左到右的第一个节点,不存在失败

rpushx list node

lrange list start end 获取list从star下标到end下标的节点值,包括这两个节点值

lrem list count value 如果count=0,删除所有值等于value的节点,如果count!=0,取count绝对值,从左到右删除不大于abs个等于value的节点

lset key index node 设置列表下标为index的节点的值的node

ltrim key start stop 修剪链表,开区间,只保留区间内节点,其余删除

(阻塞命令)

blpop key timeout 移出并获取列表的第一个元素,如果列表没有元素会阻塞到等待超时或者发现元素位置

brpop key timeout 移出并获取列表的最后一个元素

rpoplpush key src dest 按从左到右的顺序,将一个链表的最后一个元素移出并插入到目标链表最左边

brpoplpush key src dest timeout 按从左到右的顺序,将一个链表的最后一个元素移出,并插入到链表最左边,可设置超时时间

集合Set,每一个元素都是String数据结构类型

sadd key member1 [member2...] 增加

scard key 统计集合成员数

sdiff key1 [key2] 找出两个集合的差集

sdiffstore des key1 [key2] 先找差集再保存到des集合

sinter key1 [key2] 交集

sinterstore des key1 [key2]

sismember key member 判断member是否为集合的成员 返回1或0

smembers key 返回集合所有成员

smove src des member 将member从src迁移到des

spop key 随机弹出集合的一个元素

srandmember key [count]  随机返回集合中一个或多个元素,count为限制返回总数,如果count为负数,则先求其绝对值

srem key member1 [member2...] 移除集合中的元素

sunion key1 [key2] 交集

sunionstore des key1 key2 交集结果保存到集合des中

有序集合zset

zadd key score1 value1 [score2...] 向有序集合的key,增加一个或者多个成员

zcard key 获取有序集合的成员数

zcount key min max 根据分数返回对应的成员列表

zincrby key increment member 给有序集合成员值为member的分数增加increment

zinterstore desKey numKeys key1 [key2...]交集保存

zlexcount key min max 求有序集合key成员在min和max的范围

zrange key start stop [withscores]从小到大返回成员,可以连同分数一起返回

zrank key member 按从小到大求有序集合的排行

zrangebylex key min max [limit offset count] 根据值的大小,从小到大排序,min为最小值,max为最大值,limit选项可选,当Redis求出范围集合后,会生产下标0到n,然后根据偏移量offset和限定返回数count,返回对应的成员

zrangebyscore key min max [withscores] [limit offset count] 根据分数大小,从小到大求值范围

zremrangebyscore key start stop 根据分数区间进行删除

zremrangebyrand key start stop 根据分数排行从小到大的排序删除,从0开始计算

zremrangebylex key min max 按照值的分布进行删除

zrevrange key start stop [withscores] 从大到小的按分数排序

zrevrangebyscore key max  min [withscores] 从大到小的按分数排序

zrevrank key member 按从大到小的顺序,求元素的排行

zscore key member 返回成员的分数值

zunionstore desKey numKeys key1 [key2...] 求多个有序集合的并集,其中numKeys是有序集合的个数

基数HyperLogLog

pfadd key element 添加指定元素到HyperLogLog,如果已经存储元素,返回0,添加失败

pfcount key 返回HyperLogLog的基数值

pfmerge desKey key1 [key2...] 合并多个HyperLogLog,并将其保存在desKey中

计算存储空间单元数

事务命令

multi 开启事务命令,之后的命令就进入队列,而不会马上被执行

watch key1 [key2...] 监听某些键,当被监听的键在事务执行前被修改,则事务会被回滚,使用乐观锁

unwatch key1 [key2...] 取消监听某些键

exec 执行事务,如果被监听的键没有被修改,则采用执行命令,否则就回滚命令(在执行事务队列存储的命令前,Redis会检测被监听的键值对有没有发生变化,如果没有则执行命令,否则就回滚事务)

discard 回滚事务, 回滚进入队列的事务命令,之后就不能再用exec命令提交

超时命令 当内存运行空间满之后,Redis会安装回收机制去自动回收一些键值对,但是当垃圾回收的时候,又有可能执行回收而引发系统停顿,因此选择适当的回收机制和时间将有利于系统性能的提高 大部分情况下会需要回收超时键值对

persist key 持久化key,取消超时时间,秒

ttl key 查看key的超时时间,秒

expire key seconds 设置超时时间戳,秒

expireat key timestamp 设置超时时间点,uninx

pptl key milliseconds 查看key的超时时间戳,毫秒

pexpire key 设置键值超时的时间,毫秒

pexpireat key stamptimes设置超时时间点,毫秒的uninx

猜你喜欢

转载自blog.csdn.net/qq_37575994/article/details/100538048