redis01

Posted quyangyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis01相关的知识,希望对你有一定的参考价值。

redis特点

1.速度快

高qps

将数据存储在内存中

由C语言编写

线程模型为单线程

 

2.持久化

Redis将所有数据保持在内存中,并异步更新到磁盘上

 

3.支持多种数据结构

String

Hash

List

Set

ZSet

BitMap(位图)

HyperLogLog(超小的内存唯一值计数器)

GEO(地理信息定位)

 

4.支持多种语言

Java

Python

Ruby

Lua

NodeJS

 

5.功能丰富

支持类MQ的发布订阅功能

支持Lua脚本

支持事务

支持pipeline

 

6.支持主从复制

7.高可用分布式

 

启动方式

1  cd redis/bin
2  ./redis-server  redis.conf
3  ./redis-cli -h host -p port -a password     
       ./redis-cli -p 6379 -a redis
        redis-cli --raw 防中文乱码

 

通用命令

keys   key* 遍历所有的key  keys[pattern]   时间复杂度O(n) ,不建议使用

dbsizes  计算key的总数

exists key   检查key是否存在

del key[key ...]    在key存在时删除key

expire key seconds   为给定key设置过期时间,单位为秒

  ttl key 查看key的过期时间

  persist key 去掉key的过期时间

type key    返回key的类型

  string hash list set zset none

 

内部编码

 

string

raw , int , embstr

int的范围相当于Java中的long,为8个字节长整型

字符长度少于等于39个长度时为embstr

字符长度超过39个长度时为raw,比起embstr,是不连续的

 

hash

hashtable(哈希表) , ziplist(压缩列表)

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

当hash结构的field数量小于等于512并且每个field与value的长度小于等于64时,hash会采用ziplist

 

list 

linkedlist(双向循环链表) , ziplist(压缩列表)

list-max-ziplist-entries 512

list-max-ziplist-value 64

当list结构的元素数量小于等于512并且每个item的长度小于等于64时,list会采用ziplist

 

set 

hashtable(哈希表) , intset(整数集合)

set-max-intset-entries 512

当set结构的元素数量小于等于512时候,set将采用intset

 

zset 

skiplist(跳跃列表) , ziplist(压缩列表)

zset-max-ziplist-entries 512

zset-max-ziplist-value 64

当zset结构的元素数量小于等于512并且每个member的长度小于等于64时,zset会采用ziplist

当key的数量比较少时,Redis采取以时间换空间的策略

当key的数量增多时,Redis采取以空间换时间的策略

查看内部编码的方式 object encoding $key

ziplist的特点

连续内存,读写有指针位移,最坏O(n2),新增删除有内存重分配

 

单线程,高速

1.纯内存

2.epoll 非阻塞io

3.避免线程切换

 

一次只运行一条命令

拒绝长命令  keys,flushall,flushdb,slow lua script,mutil/exec,operate

 

String

结构:key-value对  value可以是字符串,数字,二进制数组

String 常用命令

 1 get  key   获取指定key的值
 2 
 3 set key value  设置指定key的值
 4 
 5 incr key  将key中存储的数字值增一
 6 
 7 incrby key incremen   将key所存储的数字值加上给定的增量
 8 
 9 decr key   将key中存储的数字值减一
10 
11 decrby key decrement  将key所存储的数字值减去给定的减量
12 
13 setnx key value  只有当key不存在时才设置key的值
14 
15 set key value nx    只有当key不存在时才设置key的值
16 
17 setex key second value  设置指定key的值,同时设置该key的过期时间,单位为秒
18 
19 set key second value ex   设置指定key的值,同时设置该key的过期时间,单位为秒
20 
21 set key value xx     只有key存在时才设置key的值
22 
23 mget key1 [key2...]    获取所有(一个或多个)指定key的值
24 
25 mset key1 value1 [key2 value2...]    同时设置一个或多个key-value对
26 
27 其他命令
28 
29 getset key newvalue    将给定key的值设置为value,并返回key的旧值
30 
31 append key value   将value追加到旧值的末尾
32 
33 strlen key
34 
35 返回key所存储的字符串值的长度
36 
37 ?    当key不存在时,返回0
38 
39 ?    一个中文占2个字节
40 
41 ?    时间复杂度为O(1),strlen在redis内部不需要查询整个字符串来得到长度
42 
43 incrbyfloat key increment    将key所存储的值加上给定的浮点值
44 
45 getrange key start end    返回key中字符串区间为[start,end]的子串,索引从0开始
46 
47 setrange key offset value
48 
49 ?    用value擦书覆盖指定key所存储的字符串值,从偏移量offset开始,索引从0开始
50 
51 ?    key = content的时候,执行setrange key 1 haha 之后,key=chahant

 

Hash

 1  hget key field
 2 
 3 获取存储在哈希表中指定field的值
 4 
 5 hset key field value
 6 
 7 将哈希表中指定field的值设置为value
 8 
 9 hdel key field1 [field2...]
10 
11 删除哈希表中一个或多个field
12 
13 hexists key field
14 
15 判断哈希表中,指定field是否存在
16 
17 hlen key
18 
19 获取哈希表中字段的数量
20 
21 hmget key field1 [field2...]
22 
23 获取哈希表中所有给定field的值
24 
25 hmset key field1 value1 [field2 value2...]
26 
27 同时将一个或多个field-value对设置到哈希表中
28 
29 hincrby key fiel increment
30 
31 为哈希表中指定field的值加上一个整型增量
32 
33 hgetall key
34 
35 获取哈希表中所有字段和值
36 - 时间复杂度为O(n),不建议使用
37 
38 hkeys key
39 
40 获取哈希表中的所有字段
41 - 时间复杂度为O(n),不建议使用
42 
43 hvals key
44 
45 获取哈希表中的所有值
46 - 时间复杂度为O(n),不建议使用
47 
48 hsetnx key field value
49 
50 只有当哈希表中field不存在时,才设置该field的值
51 
52 hincrbyfloat key field increment
53 
54 为哈希表中指定field的值加上一个浮点数增量

 

list

List-结构

列表:有序、可以有重复元素


索引从左往右,从0开始逐个增大 0 1 2 3 4 5
索引从右往左,从-1开始逐个减小 -6 -5 -4 -3 -2 -1

 1 rpush key value1 [value2...]
 2 
 3 在列表后侧添加一个或多个值
 4 
 5 lpush key value1 [value2...]
 6 
 7 在列表左侧添加一个或多个值
 8 
 9 linsert key before/after value newValue
10 
11 在列表指定的value前/后插入newValue,时间复杂度为O(n)
12 
13 lpop key
14 
15 从列表左侧弹出一个值
16 
17 rpop key
18 
19 从列表右侧弹出一个值
20 
21 lrem key count value
22 
23 - 含义:根据count值,从列表中删除值为value的项,时间复杂度为O(n)
24   - count > 0 时,从左往右遍历,删除最多count个与value相等的值
25   - count < 0 时,从右往左遍历,删除最多Math.abs(count)个与value相等的值
26   - count = 0 时,删除所有与value相等的值
27 时间复杂度是On
28 
29 ltrim key start end
30 
31 对一个列表进行修剪,只保留指定区间内的元素,不在区间内的元素都将被删除,时间复杂度为O(n)
32 
33 lrange key start end
34 
35 获取列表指定索引范围的所有元素,时间复杂度为O(n)
36 
37 lindex key index
38 
39 获取列表指定索引的元素,时间复杂度为O(n)
40 
41 llen key
42 
43 获取列表长度,时间复杂度为O(1)
44 
45 lset key index newValue
46 
47 设置列表指定索引的值为newValue,时间复杂度为O(n)
48 - 注意:
49   - 必须存在这个值才能设置成功,否则会报错
50 
51 blpop key timeout
52 
53 移除并获取列表左边第一个元素,如果列表没有元素会阻塞直到等待超时或可弹出元素为止
54   - timeout单位为秒,timeout=0时不阻塞
55 
56 brpop key timeout
57 
58  移除并获取列表右边第一个元素,如果列表没有元素会阻塞直到等待超时或可弹出元素为止
59   - timeout单位为秒,timeout=0时不阻塞

 

set

结构

集合:无序,不可重复

 Set-集合内操作

 1 sadd key memebr1 [member2...]
 2 
 3 向集合中添加一个或多个成员
 4 
 5 srem key member1 [member2...]
 6 
 7 从集合中删除一个或多个成员
 8 
 9 scard key
10 
11 获取集合中的元素个数
12 
13 sismember key member
14 
15 判断member元素是不是集合的成员
16 
17 srandmember key count
18 
19 随机从集合中取出count个成员
20 
21 spop key
22 
23 随机移除并返回集合中的一个成员
24 
25 smembers key
26 
27 获取集合中的所有成员
28 - 时间复杂度为O(n),不建议使用,类似的操作可以使用SSCAN

 Set-集合间操作

 1 sdiff key1 [key2...]
 2 
 3 返回给定所有集合的差集
 4 
 5 sdiffstore destKey key1 [key2...]
 6 
 7 计算给定所有集合的差集,并存入destKey
 8 
 9 sinter key1 [key2...]
10 
11 返回给定所有集合的交集
12 
13 sinterstore destKey key1 [key2...]
14 
15 计算给定所有集合的交集,并存入destKey
16 
17 sunion key1 [key2...]
18 
19 返回给定所有集合的并集
20 
21 sunionstore destKey key1 [key2...]
22 
23 计算给定所有集合的并集,并存入destKey

 

集合与有序集合

集合:无重复元素,无序,element

有序集合:无重复元素,有序,element+score

与列表的关系

列表:有重复元素,有序,element

 

 

zset

有序集合:有序、不能包含重复元素
每个节点包含:score和value两个属性,根据score进行排序

 1 zadd key score1 member1 [score2 member2...]
 2 
 3 向有序集合添加一个或多个成员,或者更新已存在成员的分数
 4 
 5 zrem key member1 [member2...]
 6 
 7 从有序集合中删除一个或多个成员
 8 
 9 zscore key member
10 
11 获取有序集合中成员的分数m
12 
13 zincrby key increment member
14 
15 对有序集合中指定成员的分数加上增量increment
16 
17 zcard key
18 
19 返回有序集合中元素的总个数
20 
21 zrange key start end [withscores]
22 
23 通过索引返回有序集合中指定区间的成员信息
24 - withscores 参数,加上代表一并将score数据返回
25 - 时间复杂度:O(log(n) + m) , n=有序集合中的元素个数,m=返回的总个数
26 
27 zrangebyscore key min max \[withscores]\[limit]
28 
29 通过score返回有序集合中指定分数区间的成员信息
30   - withscores 参数,加上代表一并将score数据返回
31   - limit参数,加上代表限制返回多少条数据
32 - 时间复杂度:O(log(n) + m) , n=有序集合中的元素个数,m=返回的总个数
33 
34 zscore key min max
35 
36 返回有序集合中指定分数范围内的元素个数
37 - 时间复杂度:O(log(n) + m) , n=有序集合中的元素个数,m=指定分数范围内的元素个数
38 
39 zremrangebyscore key min max
40 
41 删除有序集合中指定分数区间的所有成员
42 - 时间复杂度:O(log(n) + m) , n=有序集合中的元素个数,m=指定分数范围内的元素个数
43 
44 zremrangebyrank key start end
45 
46 删除有序集合中给定索引区间的所有成员
47 - 时间复杂度:O(log(n) + m) , n=有序集合中的元素个数,m=指定索引范围内的元素个数

 

 

 

 

 

 

 

 

 

以上是关于redis01的主要内容,如果未能解决你的问题,请参考以下文章

redis 01 -- 重启 redis 需要清空数据

Redis:Redis基础知识 01

redis初识01

Redis--01

redis学习——day01_redis简介与安装

Redis 笔记 01:入门篇