redis下载与安装参考 博客:https://www.cnblogs.com/jylee/p/9844965.html
在将redis解压缩后的目录下,打开cmd
redis服务启动命令 : redis-server.exe redis.windows.conf
连接redis:redis-cli.exe -h 127.0.0.1 -p 6379
或者直接在文件夹中打开redis-cli.exe
如果没配置环境变量的话连接redis的指令,必须在redis解压路径下打开cmd
参考教程:https://www.runoob.com/redis/redis-data-types.html
参考书籍:https://book.douban.com/subject/30386804/
我这不能算参考了,基本上算是比着书敲了一遍,第一次写博文,也分不太清重点不重点的,见谅。见谅。。
Redis的字符串是动态的、可以修改的,内部机构的实现类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配
相当于字典的key、value,支持简单的crud,下面的name–key codehole–value
127.0.0.1:6379> set name codehole
OK
127.0.0.1:6379> get name
"codehole"
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
可对多个字符串进行批量操作,节省网络耗时开销
127.0.0.1:6379> set name1 codehole
OK
127.0.0.1:6379> set name2 holycoder
OK
127.0.0.1:6379> mget name1 name2 name3
1) "codehole"
2) "holycoder"
3) (nil)
127.0.0.1:6379> mset name1 boy name2 girl name3 unkonwn
OK
127.0.0.1:6379> mget name1 name2 name3
1) "boy"
2) "girl"
3) "unkonwn"
可对key设置过期时间,到时间自动删除,常用做控制缓存的实效时间
127.0.0.1:6379> set name codehole
OK
127.0.0.1:6379> expire name 5 #设置name的过期时间5秒
(integer) 1
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> setex name 5 codehole #set 与expire 结合起来用
OK
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> setnx name codehole #如果name不存在就执行set创建
(integer) 1
127.0.0.1:6379> get name
"codehole"
127.0.0.1:6379> setnx name holycoder #如果存在就不执行
(integer) 0
127.0.0.1:6379> get name
"codehole"
若value是整数 , 还可进行自增操作,范围在signed long最大值与最小值之间
127.0.0.1:6379> set age 30
OK
127.0.0.1:6379> incr age
(integer) 31
127.0.0.1:6379> incrby age 5
(integer) 36
127.0.0.1:6379> incrby age -5
(integer) 31
set key value
储存一个键值对get key
根据key获得该key所对应的valueexists key
判断该键值对是否存在del key
根据key删除键值对mset key1 value1 key2 value2...
储存多个key valuemget key1 key2
根据多个key ,返回一个value列表expire key second
设置某个key的过期时间setex key second value
等价于set+expiresetnx key value
如果key存在就不执行,不存在则执行incr key
value 为整数时 +1incrby key +-number
value ±number在看这一部分时,讲到了rehash,以及redis中的rehash与java中rehash的区别,这里没看懂,也不清楚rehash是什么,回头需要再补一补。
hash结构的存储消耗要高于单个字符串,到底要使用hash还是字符串需要根据实际情况再三权衡
127.0.0.1:6379> hset books java "think in java"
(integer) 1
127.0.0.1:6379> hset books golang "concurrency in go"
(integer) 1
127.0.0.1:6379> hset books python "python cookbook"
(integer) 1
127.0.0.1:6379> hgetall books
1) "java"
2) "think in java"
3) "golang"
4) "concurrency in go"
5) "python"
6) "python cookbook"
127.0.0.1:6379> hlen books
(integer) 3
127.0.0.1:6379> hget books java
"think in java"
127.0.0.1:6379> hset books golang "learning go programming"
(integer) 0
127.0.0.1:6379> hget books golang
"learning go programming"
127.0.0.1:6379> hmset books java "effective java" python "learning python"
OK
hset hashKey key value
储存一个hash 如果字符串包含空格,要用引号引起来,若hset 相同的key的value ,则视为更新操作hgetall hashKey
返回hash内所有key value(key与value间隔出现)hlen hashKey
返回hash的长度hget hashKey key
从hashKey内获取key所对应的valuehmset hashKey key1 value1 key2 value2
批量sethincrby hashKey key number
value 是数字的的可进行计数当列表弹出了最后一个元素之后,该数据结构被自动删除,内存被回收
先进先出,常用做消息排队和异步逻辑处理,确保了元素的访问顺序性
127.0.0.1:6379> rpush books python java golang
(integer) 3
127.0.0.1:6379> llen books
(integer) 3
127.0.0.1:6379> lpop books
"python"
127.0.0.1:6379> lpop books
"java"
127.0.0.1:6379> lpop books
"golang"
127.0.0.1:6379> lpop books
(nil)
后进后出,业务中并不太常见
127.0.0.1:6379> rpush books python java golang
(integer) 3
127.0.0.1:6379> rpop books
"golang"
127.0.0.1:6379> rpop books
"java"
127.0.0.1:6379> rpop books
"python"
127.0.0.1:6379> rpop books
(nil)
127.0.0.1:6379> rpush books python java golang
(integer) 3
127.0.0.1:6379> lindex books 1 #同java链表的get(index),需要对链表进行遍历
"java"
127.0.0.1:6379> lrange books 0 -1 #获取所有元素
1) "python"
2) "java"
3) "golang"
127.0.0.1:6379> ltrim books 1 -1 #保留区间内值
OK
127.0.0.1:6379> lrange books 0 -1
1) "java"
2) "golang"
127.0.0.1:6379> ltrim books 1 0 #清空列表,因为长度为负
OK
127.0.0.1:6379> llen books
(integer) 0
rpush key value1 value2 value3
储存一个列表,从右边进llen key
返回列表长度lpop key
从key列表中左边弹出一个值,并清内存rpop
从列表右边弹出一个值,并清内存lindex key index
根据index获得key列表中的值,O(n)lrange key key findex eindex
根据区间获取列表值,返回列表,O(n)ltrim books findex eindex
根据区间保留列表中的值内部实现相当于一个特殊的字典,字典中所有的value都是一个值null。
当集合中的最后一个元素被移除之后秘书局结构被自动删除,内存被回收
127.0.0.1:6379> sadd books python
(integer) 1
127.0.0.1:6379> sadd books python
(integer) 0
127.0.0.1:6379> sadd books java golang
(integer) 2
127.0.0.1:6379> smembers books
1) "golang"
2) "java"
3) "python"
127.0.0.1:6379> sismember books java
(integer) 1
127.0.0.1:6379> sismember books rust
(integer) 0
127.0.0.1:6379> scard books
(integer) 3
127.0.0.1:6379> spop books
"python"
127.0.0.1:6379> scard books
(integer) 2
sadd key value
储存一个setsmembers books
返回set内所有值,无序sismember key value
查询某个value是否存在,存在返回1,否则返回0scard key
获取set长度spop key
从set中弹出一个值内部实现是一种叫作“跳跃列表”的数据结构
zset中最后一个value被移除后,数据结构被自动删除,内存被回收
127.0.0.1:6379> zadd books 9.0 "think in java"
(integer) 1
127.0.0.1:6379> zadd books 8.9 "java concurrency"
(integer) 1
127.0.0.1:6379> zadd books 8.6 "java cookbook"
(integer) 1
127.0.0.1:6379> zrange books 0 -1
1) "java cookbook"
2) "java concurrency"
3) "think in java"
127.0.0.1:6379> zrevrange books 0 -1
1) "think in java"
2) "java concurrency"
3) "java cookbook"
127.0.0.1:6379> zcard books
(integer) 3
127.0.0.1:6379> zscore books "java concurrency"
"8.9000000000000004"
127.0.0.1:6379> zrank books "java concurrency"
(integer) 1
127.0.0.1:6379> zrangebyscore books 0 8.91
1) "java cookbook"
2) "java concurrency"
127.0.0.1:6379> zrangebyscore books -inf 8.91 withscores
1) "java cookbook"
2) "8.5999999999999996"
3) "java concurrency"
4) "8.9000000000000004"
127.0.0.1:6379> zrem books "java concurrency"
(integer) 1
127.0.0.1:6379> zrange books 0 -1
1) "java cookbook"
2) "think in java"
zadd key score value
储存一个zset ,传入scorezrange key 0 -1
按score排序列出,参数区间为排名范围zrevrange key 0 -1
按score逆序列出,参数区间为排名范围zcard key
获取zset长度zscore key value
获取指定value 的score ,内部使用double类型进行存储scorezrank key value
获取value所在排名zrangebyscore key findex eindex
根据分值区间遍历zsetzrangebyscore key -inf index withscores
根据分值区间遍历zset,同时返回分值,-inf为负无穷大zrem key value
删除指定value