目录
一、特点:
键值对存储
读写效率极快-----扮演缓存中间件
二、 作用:
提高用户对一些热点数据的查询效果,避免数据库的IO操作
三、基础指令
1.信息的
添加:set Key value
查询(获取): get key
2.清屏: clear
3.退出客户端命令行模式: quit exit <ESC>按钮
4.帮助 : help 某个指令
四、五大数据类型
redis | Java |
1.string | String |
2.hash 双列 | HashMap |
3.list 链表【有序不唯一】 | LinkedList |
4.set 【无序且唯一】 | HashSet |
5.sorted_set 【有序且唯一】 | TreeSet |
注意:
redis 自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储
数据类型指的是存储的数据的类型,
也就是 value 部分的类型,key 部分永远都是字符串key的语法:
推荐:
在一个项目中,key最好使用统一的命名模式
key区分大小写
key不要太长,尽量不要超过1024字节。不仅消耗内存,也会降低查找的效率
key不要太短,太短可读性会降低
1.string类型
添加一个:set key value
添加多个: mset key1 val1 key2 val2
获取个数:strlen key
追加到后面 append key val
替换: setrange key 位置
先get然后再set: getset key val
2.hash
新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息
需要的存储结构:一个存储空间保存多个键值对数据
hash类型:底层使用哈希表结构实现数据存储
添加/修改数据 :
hset key field val
hsetnx key field val 【有就不加】
获取:
hget key field
hmget key field1 field2 【多个】
hgetall key
删除:
hdel key field1 [field2]
hash类型数据操作的注意事项
1.hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数 据未获取到,对应的值为(nil)
2.每个hash可以存储2^32^-1个键值对
3.hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初 衷不是为了存储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用
4.hgetall操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成 为数据访问瓶颈
3.list【双向链表】
数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
list类型:保存多个数据,底层使用双向链表存储结构实现
添加/修改数据:
lpush key value1[value2]……
rpush key value1[value2]……
获取数据:
lrange key start stop
lindex key index
llen key 【全部】
获取并移除数据:
lpopkey
rpopkey
通过下标截取指定的长度:
trim key start end 【这个list已经被改变了,只剩下截取的元素】
更新操作
lset key 下标 新数据 【如果不存在列表我们去更新就会报错】
list类型数据操作注意事项
1.list中保存的数据都是string类型的,数据总容量是有限的
最多2^32^-1个元素(4294967295)
2.list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作
或以栈的形式进行入栈出栈操作
3.获取全部数据操作结束索引设置为-1
4.list可以对数据进行分页操作,通常第一页的信息来自于list,
第2页及更多的信息通过数据库的形式加载
4.set
新的存储需求:存储大量的数据,在查询方面提供更高的效率
需要的存储结构:能 够保存大量的数据,高效的内部存储机制,便于查询
set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的
添加数据:
sadd key member1 [member2]
获取全部数据:
smembers key
删除数据:
srem key member1 [member2]
获取集合数据总量:
scard key
判断集合中是否包含指定数据
sismember key member
eg:
每位用户首次使用今日头条时会设置3项爱好的内容,但是后期为了增加用户的活跃度、兴趣 点,必须让用户对其他信息类别逐渐产生兴趣,增加客户留存度,如何实现?
业务分析
1.系统分析出各个分类的最新或最热点信息条目并组织成set集合
2.随机挑选其中部分信息
3.配合用户关注信息分类中的热点信息组织成展示的全信息集合
解决方案
随机获取集合中指定数量的数据
srandmemberkey[count]
随机获取集合中的某个数据并将该数据移出集合
spopkey[count]
5.sorted_set
新的存储需求:数据排序有利于数据的有效展示,
需要提供一种可以根据自身特征进行排序的方式需要的存储结构:新的存储模型,可以保存可排序的数据
sorted_set类型:在set的存储结构基础上添加可排序字段
添加数据:
zadd key score1 member1 [score2 member2]
获取全部数据:
zrange key start(开始索引) stop(结束索引) [WITHSCORES]
注意:【[WITHSCORES]可以除了数据还显示分值】
反转:
zrevrange key start stop [WITHSCORES]
删除数据:
zrem key member [member...]
获取集合数据总量
zcard key