redis数据类型用法(Redis五个基本数据类型详解)

本文目录
Redis五个基本数据类型详解
docker pull redis
docker run -p 6379:6379 --name redis -v {路径}/redis.conf:/etc/redis/redis.conf -v {路径}/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样?
set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的!后面会讲具体怎么做。
下面是sds定义
而对于SDS,由于len属性和free属性的存在,对于修改字符串SDS实现了空间预分配和惰性空间释放两种策略:
1、空间预分配:对字符串进行空间扩展的时候,扩展的内存比实际需要的多,这样可以减少连续执行字符串增长操作所需的内存重分配次数。
2、惰性空间释放:对字符串进行缩短操作时,程序不立即使用内存重新分配来回收缩短后多余的字节,而是使用 free 属性将这些字节的数量记录下来,等待后续使用。(当然SDS也提供了相应的API,当我们有需要时,也可以手动释放这些未使用的空间。)
在原来的单链表基础上,我们查询数据需要从头遍历到尾,时间复杂度太高了。我们在思考提高查询效率时,在原有链表上添加索引,如果还是觉得查询太慢我们又在索引上再增加一级索引,以此类推。跳跃表的实质就是在单链表上一级一级地增加索引来达到加快查询的目的。
***隐藏网址***
Redis 的五大数据类型和 TTL
redis 是 key-value 的数据结构,每条数据都是⼀个键值对。
可以通过 type 命令查看 Reids key 所存储的 value 的类型。
1)字符串 string
2)哈希 hash
3)列表 list
4)集合 set
5)有序集合 zset
语法:
以秒为单位,返回给定 key 的剩余生存时间( TTL, time to live )。
返回值:
调用 set 命令后会重置 key 的 ttl。
调用 hset 命令后不会重置 key 的 ttl。
调用 lpush 命令后不会重置 key 的 ttl。
调用 sadd 命令后不会重置 key 的 ttl。
调用 zadd 命令后不会重置 key 的 ttl。
redis里list类型的数据怎么使用
1. LPUSH/LPUSHX/LRANGE:
/》 redis-cli #在Shell提示符下启动redis客户端工具。
redis 127.0.0.1:6379》 del mykey
(integer) 1
#mykey键并不存在,该命令会创建该键及与其关联的List,之后在将参数中的values从左到右依次插入。
redis 127.0.0.1:6379》 lpush mykey a b c d
(integer) 4
#取从位置0开始到位置2结束的3个元素。
redis 127.0.0.1:6379》 lrange mykey 0 2
1) "d"
2) "c"
3) "b"
#取链表中的全部元素,其中0表示第一个元素,-1表示最后一个元素。
redis 127.0.0.1:6379》 lrange mykey 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
#mykey2键此时并不存在,因此该命令将不会进行任何操作,其返回值为0。
redis 127.0.0.1:6379》 lpushx mykey2 e
(integer) 0
#可以看到mykey2没有关联任何List Value。
redis 127.0.0.1:6379》 lrange mykey2 0 -1
(empty list or set)
#mykey键此时已经存在,所以该命令插入成功,并返回链表中当前元素的数量。
redis 127.0.0.1:6379》 lpushx mykey e
(integer) 5
#获取该键的List Value的头部元素。
redis 127.0.0.1:6379》 lrange mykey 0 0
1) "e"
2. LPOP/LLEN:
redis 127.0.0.1:6379》 lpush mykey a b c
redis各种数据类型分别在什么情况下使用
1.取最新N个数据的操作
•使用LPUSH latest.comments《ID》命令,向list集合中插入数据
•插入完成后再用LTRIM latest.comments 0 5000命令使其永远只保存最近5000个ID
•然后我们在客户端获取某一页评论时可以用下面的伪代码 redis.lrange("latest.comments",start,start+num_items-1)
ps:如果输入无序则可以使用sorted set用时间作为score,然后lrangebyscore分页读取,按时间排序
2.排行榜应用,取TOP n操作
将你要排序的值设置成sorted set的score,将具体的数据设置成相应的value,每次只需要执行一条ZADD命令即可。
3.需要精准设定过期时间的应用
比如你可以把上面说到的sorted set的score值设置成过期时间的时间戳,那么就可以简单地通过过期时间排序,定时清除过期数据了
4.计数器应用
INCR,DECR命令
5.Uniq操作,获取某段时间所有数据排重值
使用Redis的set数据结构
6.实时系统,反垃圾系统
set
7.Pub/Sub构建实时消息系统
8.构建队列系统
使用list可以构建队列系统,使用sorted set甚至可以构建有优先级的队列系统。
9.缓存
其实没有固定说那个类型一定用在什么场景,你需要了解redis数据类型的特点,并利用其特点来满足你的场景需要。
redis有字符串类型、列表、哈希表(散列表)、集合、有序集合这5种,各有不同。各有特点,列表经常用作队列用作需要保持顺序的场景,散列表可以去除重复值而且可以设置field属性,集合可以去除重复而且支持集合操作适合tag系统以及关注人列表,有序集合在集合基础上增加了排序。

更多文章:
teammate(teammate,company,partner)
2026年10月11日 06:10
javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)
2026年10月11日 04:00
text函数公式(excel中round和text函数的区别是什么)
2026年10月11日 03:50
google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)
2026年10月11日 02:00
websocket整合springboot(Springboot整合Websocket遇到的坑)
2026年10月11日 01:40
drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)
2026年10月10日 19:20
xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)
2026年10月10日 17:50
perl数组中最多的元素(用perl实现,得到一个数组中重复次数最多的元素)
2026年10月10日 17:00




