启动redis
redis-server.exe
启动之后会一直在后台运行
启动redis客户端
redis-cli
string类型命令
redis中的数据是以键值对的形式存储的,我们需要指定一个key一个value,用set
set name xxx
name 为key,xxx为value
获取一个键的值
get name
redis中的键是分大小写的,name和Name不一样
删除命令del
del name
exists命令判断一个键是否存在
exists name
0代表不存在,1代表存在
keys命令查找redis中都有哪些键
keys *
查找以me结尾的键
keys *me
flushall命令,删除所有的键
redis中的数据是以二进制的形式存储的,所以是不支持中文的
设置中文的话是以十六进制显示的
想要显示中文的话,先quit退出redis客户端,重新进入客户端时加上--raw,代表显示原始数据
TTL(Time To Live)查看一个键的过期时间
TTL name
-1代表并没有设置过期时间
用expire设置一个过期时间
expire name 10
代表设置name键的过期时间为10秒
-2代表这个键已经过期了
使用setex设置键值对的过期时间
setex name 5 xxx
setnx命令,只有在键不存在的时候才设置键的值,如果键存在的话,则不变
setnx key value
列表
lpush将值放到列表尾部
lpush li a
将“a”值放入li列表中的头部
lrange查看列表中的元素
lrange li 0 -1
0代表第一个位置,-1代表列表中的最后一个位置
rpush将值放到列表尾部
使用lpop从列表的头部删除元素
使用rpop从列表的尾部删除元素
lpop li
rpop li
lpop li 2
代表删除列表头部的两个元素
llen命令查看列表的长度
llen li
ltrim命令trim代表修剪的意思
ltrim li 1 3
代表除了1-3位置的元素都被删除掉
无序集合
set 是一种无序集合,它和列表的区别就是列表中的元素可以重复,而set中的元素不能重复,set中的元素不像列表中的元素那样有顺序
set的命令都以s开头
sadd像set中添加一个元素
sadd course redis
1代表添加成功
smembers命令查看这个set中的元素
smembers course
sismember命令查看这个元素在不在集合中
sismember 集合名称 元素
srem命令删除集合中的元素
srem 集合名称 元素
有序集合SortedSet(ZSet)
和集合的区别:每个有序集合中的元素都会关联一个浮点数,按照这个数,从小到大排序,有序集合的元素是唯一的,分数可以不唯一。
有序集合的相关命令都是以Z开头的。
zadd命令,向集合中添加元素
zadd 集合名称 分数 元素
zadd score 99 name1 98 name2 97 name3
zrange命令,查看集合中的元素(输出顺序按照分数的从小到大)
zrange score 0 -1 withscores(显示分数)
zscore命令,查看某个成员的分数
zscore 集合名称 元素名称
zrank命令查看某个元素的排名
zrank 集合名称 元素名称
zrevrank命令,从大到小排序
zrevrank 集合名称 元素名称
zrm命令,删除某个成员
哈希
hset命令,向一张hash表中添加一对键值对
hset person name zz
hget命令,从hash中通过键找值
hget person name
hgetall命令,获取hash中所有的键值对
hgetall person
hdel命令,删除hash中的某个键值对
hdel person age
hexists命令,通过key判断所对应的键值对存不存在
hexists person name
hkeys命令,获取键
hkeys person
hlen命令,获取键值对数量
hlen person
订阅与发布
subscribe(订阅)命令,订阅一个频道
subscribe channel(频道名称)
publish(发布消息)命令,发布消息到频道
publish channel 消息
消息队列stream
可以解决订阅与发布的消息无法持久化的问题和无法记录历史消息的问题。
stream相关命令以x开头
xadd stream * course git
*代表自动生成消息id或者可以改为x-x的形式
xadd stream 1-0 course git
xlen stream
xrange stream - +
- +代表所有消息
删除对应id的消息
xdel stream id
删除所有
xtrim stream maxlen 0
生产者生产消息并用xadd加入消息队列中,消费者需要从消息队列中读取消息以消费信息。
xread count 2 block 1000 streams 消息队列名称 0
count 2 代表一次读两条消息
1000代表如果没有消息读取则阻塞1s
0代表从头开始读取
获取目前发的消息
xread count 2 block 10000 streams 消息队列名称 $
先开始读,进入阻塞,另一个终端向队列中加个消息,则在阻塞中就会收到消息
$代表获取目前发的消息
地理位置信息
地理位置相关的命令都以geo开头
添加一个地理位置信息
geoadd city 116.405285 39.904989 bei jing
获取一个地理位置信息
goepos city bei jing
计算两个地理位置之间的信息
geodist city beijing shanghai
换算成KM,加一个km
geodist city beijing shanghai KM
搜索范围内的成员
geosearch city frommember shanghai byradius 300 km
上述命令代表搜索以上海为中心的300km为半径的圆里的成员
HyperLogLog
HyperLogLog是一种用来做基数统计的算法
基数:如果集合中的每个元素都是唯一且不重复的,那么这个集合的基数就是集合中元素的个数
命令都以pf开头
通过pfadd命令来添加一个元素
pfadd course git
添加一个课程元素,名字叫git
pfcount命令来查看基数
pfcount course
pfmerge合并两个
先创建课程2
pfadd course2 python
将course和course2合并到result中
pfmerge result course course2
位图
位图是字符串类型的扩展,可以使用一个string类型来模拟一个bit数组,数组的下标就是偏移量,值只有0和1,支持一些位运算,与或非异或
位图所有命令都以bit开头
设置一个偏移量的值
setbit dianzan 0 1
代表设置key为dianzan偏移量为0上的值为1
setbit dianzan 1 0
代表设置key为dianzan偏移量为1上的值为0
获取key为dianzan偏移量为0上的值
getbit dianzan 0
位图本质上是字符串,可以用字符串的命令来设置位图的值
设置位图前四位偏移量都为1,后四位偏移量为0
set dianzan "\xF0"
xF0代表用十六进制代表11110000
统计一个key的值里面有多少个bit是1
bitcount dianzan
bitpos命令可以获取位图中第一个出现的0和1的位置
bitpos dianzan 0
代表第一个出现0的位置是4
位域
位域能够将很多小的整数,存储到一个较大的位图中,这样可以更加高效的使用内存
bitfield player:1 set u8 #0 1
key:player:1
u8:代表u8类型的整数,8位无符号整数
#0代表第一个位置
1代表等级(值)
get player:1
获取player:1的信息
返回十六进制的“\x01”
获取值
bitfiled player get u8 #0
设置一个无符号位的32位整数,第二个位置的值#1
bitfield player:1 set u32 #1 100
事务
通过multi开启一个事务,
接下执行的所有命令,都会进到缓存队列中
通过exec命令开始执行命令
如果在事务的执行过程中,某一个命令执行失败了,并不会影响它后面的命令