摘录 https://github.com/Romantic-Lei/Learning-in-practice/blob/master/Redis/
官网地址:
英文:Redis
中文:CRUG网站 redis中文文档
安装包:https://redis.io/download/,选择redis7.0版本即可
Redis在线测试地址(不用下载也能玩):Try Redis
Redis命令参考:Redis 命令参考 — Redis 命令参考
Redis的安装
window版安装:
下载地址:GitHub - zkteco-home/redis-windows: Native port of Redis for Windows,it can be installed as service.
linux版安装:
Linux环境安装Redis必须先具备gcc编译环境
1.1什么是gcc?
gcc是linux下的一个编译程序,是C程序的编译工具。 GCC(GNU Compiler Collection)是 GNU(GNU's Not Unix) 计划提供的编译器家族,它能够支持 C,C++, Objective-C, Fortran, Java 和Ada 等等程序设计语言前端,同时能路运在 X86,X86-64,IA-64,PowerPC,SPARC和Alpha 等等几乎目前所有的硬件平台上。鉴于这些特征,以及 GCC 编译代码的高效性,使得 GCC 成为绝大多数自由软件开发编译的首选工具。虽然对于程序员们来说,编译器只是一个工具,除了开发和维护人员,很少有人关注编译器的发展,但是 GCC 的影响力是如此之大,它的性能提升甚至有望改善所有的自由软件的运行效率,同时它的内部结构的变化也体现出现代编译器发展的新特征。
1.2查看gcc版本
gcc -v
1.3安装
·安装redis之前需要具备c++库环境
·yum -y install gcc-c++
10大数据类型
提前声明
这里说的数据类型是value的数据类型,key的类型都是字符串
1.redis字符串(String)
String是redis最基本的数据类型,一个key对应一个value。
string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象。
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M
2.redis列表(List)
Redis列表是最简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的$\textcolor{blue}{头部(左边)或者尾部(右边)}$,它的底层实际是个$\textcolor{red}{双端链表}$,最多可以包含2^32-1个元素(4294967295,每个列表超过40亿个元素)
3.redis哈希表(Hash)
Redis Hash是一个string类型的field(字段)和value(值)的映射表,Hash特别适合用户存储对象。
Redis中每个Hash可以存储2^32-1个键值对(40多亿)
4.redis集合(Set)
Redis的Set是string类型的$\textcolor{red}{无序集合}$。集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象的编码可以是intset或者Hashtable。
Redis中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
集合中最大的成员数为2^32-1(4294967295,每个集合可存储40多亿个成员)
5.redis有序集合(ZSet)
zset(sorted set:有序集合)
Redis zset和Set一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个类型的分数不同的是每个元素都会关联一个������类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。
的成员是唯一的,但是分数()却可以重复。����的成员是唯一的,但是分数(�����)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是。集合中最大的成员数是����集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是�(1)。集合中最大的成员数是2.32−1
6.redis地理空间(GEO)
Redis GEO主要用于存储地理位置信息,并对存储的信息进行操作,包括:
添加地理位置的坐标。
获取地理位置的坐标。
计算两个位置之间的距离。
根据用户给定的经纬度坐标来获取指定范围内的地址位置集合。
7.redis基数统计(HyperLogLog)
HyperLogLog是用来做$\textcolor{red}{基数统计}$的算法,HyperLogLog的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需要的空间总是固定且是很小的。
在Redis里面,每个HyperLogLog键只需要花费12KB内存,就可以计算接近2^64个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
但是,因为HyperLogLog只会根据输入元素来计算基数,而不会存储输入元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素。
8.redis位图(bitmap)
由0和1状态表现的二进制位的bit数组
9.redis位域(bitfield)
通过bitfield命令可以一次性操作多个$\textcolor{red}{比特位域(指的是连续的多个比特位)}$,它会执行一系列操作并返回一个响应数组,这个数组中的元素对应参数列表中的相应的执行结果。
说白了就是通过bitfield命令我们可以一次性对多个比特位域进行操作。
10.redis流(Stream)
Redis Stream是Redis5.0版本新增加的数据结构。
Redis Stream主要用于消息队列(MQ,Message Queue),Redis本身就是一个Redis发布订阅(pub/sub)来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis宕机等,消息就会被丢弃。
简单来说发布订阅(pub/sub)可以分发消息,但无法记录历史消息。
而Redis Stream提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。
常见数据类型操作命令
Redis键(key)
案例
1.keys *
###查看当前库所有的key
2.exists key
判断某个key是否存在
3.type key
查看你的key是什么类型
4.del key
删除指定的key数据
5.unlink key
非阻塞删除,仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步中操作。
del key 是原子的删除,只有删除成功了才会返回删除结果,如果是删除大key用del会将后面的操作都阻塞,而unlink key 不会阻塞,它会在后台异步删除数据。
6.ttl key
查看还有多少秒过期,-1表示永不过期,-2表示已过期
7.expire key 秒钟
为给定的key设置过期时间
8.move key dbindex[0-15]
将当前数据库的key移动到给定的数据库DB当中
9.select dbindex
切换数据库【0-15】,默认为0
10.dbsize
查看当前数据库key的数量
11.flushdb
清空当前库
12.flushall
通杀全部库
Redis字符串(String)
单值单value
案例:
返回值:
设置成功则返回OK,返回nil为未执行Set命令,如不满足NX,XX条件等。
若使用GET参数,则返回该键原来的值,或在键不存在时nil。
如何获得设置指定的key过期的Unix时间,单位为秒
System.out.println(Long.toString(System.currentTimeMillis()/1000L));
2.同时设置/获取多个键值
MSET key value [key value...]
MGET key [key ...]
mset/mget/msetnx
3.获取指定区间范围内的值
getrange/setrange
数值增减
一定要是数据才能进行加减一定要是数据才能进行加减
递增数字:INCR key
增加指定的整数:INCRBY key increment
递减数值:DECR key
减少指定的整数:DECRBY key decrement
获取字符串长度和内容追加
获取字符串长度:strlen key
字符串内容追加:append key value
分布式锁
setnx key value
setex(set with expire)键秒值/setnx(set if not exist)
getset(先get再set)
getset:将给定key的值设为value,并返回key的旧值(old value)。
简单一句话:先get然后立即set