一、String 类型
命令
基本操作
- set (key) (value):设置键值对
- setnx (key) (value):防止覆盖,设置键值对,(可以解决并发问题)
- get(key):获取key对应的value
- getset (key) (value) :先get再set,返回旧值,如果没有旧值返回nil
- append (key) (value):向指定的key的value后追加字符串
- del (key) :删除key
- strlen (key):获取key对应值的字符串长度
数字value的加减
- incr (key) :value + 1 (可用于数据信息自增列)
- decr (key) :value - 1
- incrby (key) (number):value + number
- decrby (key) (number):value - number
设置键值过期时间
- setex (key) (seconds) expire:设置键过期时间
- ttl (key) :查看key剩余存活时间
使用场景
实战场景
- 缓存: 经典使用场景,把常用信息,字符串,图片或者视频等信息放到redis中,redis作为缓存层,mysql做持久化层,降低mysql的读写压力
- 计数器:redis是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源。
- session:常见方案spring session + redis实现session共享,
二、List列表
Redis中的List其实就是双端链表
在实际开发中相对比较少用,模拟队列、栈结构的业务需求
命令
基本操作
- lpush key value1 value2 value3 ... :从左边依次添加键为key
- rpush key value1 value2 value3 ...:从右边边依次添加键为key,
- lpop key:: 取出左边第一个元素,取出后元素从队列删除
- rpop key::取出右边第一个元素,取出后元素从队列删除
- lrange key start end: 列出键对应的元素,从start索引开始,到end索引结束
- lindex key index: 列出指定键为key的值中指定索引的元素。index为指定的索引号。不删除元素
- strlen (key):获取key对应值的字符串长度
使用场景
- 微博TimeLine: 有人发布微博,用lpush加入时间轴,展示新的列表信息。
- 消息队列
三、Set集合
Redis 的 Set 是 String 类型的无序集合。
- 集合成员是**不可重复的**
- Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)
命令
基本操作
- sadd key member1 member2 ..... :向key中添加member1,member2,...元素,多个元素不允许重复
- smembers key::列出key中的所有元素
- sismember key member :判断key中是否有member元素
- sinter key1 key2 :列出key1和key2中共同存在的元素 (交集)
- sunion key1 key2 :列出key1和key2中所有不重复的元素(并集)
- sdiff key1 key2:列出key1中有,key2中没有的元素(差集)
使用场景
- 标签(tag),给用户添加标签,或者用户给消息添加标签,这样有同一标签或者类似标签的可以给推荐关注的事或者关注的人。
- 点赞,或点踩,收藏等,可以放到set中实现
四、Hash散列
Redis hash 是一个 string 类型的 field(字段) 和 value(属性) 的映射表,hash 特别适合用于存储对象。
一个hash可以存多个key-value,类似一个对象的多个字段和属性
命令
基本操作
- hset key feild value::
- 添加一个键为key,值为Map的数据,Map的键为feild,值为value
- hget key feild:
- 获取一个redis键为key的map中的feild键对应的值
- hgetall key:
- 获取redis键为key的整个map数据
- hdel key feild:
- 删除redis键为key的map中的feild独赢的数据
使用场景:
- 缓存: 能直观,相比string更节省空间,的维护缓存信息,如用户信息,视频信息等。
五、Zset有序集合
Redis 有序集合和集合一样基本一致
区别:
**每个元素都会关联一个 double 类型的权重参数(score),**使得集合中的元素能够按score进行有序排列。
特点:
有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
命令
基本操作
- zadd key score member
- 向key中添加一个元素,元素绑定一个score分数值。列出数据时,会根据这个绑定分数值进行排序
- zrange key start end withscores
- 索引从start开始到end结束的元素,并且展示元素对应的分数值列出
使用场景:
排行榜:有序集合经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。
成绩排行:比如一个存储全班同学成绩的sorted set,其集合value可以是同学的学号,而score就可以是其考试得分, 形成了按成绩排序。
权重分配:可以用sorted set来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。