3v+3高
海量
多样
实时
简介
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
安装
Redis支持windows和linux。但是官方推荐使用linux系统,而且windows系统版本的redis也已经停止更新了。这里我也推荐使用linux系统安装,并且讲述安装方式。
官网下载https://redis.io/
下载之后,上传到linux系统中,使用tar -zxvf 命令解压缩,此时目录中会出现一个redis目录(我建议大家将解压包移动到opt目录下)
如果没有安装java环境的和gcc环境,请先安装
[root@localhost opt]# cd redis-6.2.2/ 进入redis目录
没有安装目录下是没有src目录的。我们可以看到Makefile文件,学过linux的都知道这是批处理文件,所以使用make命令安装
第一次安装会有一点点漫长,因为需要编译、下载许多文件,出现最后一句话就成功了
执行 make install
接下来我们前往 /usr/local/bin 目录,用户安装的软件都在这个目录下
其中我们看到redis-cli等就是刚才make install安装的,不执行则没有
接下来我们配置redis ,我们在此目录下新建一个文档,用来存放配置文件,接下来将 /opt/redis/redis.config文件拷贝到此目录下。(这样做的目的是我们不用修改源配置文件)
配置文件中我只用修改 daemonize no 字段,默认是no ,我们修改为yes,这样redis服务在启动后就可以自动挂到后台运行。修改之后,回到 /usr/local/bin目录下
我们可以看到redis-server这个可执行文件
使用 redis-server zconfig/redis.config 指定配置文件启动程序。
redis最新本版,没有提示。但是我们可以查看进程
ps -ef|grep redis
说明服务启动成功
接下来我们简单使用redis
使用 redis-cli -p 6379 然后 ping
出现pong说明成功,接下来我们添加键值对
关闭redis服务,我们使用命令 shutdown
ctrl+c只是挂到后台,并没有关闭,此时我们查看进程,发现redis服务已经关闭。
基本用法
redis有16个数据库,通过select切换
redis端口号6379的小故事
6379在是手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字。
五大数据类型
官网文档
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. Redis provides data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes, and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions, and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.
全文翻译
Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库、缓存和消息代理。Redis提供诸如字符串、哈希、列表、集合、带范围查询的排序集合、位图、超日志、地理空间索引和流等数据结构。Redis具有内置的复制、Lua脚本、LRU逐出、事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster的自动分区提供高可用性。
Redis-key
基本常用命令 使用set 添加数据,get获取数据,flushdb清空数据库,flushall清空全部数据库内容,dbsize获取数据条数 EXIXTS key 判断是否存在 type key 判断类型 move key index 删除 expire key time 设置过期时间
String
基本命令 127.0.0.1:6379> get name (nil)
127.0.0.1:6379> set name hello //设置值 OK 127.0.0.1:6379> get name //获取值 “hello” 127.0.0.1:6379> append name ,redis //从字符串末尾添加新字符 (integer) 11 127.0.0.1:6379> get name “hello,redis” 127.0.0.1:6379> strlen name //获取字符串长度 (integer) 11 127.0.0.1:6379> set views 0
OK 127.0.0.1:6379> get views “0” 127.0.0.1:6379> incr views //数字自加 (integer) 1 127.0.0.1:6379> get views “1” 127.0.0.1:6379> decr views //数字自减 (integer) 0 127.0.0.1:6379> get views “0” 127.0.0.1:6379> incrby views 10 //设置步长自加 (integer) 10 127.0.0.1:6379> get views “10” 127.0.0.1:6379> decrby views 5 //设置步长自减 (integer) 5 127.0.0.1:6379> get views “5” 127.0.0.1:6379> getrange name 0 5 //获取指定范围的字符 “hello,” 127.0.0.1:6379> getrange name 0 -1 //-1 获取全部字符等同于 , get key “hello,redis” 127.0.0.1:6379> setrange name 10 xxx //替换指定位置的字符 (integer) 13
127.0.0.1:6379> get name “hello,redixxx” 127.0.0.1:6379> setex name1 60 111 // set with expire (设置值并设置过期时间) OK 127.0.0.1:6379> get name1 “111”127.0.0.1:6379> ttl name1 //ttl获取key的过期时间 (integer) 32 127.0.0.1:6379> get name1 (nil) 127.0.0.1:6379> setnx name1 555 //set if not exises 如果不存在key则设置key (integer) 1 127.0.0.1:6379> get name1 “555” 127.0.0.1:6379> mset k1 v1 k2 v2 //设置多个值 OK 127.0.0.1:6379> mget k1 k2 //获取多个值 1) “v1” 2) “v2” 127.0.0.1:6379> msetnx k1 v0 k3 v3 //如果不存在则设置多个值,原子操作,所以这里 k3设置值失败 (integer) 0 127.0.0.1:6379> mget k1 k2 k3 1) “v1” 2) “v2” 3) (nil) 127.0.0.1:6379> getset v3 555 //先获取值在设置值 (nil) 127.0.0.1:6379> get v3 “555”
List(列表)
127.0.0.1:6379> Lpush list zhangsan //从左边插入新的元素 rpush list zhangsan //从右边插入新的元素 (integer) 1 127.0.0.1:6379> lpush list lisi (integer) 2 127.0.0.1:6379> lrange list 0 -1 //查看元素 1) “lisi” 2) “zhangsan” 127.0.0.1:6379> rpop list 1 //从右边弹出元素 lpop 从左边弹出元素 后面的数字代表弹出几个 1) “wangwu” 127.0.0.1:6379> lrange list 0 -1 1) “zhangsan” 127.0.0.1:6379> lindex list 0 //获取指定下标的值 “wangwu” 127.0.0.1:6379> llen list //获取列表的长度 (integer) 3 127.0.0.1:6379> lrange list 0 -1 1) “lisi” 2) “wangwu” 3) “lisi” 4) “zhangsan” 127.0.0.1:6379> lrem list 2 lisi //删除重复元素 (integer) 2 127.0.0.1:6379> lrange list 0 -1 1) “wangwu” 2) “zhangsan” 127.0.0.1:6379> rpoplpush list list2 //将 原列表右边第一个元素移动到新的列表中 “zhangsan” 127.0.0.1:6379> lrange list 0 -1 1) “wangwu” 127.0.0.1:6379> lset list 0 lisi //更新指定位置的值 OK 127.0.0.1:6379> lrange list 0 -1 1) “lisi” 127.0.0.1:6379> lrange list 0 -1 1) “zhangsan” 2) “wangwu” 127.0.0.1:6379> linsert list before zhangsan lisi // 插入新值到某个元素之前或之后 (integer) 3 127.0.0.1:6379> lrange list 0 -1 1) “lisi” 2) “zhangsan” 3) “wangwu” 127.0.0.1:6379> ltrim list 1 2 //截取列表,留下截取的元素 OK 127.0.0.1:6379> lrange list 0 -1 1) “zhangsan” 2) “wangwu”
SET
127.0.0.1:6379> sadd set hello nihao //添加元素 (integer) 2 127.0.0.1:6379> smembers set //获取所有元素 1) “nihao” 2) “hello” 127.0.0.1:6379> sismember set nihao // (integer) 1 127.0.0.1:6379> scard set //获取set中的元素个数 (integer) 3 127.0.0.1:6379> srandmember set //随机获取 “hello” 127.0.0.1:6379> srandmember set “nihao” 127.0.0.1:6379> srem set yuepao //删除指定元素 (integer) 1 127.0.0.1:6379> spop set //随机删除 “hello” 127.0.0.1:6379> smove set set1 1 //移动元素到另外的集合 (integer) 1 127.0.0.1:6379> smembers set 1) “2” 2) “3” 3) “4” 4) “5” 5) “6” 6) “7” 7) “8” 8) “9” 127.0.0.1:6379> smembers set1 1) “1” 127.0.0.1:6379> sdiff set set1 //获取两个集合的差集 sinter set set1 //两个集合的交集 127.0.0.1:6379> sunion set set1 //两个集合的并集
Hash
127.0.0.1:6379> hset hash name zs age 17 //添加值 (integer) 2 127.0.0.1:6379> hget hash name “zs” 127.0.0.1:6379> hget hash age // 获取值 “17” 127.0.0.1:6379> hmget hash name age 1) “zs” 2) “17” 127.0.0.1:6379> hmset hash sex boy height 180 //设置多个值 OK 127.0.0.1:6379> hmget hash name sex height age //获取多个值 1) “zs” 2) “boy” 3) “180” 4) “17” 127.0.0.1:6379> hgetall hash1) “name” //获取所有键和值 2) “zs” 3) “age” 4) “17” 5) “sex” 6) “boy” 127.0.0.1:6379> hkeys hash //获取所有键 1) “name” 2) “age” 3) “sex” 127.0.0.1:6379> hvals hash //获取所有值 1) “zs” 2) “17” 3) “boy” hincrby hash age 1 //自增自减 (integer) 18 127.0.0.1:6379> hsetnx //如果不存在则增加元素
Zset(有序集合)
127.0.0.1:6379> zadd name 1 xiaohong 2 lisi 3 wangwu //添加
(integer) 3
127.0.0.1:6379> zrange name 0 -1 //便利所有
1) “xiaohong”
2) “lisi”
3) “wangwu”
127.0.0.1:6379> zrangebyscore name -inf +inf //由低到高排序
1) “xiaohong”
2) “lisi”
3) “wangwu”
ZCOUNT name 1 2 //获取指定区间的成员数量
特殊数据类型
Redis的基本事务操作
redis命令保存原子性,但是事务没有原子性、隔离性
事务的本质 : 一组命令的集合
添加监视 watch
取消监视 unwatch
Jedis
使用java操作redis
Jedis是redis推荐使用的java连接开发工具
连接远程redis服务
- 修改redis配置文件
- 改为no
- 注释或改为这个
- 设置密码
开放防火墙端口
- firewall-cmd —add-port=6379/tcp —permanent
重启防火墙 systemctl restart firewalld
Springboot整合redis
添加依赖
基本配置spring:
redis:
password: 123456
host: 192.168.47.129
自定义序列化类(否则会导致key值被转义) ```java 固定模板 @Configuration public class redisconfig {
@Bean public RedisTemplate
redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate template = new RedisTemplate(); template.setConnectionFactory(redisConnectionFactory); Jackson2JsonRedisSerializer