CentOS7安装配置redis及使用JedisPool实现对redis的操作
1. CentOS7安装配置Redis
-
安装gcc
yum install -y gcc
-
下载到对应目录、解压
wget -P /etc/opt/module http://download.redis.io/releases/redis-5.0.4.tar.gz tar -zxvf redis-5.0.4.tar.gz
-
切换到redis解压目录。执行编译
cd redis-5.0.4 make make install /etc/opt/module/redis-5.0.4
-
修改redis.conf配置文件
1. 注释掉下面这一行 bind 127.0.0.1 2. 关闭保护模式 protected-mode 把yes改为no 3. 开启后台启动 daemonize 改为no 4. 设置密码 requirepass XXX
-
启动测试:
redis-server redis.conf redis-cli -p 6379
-
配置开机启动
-
升级redis为系统服务
在安装目录中有个utils,进入该目录执行 ./install_server.sh 一直按回车,最终在/etc/init.d目录下生成了一个redis_6379的文件
-
修改脚本文件名称
mv /etc/init.d/redis_6379 /etc/init.d/redisd
-
设置开机启动
chkconfig --add redisd systemctl start redisd systemctl daemon-reload
-
2. SpringBoot配置JedisPool
-
pom文件
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.1.0</version> </dependency>
-
配置文件
spring.redis.host=192.168.1.200 spring.redis.port=6379 spring.redis.password=XXX
-
JedisPool工具类
import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; @Configuration public class JedisConfig { @Value("${spring.redis.host}") private String host; @Value("${spring.redis.port}") private Integer port; @Value("${spring.redis.password}") private String password; @Bean public JedisPool jedisPool() { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxIdle(10);//最大空闲链接 jedisPoolConfig.setMaxTotal(100);//最大连接数 jedisPoolConfig.setMaxWaitMillis(1000*60*3);//最大等待毫秒数 jedisPoolConfig.setTestOnBorrow(true);//获取链接检查有效性 jedisPoolConfig.setTestOnReturn(false);//返回验证 jedisPoolConfig.setBlockWhenExhausted(true);//链接耗尽是否阻塞 jedisPoolConfig.setTestOnCreate(true);//部署时 为True; return new JedisPool(jedisPoolConfig, host, port, 10000, password); } }
-
在方法中使用jedis
Jedis jedis = null; try { jedis = jedisPool.getResource(); // TO DO... } catch (Exception e) { e.printStackTrace(); } finally { if (null != jedis) { jedis.close(); } }
3. Jedis对redis的操作
1. 键操作
清空数据 | jedis.flushAll()或jedis.flushDB() |
判断某个键是否存在 | boolean jedis.exists(String key) |
新增键值对 | jedis.set(String key, String value) |
获取所有的key | Set jedis.keys("*") |
删除键为key的数据 | jedis.del(String key) |
设置键为key的过期时间为i秒 | jedis.expire(String key, int i) |
获取键为key的数据的剩余生存时间 | int jedis.ttl(String key) |
移除键为key属性的生存时间限制 | jedis.persist(String key) |
查看键为key所对应的value的数据类型 | jedis.type(String key) |
注意:
-
jedis.flushAll()和jedis.flushDB()的区别:
1、flushall 清空数据库并执行持久化操作,也就是rdb文件会发生改变,变成76个字节大小(初始状态下为76字节),所以执行flushall之后数据库真正意义上清空了。 2、flushdb 清空数据库,但是不执行持久化操作,也就是说rdb文件不发生改变。而redis的数据是从rdb快照文件中读取加载到内存的。所以在flushdb之后,如果想恢复数据库,则可以直接kill掉redis-server进程,然后重新启动服务,这样redis重新读取rdb文件,数据恢复到flushdb操作之前的状态。 要直接kill掉redis-server服务,因为shutdown操作会触发持久化。 lsof -i:6379 命令查看redis-server的进程号,然后kill即可
2. 对String的操作
增加或覆盖数据 | jedis.set(String key, String value) |
增加不覆盖数据(重复不插入) | jedis.setnx(String key, String value) |
增加数据并设置有效时间t | jedis.setex(String key, int t, String value) |
删除键为key的数据 | jedis.del(String key) |
获取键为key对应的value | jedis.get(String key) |
再key对应的value后面扩展字符串s | jedis.append(String key, String s) |
增加对个键值对 | jedis.mset(String k1, String v1, String k2, String v2, …) |
获取多个key对应的value | String[] jedis.mget(String k1, String k2, …) |
删除多个key对应的value | jedis.del(new String[]{String k1, String k2, …}) |
获取key对应的value并更新value | String jedis.getSet(String key, String value) |
获取key对应的value的第i到第j个字符 | String jedis.getrange(String key, int i, int j) |
3. 对整数和浮点数的操作
增加或覆盖数据项 | jedis.set(String key, String value) |
获取键为key对应的value | jedis.get(String key) |
将key对应的value加1 | jedis.incr(String key) |
将key对应的value自加n | jedis.incrBy(String key, int n) |
将key对应的value减1 | jedis.decr(String key) |
将key对应的value自减n | jedis.decrBy(String key, int n) |
4. 对列表List的操作
添加一个List | jedis.lpush(String key, String v1, String v2,…) |
往key对应List左侧插入一个元素a | jedis.lpush(String key, String a) |
获取key对应List区间[i,j]的元素 | jedis.lrange(String key, int i, int j) |
删除key中num个值为val的元素 | jedis.lrem(String key, int num, String val) |
删除List区间[i,j]之外的元素 | jedis.ltrim(String key, int i, int j) |
key对应的List左侧出栈一个元素 | jedis.lpop(String key) |
key对应的List右侧插入一个元素a | jedis.rpush(String key, String a) |
key对应的List右侧出栈一个元素 | jedis.rpop(String key) |
修改key对应List指定下标index的元素 | jedis.lset(String key, int index, String val) |
获取key对应List的长度 | jedis.llen(String key) |
获取key对应List下标为index的元素 | jedis.lindex(String key, int index) |
把key对应List的元素从小到大排序 | jedis.sort(String key) |
5. 对集合set的操作
添加一个Set | jedis.sadd(String key, String v1, String v2,…) |
获取key对应Set的所有元素 | jedis.smembers(String key) |
判断Set中是否包含某元素 | Boolean jedis.sismember(String key, String value) |
删除一个值为val的元素 | jedis.srem(String key, String val) |
删除值为v1,v2的元素 | jedis.srem(String key, String v1, String v2,…) |
随机出栈Set里的一个元素 | Jedis.spop(String key) |
获取Set中的元素个数 | jedis.scard(String key) |
将元素val从集合k1剪切到k2 | jedis.smove(String k1, String k2, String val) |
获取集合k1和集合k2的交集 | jedis.sinter(String k1, String k2) |
获取集合k1和集合k2的并集 | jedis.sunion(String k1, String k2) |
获取集合k1和集合k2的差集 | jedis.sdiff(String k1, String k2) |
6. 对哈希Hash的操作
添加一个Hash | jedis.hmset(String key, Map map) |
往key插入一个元素(key1-val1) | jedis.hset(String key, String key1, String val1) |
获取key所有(k-v)元素 | jedis.hgetAll(String key) |
获取Hash所有的key | jedis.hkeys(String key) |
获取Hash所有的value | jedis.hvals(String key) |
把key中k对应的元素自加i | jedis.hincrBy(String key, String k, int i) |
把key中key对应的元素自减i | jedis.hdecrBy(String key, String k, int i) |
从key中删除一个或多个元素 | jedis.hdel(String key, String k1, String k2,…) |
获取key中元素个数 | jedis.hlen(String key) |
判断key是否存在k1对应元素 | jedis.hexists(String key, String k1) |
获取key中一个或多个元素value | jedis.hmget(String key, String k1, String k2,…) |
7. 对有序集合ZSet的操作
添加一个ZSet | jedis.zdd(String key, int score, String val) |
往ZSet插入一个元素 | jedis.hset(String key, int score, String value) |
获取ZSet里下标[i,j]区间元素val | jedis.zrange(String key, int i, int j) |
获取ZSet里下标[i,j]区间元素(score-val) | jedis.zrangeWithScores(String key, int i, int j) |
获取ZSet里score[i,j]区间元素val | jedis.zranageByScore(String key, int i, int j) |
获取ZSet里score[i,j]区间元素(score-val) | jedis.zrangeByScoreWithScores(String key, int i, int j) |
获取ZSet里值为value元素的score | jedis.zscore(String key, String value) |
获取ZSet里值为value元素的score排名 | jedis.zrank(String key, String value) |
删除ZSet里值为value的元素 | jedis.zrem(String key, String value) |
获取ZSet的元素个数 | jedis.zcard(String key) |
获取ZSet里score[i,j]区间元素个数 | jedis.zcount(String key, int i, int j) |
把ZSet中值为value的元素score加n | jedis.zincrby(String key, int n, String value) |
8. 排序操作
生成一个排序对象(SortingParams) | new SortingParams() |
队列按首字母a-z排序 | jedis.sort(String key, sortingParams.alpha()) |
队列按数字升序排序 | jedis.sort(String key, sortingParams.asc()) |
队列按数字降序排序 | jedis.sort(String key, sortingParams.desc()) |