Redis的数据结构、通用操作及其特性
Redis的数据结构
五种数据类型:
字符串(String)、字符串列表(list)、字符串集合(set)、有序字符串集合(sorted set)、哈希(hash)
key定义的注意点:
- 不要过长,不要超过1024个字节
- 不要过短,会降低可读性
- 要有统一的命名规范
存储String
二进制的方式存储的,意味着该类型存入和获取的数据是相同的,value最多容纳的数据长度
存储String常用命令:
- 赋值set、
- 取值get(getset)、
- 删除del、
- 扩展[incrby(将value加指定值),decrby自减]、
- 数据增减[incr(若没有则设初始值0,再数值增1;字符串会异常),decr自减1]
- 追加append,返回字符串长度
存储Hash
String key和String Value的map容器,每个Hashkey最多存储4294967295个键值对
常用命令:
- 赋值 hset myhash username cui
- 多个赋值 hmset myhash username cui age 24
- 取值 hget myhash username
- 多个取值 hmget myhash username age
- 获取全部值 hgetall myhash
- 删除多个 hdel myhash username age
- 删除整个集合 del myhash
- 增加 hincrby myhash age 5
- 判断值是否存在 hexists myhash username
- 获取值的数量hlen myhash
- 获取所有属性名称 hkeys myhash
- 获取所有属性的值 hvals myhash
存储list
ArrayList使用数组方式,LinkedList使用双向链表方式,双向链表中增加数据、删除数据
常用命令:
- 两端添加
- lpush mylist a b c
- rpush mylist 1 2 3
- 查看列表
- lrange mylist 0 -1(查看全部)
- 两端弹出
- lpop mylist (弹出第一个元素,就没有此元素了)
- rpop mylist
- 获取列表元素个数
- llen mylist
- 扩展命令
- lpushx mylist 3 (仅当mylist存在时插入)
- rpushx mylist 3
- lrem mylist count value
(count>0:从头删除count个值为value的元素
count=0: 删除所有等于value的元素
count<0:从尾开始删除count个等于value的元素) - 设置下标插入 lset mylist 3 mm(在3位置插入mm)
- 设置在某元素前后插入linsert mylist before|after b 11(在b前或后插入11)
- 将一个list的尾弹出压入另一个list头(rpoplpush mylist1 mylist2)
- 两端添加
rpoplpush使用场景:
消息队列发布系统时,对其进行备份
存储Set
没有排序的字符集合,不允许出现重复set可包含最大元素数量是4294967295个
- 常用命令:
- 添加/删除元素
- sadd myset a b c
- srem myset b c
- 获取集合中的元素
- smembers myset
- 集合中的差集运算
- sdiff myset1 myset2
- 集合中的交集运算
- sinter myset1 myset2
- 集合中的并集运算
- sunion myset1 myset2
- 扩展命令
- 判断是否有指定的值sismember myset c
- 查看set中的元素数量 scard myset
- 返回set中的随机一个元素 srandmember myset
- 将两个set中相差的元素存入新的集合 sdiffstore myset3 myset1 myset2 (存入myset3)
- 将两个set中交集的元素存入新的集合 sinterstore myset3 myset1 myset2
- 将两个set中并集的元素存入新的集合sunionstore myset3 myset1 myset2
- 添加/删除元素
set使用场景:
- 跟踪具有唯一性的数据:访问某一博客的唯一ip地址
- 维护数据对象之间的关联关系
存储Sorted-Set
Sorted-Set和Set的区别
Sorted-Set每个成员都有一个分数(可以重复)与之关联,Redis中用来从小到大的排序。
时间复杂度为集合中成员的个数的对数
Sorted-Set中的成员在集合中的位置是有序的
常用命令:
- 添加元素
- zadd mysort 70 cui 80 li 90 wang(先写分数再写元素,若元素已存在,则替换掉原有分数)
- 获得元素
- 获得分数 zscore mysort cui
- 获得成员数量 zcard mysort
- 删除元素
- 删除 zrem mysort li wang
- 按范围删除 zremrangebyrank mysort 0 4
- 按分数范围删除 zremrangebyscore mysort 80 100
- 范围查询
- 查找全部 zrange mysort 0 -1
- 查找并显示分数(由小到大) zrange mysort 0 -1 withscores
- 查找并显示分数(由大到小) zrevrange mysort 0 -1 withscores
- 扩展命令
- 返回分数的某个范围的成员的前两个并按从大到小的顺序
zrangebyscore mysort 0 100 withscores limit 0 2 - 给li的分数加3 zincrby mysort 3 li
- 获取分数再某个范围的成员的个数 zount mysort 80 90
- 返回分数的某个范围的成员的前两个并按从大到小的顺序
- 添加元素
使用场景:
- 一般用在游戏排名
- 微博热点话题
- 构建索引数据
Keys的通用操作
- keys * 查看所有key
- del my1 my2 my3 删除指定key
- exists my1 查看my1是否存在
- rename my1 my2 重命名为my2
- expire my1 1000 设置过期时间为1000s
- ttl my1 查看剩余时间(没有设置返回-1)
- type my1 查看key的类型
- flushall 清空数据库
Redis的特性
- 多数据库
- 一个Redis最多可提供16个数据库(0-15),也可通过 select 1选择1号数据库
- 将0数据库的key(myset)到1号数据库 move myset 1
- Redis事务
- 通过multi exec discard命令实现事务
multi 开启事务 直到 exec exec 提交 discard 回滚
- 通过multi exec discard命令实现事务
Redis的数据结构、通用操作及其特性的更多相关文章
- Redis常用数据结构和操作
1.String 存入字符类型 Set name luowen 设置name = luowen 存储 Get name 获取设置好的name的值 Setnx name luowen 设置name键值为 ...
- Redis Keys的通用操作
keys * 显示所有key 127.0.0.1:6379> keys * 1) "sort1" 2) "l2" 3) "set2" ...
- 峰Redis学习(7)Redis 之Keys 通用操作
keys * 显示所有key 查找所有以s开头的key 用s* *代表任意字符 127.0.0.1:6379> keys s* 1) "set3" 2) "s ...
- Redis<六> Key通用操作
1). KEYS pattern : 查找所有符合给定模式 pattern 的 key . 如 keys * , keys *list* 2). DEL key [key ...] : 删除给定的一个 ...
- Redis学习笔记(3)—— 五种数据类型&keys的通用操作
一.Redis数据结构介绍 redis是一种高级的key-value的存储系统,其中的key是字符串类型,尽可能满足如下几点: 1)key不要太长,最好不要操作1024个字节,这不仅会消耗内存还会降低 ...
- Redis学习--key的通用操作、移库操作、订阅与事务、持久化和总结
key的通用操作 keys pattern: pattern *表示任意一个多个字符 ?表示任意一个字符 del key1 key2 删除多个key exists keyname 查看是否存在 ren ...
- redis的keys常用操作及redis的特性
redis的keys常用操作 1.获得所有的keys: keys * 2.可以模糊查询 keys:keys my* 3.删除keys:del mymkey1 mykey2 4.是否存在keys:ex ...
- redis入门到精通系列(三):key的通用操作和redis内部db的通用操作
五种数据类型都用到了key,key本身是一种字符串,通过key可以获取redis中保存的对象.这一篇博客就将介绍key的通用操作. (一)key基本操作 删除key del key key是否存在 e ...
- python连接redis、redis字符串操作、hash操作、列表操作、其他通用操作、管道、django中使用redis
今日内容概要 python连接redis redis字符串操作 redis之hash操作 redis之列表操作 redis其他 通用操作,管道 django中使用redis 内容详细 1.python ...
随机推荐
- [LeetCode] Kth Largest Element in a Stream 数据流中的第K大的元素
Design a class to find the kth largest element in a stream. Note that it is the kth largest element ...
- 【C++ 实验六 继承与派生】
实验内容 1. 某计算机硬件系统,为了实现特定的功能,在某个子模块设计了 ABC 三款芯片用于 数字计算.各个芯片的计算功能如下: A 芯片:计算两位整数的加法(m+n).计算两位整数的减法(m-n) ...
- 内置对象之request对象
内置对象就是(容器)已经创建好的对象,可以被直接使用.当用户发送一个请求给容器,它就会自动创建一个对象来处理客户端发送来的消息,如request这个对象,可以获取到用户(客户端)发送来的信息.它的常见 ...
- JAVA RPC (六) 之thrift反序列化RPC消息体
我们来看一下服务端的简单实现,直接上thrift代码,很直观的来看一看thrift的server到底干了些什么 public boolean process(TProtocol in, TProtoc ...
- 审核被拒Guideline 2.1 - Information Needed we are unable to find 账号登录 option
Guideline 2.1 - Information Needed We were unable to sign in to review your app with the demo accoun ...
- RxSwift 操作符
RxSwift 操作符 (throttle) https://blog.csdn.net/weixin_38318852/article/details/80334838 RxSwift 操作符 (w ...
- p12文件和mobileprovision文件
http://www.cnblogs.com/YouXianMing/p/3848188.html https://www.jianshu.com/p/73c430f468e8 https://blo ...
- Operating Systems (COMP2006)
Operating Systems (COMP2006) 1st Semester 2019Page 1, CRICOS Number: 00301JOperating Systems (COMP20 ...
- FindVisualChild
public static List<T> FindVisualChild<T>(DependencyObject obj) where T : DependencyObjec ...
- Mysql 5.7优化
为了达到数据库胡最佳性能 1. 普通用户通过配置软件与硬件来实现 2. 高级用户会寻求机会改善MySQL本身,开发自己的数据存储引擎,硬件应用. 在数据库层面的优化 1. 表设计,通常列有适合的数据类 ...