Redis数据类型和应用场景flash拼图游戏源码,vscode 写前端,ubuntu桌面状态栏隐藏,tomcat无限404,sqlite安卓下载,javascript 分页插件,汽车前端框架损坏,小狗爬虫子视频,php url 中文,上海seo 优化,安卓游戏网站源码,js自动点击网页区域,杂志设计模板下载,windows程序设计随书光盘lzwRedis是一个Key-Value的存储系统,使用ANSI C语言编写。
key的类型是字符串。
value的数据类型8种数据类型:
常见数据类型
string字符串类型
list列表类型
set集合类型
sortedset(zset)有序集合类型
hash类型
不常见数据类型
bitmap位图类型
geo地理位置类型
stream类型
注意
Redis中命令是忽略大小写,(set SET),key是不忽略大小写的 (NAME name)
string字符串类型
Redis的String能表达3种值的类型:字符串、整数、浮点数 100.01 是个六位的串
常用命令
命令名称 | 命令格式 | 命令描述 |
---|---|---|
set | set key value | 赋值 |
get | get key | 取值 |
getset | getset key value | 取值并赋值 |
mset | MSET key1 value1 key2 value2 .. keyN valueN | 设置多个 key 的值为各自对应的 value。 |
mget | MGET KEY1 KEY2 .. KEYN | 返回所有(一个或多个)给定 key 的值 |
EXPIRE | EXPIRE key seconds | 设置一个键的过期时间(秒) |
append | append key value | 向尾部追加值 |
strlen | strlen key | 获取字符串长度 |
setnx | setnx key value | 当value不存在时采用赋值 set key value NX PX 3000 原子操作,px 设置毫秒数 |
incr | incr key | 递增数字 |
incrby | incrby key increment | 增加指定的整数 |
decr | decr key | 递减数字 |
decrby | decrby key decrement | 减少指定的整数 |
应用场景
1、对象缓存
2、单值缓存
3、incr用于乐观锁 incr:递增数字,可用于实现乐观锁 watch(事务)
4、setnx用于分布式锁 当value不存在时采用赋值,可用于实现分布式锁
5、计数器
6、Web集群session共享
常用方法举例
dockerRedis:0>keys *dockerRedis:0>append testName 2"1"dockerRedis:0>exists testName"1"dockerRedis:0>append testName " 1234""6"dockerRedis:0>get testName"2 1234"dockerRedis:0>set testName1 "testName1""OK"dockerRedis:0>get testName1"testName1"dockerRedis:0>getset testName2 "testName2"nulldockerRedis:0>get testName2"testName2"dockerRedis:0>strlen testName"6"dockerRedis:0>set incrTest "10""OK"dockerRedis:0>incr incrTest"11"dockerRedis:0>get incrTest"11"dockerRedis:0>decr incrTest"10"dockerRedis:0>decrby incrTest 5"5"dockerRedis:0>mset set01 1 set02 2 set03 3"OK"dockerRedis:0>mget set01 set02 set031) "1"2) "2"3) "3"
list列表类型
list列表类型可以存储有序、可重复的元素获取头部或尾部附近的记录是极快的 list的元素个数最多为2^32-1个(40亿)
常用命令
命令名称 | 命令格式 | 命令描述 |
---|---|---|
lpush | lpush key v1 v2 v3 … | 从左侧插入列表 |
lpop | lpop key | 从列表左侧取出 |
rpush | rpush key v1 v2 v3 … | 从右侧插入列表 |
rpop | rpop key | 从列表右侧取出 |
lpushx | lpushx key value | 将值插入到列表头部 |
blpop | blpop key timeout | 从列表左侧取出,当列表为空时阻塞,可以设置最大阻塞时间,单位为秒 |
llen | llen key | 获得列表中元素个数 |
lrange | lrange key start end | 返回列表中指定区间的元素,区间通过start和end指定 |
lset | lset key index value | 将列表index位置的元素设置成value的值 |
rpoplpush | rpoplpush key1 key2 | 从key1列表右侧弹出并插入到key2列表左侧 |
rpushx | rpushx key | 将值插入到列表尾部 value |
brpop | blpop key | 从列表右侧取出,当列表为空时阻塞,可以设置最大阻塞时 timeout 间,单位为秒 |
lindex | lindex key value | 获得列表中下标为index的元素 index从0开始 index |
ltrim | ltrim key start end | 对列表进行修剪,只保留start到end区间 end |
brpoplpush | brpoplpush | 从key1列表右侧弹出并插入到key2列表左侧,会阻塞 key1 key2 |
linsert | linsert key BEFORE/AFTER pivot value | 将value插入到列表,且位于值pivot之前或之后 |
应用场景
1、Stack(栈)=LPUSH + LPOP
2、Queue(队列)=LPUSH + RPOP
3、Blocking MQ(阻塞队列)=LPUSH + BRPOP
4、用户列表、商品列表、评论列表
set集合类型
Set:无序、唯一元素 集合中最大的成员数为 2^32 – 1
常用命令
命令名称 | 命令格式 | 命令描述 |
---|---|---|
sadd | sadd key value1 value2 …. | 往集合key中存入元素,元素存在则忽略,若key不存在则新建 |
srem | srem key value1 value2 …. | 从集合key中删除元素 |
smembers | smembers key | 获得集合中所有元素 |
spop | spop key count | 从集合key中选出count个元素,元素从key中删除 |
srandmember | srandmember key count | 从集合key中选出count个元素,元素不从key中删除 |
scard | scard key | 获取集合key的元素个数 |
sismember | sismember key member | 判断member元素是否存在于集合key中 |
sinter | sinter key1 key2 key3 | 求多集合的交集 |
sdiff | sdiff key1 key2 key3 | 求多集合的差集 |
sunion | sunion key1 key2 key3 | 求多集合的并集 |
应用场景
微信抽奖小程序
微博点赞、收藏、标签
微博微信关注模型
电商商品筛选
zset有序集合类型
SortedSet(ZSet) 有序集合: 元素本身是无序不重复的
每个元素关联一个分数(score) 可按分数排序,分数可重复
常用命令
命令名称 | 命令格式 | 命令描述 |
---|---|---|
zadd | zadd key score1 member1 score2 member2 … | 往有序集合key中加入带分值元素 |
zrem | zrem key mem1 mem2 …. | 从有序集合key中删除元素 |
zcard | zcard key | 获得有序集合中的元素数量 |
zcount | zcount key min max | 返回集合中score值在[min,max]区间 的元素数量 |
zincrby | zincrby key increment member | 为有序集合key中元素member的分值加上increment |
zscore | zscore key member | 返回有序集合key中元素member的分值 |
zrank | zrank key member | 获得集合中member的排名(按分值从 小到大) |
zrange | zrange key start end | 正 序获取有序集合key从start下标到stop下标的元素 |
zrevrank | zrevrank key member | 获得集合中member的排名(按分值从 大到小) |
zrevrange | zrevrange key start end | 倒序获取有序集合key从start下标到stop下标的元素 |
应用场景
点击排行榜、销量排行榜、关注排行榜
hash类型
Redis hash是一个string类型的field和value的映射表,它提供了字段和字段值的映射。每个 hash 可以存储 2^32-1键值对(40多亿)。
优点
1、同类数据归类整合储存,方便数据管理
2、相比string操作消耗内存与cpu更小
3、相比string储存更节省空间
缺点
1、过期功能不能使用在field上,只能用在key上
2、Redis集群架构下不适合大规模使用
常用命令
命令名称 | 命令格式 | 命令描述 |
---|---|---|
hset | hset key field value | 存储一个哈希表key的键值 |
hmset | hmset key field1 value1 field2 value2 | 在一个哈希表key中存储多个键值对 |
hget | hget key field | 查看某个field是否存在 |
hmget | hmget key field1 field2 … | 获取一个字段值 |
hsetnx | hsetnx key field value | 存储一个不存在的哈希表key的键值 |
hexists | hexists key filed | 判断filed是否存在 |
hgetall | hgetall key | 获取多个字段值 |
hdel | hdel key field1 field2… | 删除指定字段 |
hincrby | hincrby key field increment | 指定字段自增increment |
hlen | hlen key | 获得字段数量 |
应用场景
对象缓存
购物车操作
bitmap位图类型
bitmap是进行位操作的 通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。 bitmap本身会极大的节省储存空间。
常用命令
命令名称 | 命令格式 | 命令描述 |
---|---|---|
setbit | setbit key offset value | 设置key在offset处的bit值(只能是0或者 1)。 |
getbit | getbit key offset | 获得key在offset处的bit值 |
bitcount | bitcount key | 获得key的bit位为1的个数 |
bitpos | bitpos key value | 返回第一个被设置为bit值的索引值 |
bitop | bitop and[or/xor/not] destkey key [key …] | 对多个key 进行逻辑运算后存入destkey 中 |
应用场景
1、用户每月签到,用户id为key , 日期作为偏移量 1表示签到2、统计活跃用户, 日期为key,用户id为偏移量 1表示活跃3、查询用户在线状态, 日期为key,用户id为偏移量 1表示在线
geo地理位置类型
geo是Redis用来处理位置信息的。在Redis3.2中正式使用。主要是利用了Z阶曲线、Base32编码和geohash算法
常用命令
命令名称 | 命令格式 | 命令描述 |
---|---|---|
geoadd | geoadd key 经度 纬度 成员名称1 经度1 纬度1 成 员名称2 经度2 纬度 2 … | 添加地理坐标 |
geopos | geopos key 成员名称1 成员名称2… | 返回成员经纬度 |
geodist | geodist key 成员1 成员2 单位 | 计算成员间距离 |
georadiusbymember | georadiusbymember key 成员 值单位 count 数 asc[desc] | 根据成员查找附近的成员 |
geohash | geohash key 成员名称1 成员名称2… | 返回标准的 geohash串 |
应用场景
1、记录地理位置
2、计算距离
3、查找”附近的人”
stream数据流类型
stream是Redis5.0后新增的数据结构,用于可持久化的消息队列。
几乎满足了消息队列具备的全部内容,包括:
消息ID的序列化生成消息遍历消息的阻塞和非阻塞读取消息的分组消费未完成消息的处理消息队列监控
每个Stream都有唯一的名称,它就是Redis的key,首次使用 xadd 指令追加消息时自动创建
应用场景
消息队列的使用
编程入门!!