Redis基础
Redis基础
1. 什么是Redis
- 简单而言,redis他就是一种数据库(非关系型数据库),用来存储数据
- 两大特点:
- 键值性(key--values)
- nosql(不用sql语言)
- value的类型:字符串,数值,json
- 存储方式:多依赖于内存,性能较好
- 官网:https://redis.io/
2. 安装
-
基于Linux系统安装
-
首先安装Redis所需要的gcc依赖
yum install -y gcc tcl -
下载redis(https://redis.io/download/)
-
上传到虚拟机并进行解压
-
进入到redis目录,运行编译命令
make && make install
3. 启动
-
默认启动(前台启动)
在任何目录下输入:redis-server
-
指定配置启动
配置文件为 redis.conf,
#访问地址改为任何ip都可访问: bind 0.0.0.0 #生产环境不要设置为这样, # 守护进程 daemonize yes # 密码 requirepass 1111111进入redis目录,启动:redis-server redis.conf
停止:redis-cli -u 1111111 shutdown(-u 是因为设置了密码)
-
开机自启
创建一个系统服务文件
vi /etc/systemd/system/redis.service文件的内容:
[Unit] Description=redis-server After=network.target [Service] Type=forking ExecStart=/usr/local/bin/redis-server /路径/redis.conf PrivateTmp=true [Install] WantedBy=multi-user.target从新加载服务
systemctl daemon-reload常用命令
systemctl start redis # 启动 systemctl stop redis # 停止 systemctl restart redis # 重启 systemctl status redis # 查看状态执行下面的命令,可以让redis开机自启:
systemctl enable redis
3. Redis命令行客户端
-
Redis安装完成后就自带了命令行客户端:redis-cli,使用方式如下:
redis-cli [options] [commonds]常见options:
-h 127.0.0.1:指定要连接的redis的IP地址-p 6379:指定要连接的redis节点的端口,默认是6379-a 1111111:指定redis的访问密码
commonds是Redis的操作命令:
ping:与redis服务端做心跳测试,服务端正常会返回pong
4. Redis常见命令
-
redis的key一般为字符串,value有多种
-
String Hash List Set SortedSet GEO(经纬度) BitMap HyperLog -
可在官文进行学习 (https://redis.io/commands )
4.1 Key
层级结构:用冒号隔开,例如:com:aaa:bbb
4.2 通用命令
- KEYS:查看符合模板的所有key
- DEL: 删除一个指定的key
- EXISTS:判断key是否存在
- EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
- TTL:查看一个KEY的剩余有效期
通过help [command] 可以查看一个命令的具体用法,例如:
# 查看keys命令的帮助信息: 127.0.0.1:6379> help keys4.2 String类型
分三类:
- 普通String:hello
- int :可自增自减 10
- float:可自增自减 10.1
常见命令:
- SET:添加或者修改已经存在的一个String类型的键值对
- GET:根据key获取String类型的value
- MSET:批量添加多个String类型的键值对
- MGET:根据多个key获取多个String类型的value
- INCR:让一个整型的key自增1
- INCRBY:让一个整型的key自增并指定步长
- INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
- SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
- SETEX:添加一个String类型的键值对,并且指定有效期
4.3 Hash类型(散列)
- value类似Java的HashMap结构
常见命令:
- HSET key field value:添加或者修改hash类型key的field的值
- HGET key field:获取一个hash类型key的field的值
- HMSET:批量添加多个hash类型key的field的值
- HMGET:批量获取多个hash类型key的field的值
- HGETALL:获取一个hash类型的key中的所有的field和value
- HKEYS:获取一个hash类型的key中的所有的field
- HINCRBY:让一个hash类型key的字段值自增并指定步长
- HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
4.4 List类型
- value类似java的linkedList
常见命令:
- LPUSH key element ... :向列表左侧插入一个或多个元素
- LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
- RPUSH key element ... :向列表右侧插入一个或多个元素
- RPOP key:移除并返回列表右侧的第一个元素
- LRANGE key star end:返回一段角标范围内的所有元素
- BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil
4.5 Set类型
- value于java的HashSet类似
常见命令:
- SADD key member ... :向set中添加一个或多个元素
- SREM key member ... : 移除set中的指定元素
- SCARD key: 返回set中元素的个数
- SISMEMBER key member:判断一个元素是否存在于set中
- SMEMBERS:获取set中的所有元素
- SINTER key1 key2 ... :求key1与key2的交集
4.6 SortedSet类型
- values于java的TreeSet类似,但每个元素都有一个score属性,基于score来进行排序,默认升序,(要降序在命令的第一个字母Z的后面加上rev,例如:zrevrank)
常见命令:
- ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值
- ZREM key member:删除sorted set中的一个指定元素
- ZSCORE key member : 获取sorted set中的指定元素的score值
- ZRANK key member:获取sorted set 中的指定元素的排名
- ZCARD key:获取sorted set中的元素个数
- ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
- ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值
- ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
- ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
- ZDIFF、ZINTER、ZUNION:求差集、交集、并集
5.Redis的java客户端
5.1 Jedis客户端
-
引依赖
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version></version> </dependency> -
建立连接
void setUp() { // 1.建立连接 Jedis jedis = new Jedis("ip地址", 端口号); // 2.设置密码 jedis.auth(密码); } -
线程不安全,需要手动创建线程池
public class JedisConnectionFactory { private static final JedisPool jedisPool; static { // 配置连接池 JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(4); //线程池最大连接数量 poolConfig.setMaxIdle(4); //最大空闲连接 poolConfig.setMinIdle(0); //最小空闲连接 poolConfig.setMaxWaitMillis(1000); //最长等待时间 ms //创建连接池对象 jedisPool = new JedisPool(poolConfig,"111.111.111.111",6379,800,"1111111"); } public static Jedis getJedis(){ return jedisPool.getResource(); } }

浙公网安备 33010602011771号