Redis
一,docker方式安装redis
> docker pull redis
> docker run --name myredis -d -p6379:6379 redis
> docker exec -it myredis redis-cli
二,数据结构
- string --字符串
- list–列表
- set-- 集合
- hash – 哈希
- zset – 有序集合
String
用途:缓存用户信息。
redis的字符串是动态的,类似java的arrayList,用预分配冗余空间的方式来减少内存的频繁分配。每次扩容1M,最大长度512M
set userName "小明"
get userName
("小明")
exists userName
(integer)1
del userName
(integer)1
mset name1 dog name2 cat name3 monkey
mget name1 name2 name3
"dog"
"cat"
"monkey"
expire userName 5
setex userName 5 codehole
setnx userName codehole
set age 30
incr age
(integer)31
incrby age 5
(integer)36
incrby age -5
(integer)31
list列表
相当于java里的linkedList,她是链表不是数组,插入删除快。
redis列表结构常用来做异步队列使用。
rpush books java python golang
llen books
(integer)3
lpop books
rpush books java python golang
rpop books
"golang"
慢操作
lindex相当于java链表的get(index)方法,需要对链表进行遍历,性能随着参数index增大而变差。
ltrim start_index end_index 定义了一个区间,在这个区间内的值,会被保留,此外统统砍掉。
rpush books python java golang
lindex books 1
"java"
lrang books 0 -1
1) "python"
2) "java"
3) "golang"
ltrim books 1 -1
lrang books 0 -1
1) "java"
2) "golang"
快速列表
redis底层存储是 quickList的快速链表结构。在列表元素较少时使用一块连续的内存存储,这个结构是ziplist(压缩列表)。当数据量比较多是才会改成quickList。因为普通链表需要的附加指针空间太大,会比较浪费空间。还会加重内存的碎片化。
hash字典
相当于java种的hashMap,无序字典。结构(数组+链表二维结构)。第一维hash的数组位置碰撞时,就会将碰撞的元素使用链表串接起来。
redis的字典值只能是字符串。java的hashMap在字典很大时,rehash是个耗时的操作,需要一次性全部rehash。Redis为了不阻塞服务,采用了渐进式rehash策略。
hset book java "this is java"
hset books golang "concurrency in go"
hgetall books
1) "java"
2) "this is java"
3) "golang"
4) "concurrency in go"
hlen books
(integer)2
hget books java
"this is java"
hmset books java "effective java" python "learning python" golang "modern golang
programming"
hincrby user-ming age 1
set集合
相当于java里的hashSet,内部唯一无序。他的内部实现相当于一个特殊的字典,字典中所有的value都是一个值null.
当集合种最后一个元素移除后,数据结构自动删除,内存被回收,
sadd books java
sadd books python golang
smembers books
1) "java"
2) "python"
3) "golang"
sismember books java
(integer)1
sismember books rust
(integer)0
scard books
(integer)3
spop books
"java"
zset-有序列表
有序唯一,它可以给每一个value赋予一个score,代表这个value的排序权重,它内部实现用的是一种叫着跳跃列表的数据结构。
zset中最后一个value被移除后,数据结构自动删除,内存被回收。
> zadd books 9.0 "think in java"
(integer) 1
> zadd books 8.9 "java concurrency"
(integer) 1
> zadd books 8.6 "java cookbook"
(integer) 1
zrange books 0 -1
1) "java cookbook"
2) "java concurrency"
3) "think in java"
zrevrange books 0 -1
1) "think in java"
2) "java concurrency"
3) "java cookbook"
zcard books
(integer)3
> zscore books "java concurrency"
"8.9000000000000004"
zrank books "java concurrency"
(integer) 1
> zrangebyscore books 0 8.91
1) "java cookbook"
2) "java concurrency"
> zrangebyscore books -inf 8.91 withscores
1) "java cookbook"
2) "8.5999999999999996"
3) "java concurrency"
4) "8.9000000000000004"
> zrem books "java concurrency"
(integer) 1
> zrange books 0 -1
1) "java cookbook"
2) "think in java"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)