redis开发与运维
2020-06-03 10:30:19 1 举报
AI智能生成
Redis开发与运维
作者其他创作
大纲/内容
初识redis
redis的8个特性
速度快
基于键值对的数据结构服务器
功能丰富
简单稳定
客户端语言多
持久化
主从复制
支持高可用和分布式
redis3.0是重要的里程碑 redis cluster
版本命名规则
版本号第二位为奇数,则为非稳定版本
版本号第二位为偶数,则为稳定版本
API的理解和使用
全局命令
查看所有键: keys *
键总和:dbsize
检查键是否存在: exists key
删除键: del key [key ...]
键过期: expire key seconds
可以使用ttl命令观察键的剩余过期时间
大于等于0的整数,键剩余的过期时间
-1:键没设置过期时间
-2:键不存在
键的数据结构类型: type key
5种数据结构
字符串(String)
说明:值最大不能超过512M
常用命令
设置值: set key value [ex seconds] [px milliseconds] [nx|xx]
ex seconds:为键设置秒级过期时间
px milliseconds:为键设置毫秒级过期时间
nx:键必须不存在,才可以设置成功,用于添加
xx:与nx相反,键必须存在,才可以设置成功,用于更新
setex key seconds value
setnx key value,setnx可以作为分布式锁的一种实现方案
获取值:get key
具体耗时:n次get时间= n次网络时间+n次命令时间
批量设置值:mset key value [key value ...]
批量获取值:mget key [key]
批量操作命令可以有效的提高开发效率,具体耗时:n次get时间 = 1次网络时间+n次命令时间
计数自增:incr key,incrby key increment,incrybyfloat key increment
值不是整数,返回错误
值是整数,返回自增后的结果
键不存在,按照值为0自增,返回的结果是1
计数自减: decr key,decrby key decrement
自减没有浮点数,同时浮点数自减会报错
不常用命令
追加值: append key value
字符串长度:strlen key
每个中文占用3个字节是需要注意的
设置并返回原值: getset key value
设置指定位置的字符: setrange key offset value,offset从0开始
获取部分字符串: getrange key start end
获取内部编码:object encoding key
内部编码
int:8个字节的长整型
embstr:小于等于39个字节的字符串
raw:大于39个字节的字符串
redis会根据当前值的类型和长度决定使用哪种内部编码实现
使用场景
缓存功能
计数
共享session
限速(例如短信接口访问频率)
哈希(hash)
说明:在redis种,哈希类型是指键值本身又是一个键值对结构
命令
设置值: hset key field value
获取值: hget key field
删除field: hdel key field[field field...]
计算field个数: hlen key
批量设置或获取field-value: hmget key field [field...];hmset key fileld value[field value]
判断field是否存在: hexists key field
获取所有field: hkeys key
获取所有value: hvals key
获取所有field-value: hgetall key
在使用hgetall时,如果hash元素个数较多,会存在阻塞redis的可能,如果只需要获取部分field 用hmget就好。
如果一定要获取全部的field-value可以使用hscan命令
如果一定要获取全部的field-value可以使用hscan命令
hincrby,hincrbyfloat
计算value的字符串长度: hstrlen key field(需要redis3.2版本以上)
内部编码
ziplist(压缩列表)
当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个)、同时值都小于hash-max-ziplist-value配置(默认64字节),
redis会使用ziplist作为内部实现
redis会使用ziplist作为内部实现
ziplist使用更加紧凑的结构实现多个元素的连续存储,所以在节约内存方面比较优秀
hashtable(哈希表)
当哈希类型无法满足ziplist时,redis将采用hashtable作为内部实现
此时ziplist的读写效率下降,而hashtable的读写时间复杂度为O(1)
使用场景
存储表数据,PO对象。类似于数据库的表
哈希类型与数据库的不同
哈希类型时稀疏的,关系型数据库是完全结构化的
关系型数据库可做复杂的关系查询,redis去模拟关系型复杂查询开发困难,维护成本高
缓存用户信息案例
方法一
原生字符串类型:每个属性一个键
优点:简单直观,属性都支持更新操作
缺点:占用的键太多,内存占用较大,用户信息内聚性查,不推荐使用
方法二
序列化字符串类型:将用户信息序列化后用一个键保存
优点:简化编程,如果合理的使用序列化可以提高内存的使用率
缺点:序列化和反序列化有一定的开销,更新需要反序列化再序列化到redis中
方法三
哈希类型:将用户的属性使用一对field-value存储,但只用一个键保存
优点:简单直观,合理使用可以减少内存空间的使用
缺点:要控制内存编码的转换,hashtable会消耗更多的内存
列表(list)
说明:列表类型是用来存储多个有序的字符串
特点一: 列表中的元素是有序的
特点二:元素可以重复
命令
添加操作
从右边插入元素: rpush key value[value ...]
从左边插入数据: lpush key value[value ...]
向某个元素前或后插入元素: linsert key before|after pivor value
查找
获取指定范围内的元素列表: lrange key start end
索引特点一: 下标从左到右是0到N-1,从右到左是-1到-N
二:lrange中的end选项包含了自身
获取指定下标的元素: lindex key index
获取列表长度: llen key
删除
从列表左侧弹出元素: lpop key
从列表右侧弹出元素: rpop key
删除指定元素: lrem key count value
count>0,从左到右,删除最多count个元素
count<0,从右到左,删除最多count绝对值个元素
count=0,删除所有
修改
修改指定索引下标的元素: lset key index newValue
阻塞操作
blpop key[key...] timeout
brpop key[key...] timeout
内部编码
使用场景
集合(set)
有序集合(zset)
0 条评论
下一页
为你推荐
查看更多