Redis基础语法
1.Jedis
Jedis是Redis官网首选的Java客户端开发包,下载之后导入项目中
通过Java代码连接数据库:
首先服务器端打开redis服务器,然后在客户端连接服务器,但是在redis.conf配置文件中有bind 127.0.0.1:2320这么一句,他是为服务器绑定了一个连接,我们需要注释掉他,注释掉之在代码中访问redis的时候会报错。
这个是因为我们注释掉bind这句之后,我们需要为服务器设置一个授权密码,这个也是在配置文件中进行修改requirepass是关键字,root是你设置的密码通过这个设置之后我们就可以在代码中访问数据库了
public class JedisTest {
@Test
public void first(){
//连接到服务器的IP地址和端口号
Jedis jedis = new Jedis("192.168.131.129", 6379);
jedis.auth("root");//这个是授权密码
jedis.set("name", "Tom");
String name = jedis.get("name");
System.out.println(name);
}
}
在这几个步骤中用到的命令
./bin/redis-cli shutdown // 关闭服务器
./bin/redis-server ./redis.conf //启动服务器
vim ./redis.conf // 修改redis的配置文件
应用连接池进行连接
@Test
public void poolDemo() {
//获得连接池的配置
JedisPoolConfig config = new JedisPoolConfig();
//进行连接的设置
config.setMaxActive(30);//最大活跃数
config.setMaxIdle(10);//最大空闲树
JedisPool jedisPool = new JedisPool("192.168.131.129", 6379);
//获取核心对象
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
jedis.auth("root");
jedis.set("name", "Tom");
String name = jedis.get("name");
System.out.println(name);
} catch (Exception e) {
e.printStackTrace();
}finally {
if(jedis != null){
jedis.disconnect();
}
}
}
2.Redis的数据结构
字符串,字符串列表,哈希,字符串集合,有序字符串集合。常用字符串和哈希类型。
key的定义注意点:不要太长,不要太短(短的话可读性低)
3.存储String
在redis中string是按二进制存储的。
存储字符串的常用命令:赋值,取值,删除领命等。
set key value 向数据库中添加数据
get key 得到key对应的数据
del key 删除数据
incr key 增加1,如果num不是数字,报错;如果num不存在,创建,初始值为0,然后加1
decr key 减少1,如果num不是数字,报错;如果num不存在,创建,初始值为0,然后加1
incrby num 5 原数据加上指定的数字,如果num不是数字,报错;如果num不存在,创建,初始值为0,然后加指定的数字
append string test 原数据加上指定的字符串;如果string不存在,创建,然后加指定的字符串.
4.存储Hash
存储String key String value的键值对,例如用户名,密码等。
每一个Hash可以存储4294967295个键值对。
常用命令,赋值,删除,取值,删除
hset myhash username jack myhash是定义一个hash的名字,username jack 是对应hash表中的一个键值对
hmset myhash2 username rose age 18 hmset可以同时给多个属性赋值
hget myhash username 得到一个hash表中某一个属性的值
hmget myhash2 username age 得到hash表中多个属性的值
hgetall myhash 得指定hash表中所有的键值对
hincrby myhash age 5 增加指定属性的值
hexists myhash username 判断这个hash表中是否存在指定属性,存在的话返回1,否则返回0
hlen myhsah 得到表中有多少个键值对
hkeys myhash 得到表中所有的key
hvals myhash 得到表中所有values
5.存储list
在redis中list类型是按照插入顺序排序的字符串连边,可以在头部,左部,右部插入元素。在两边插入效率高,在中间插入的效率低。redis链表经常用于消息队列
ArrayList使用数组方式;LinkedList使用双向链表;双向链表中加入数据,删除数据
存储list常用命令:两端添加数据,查看列表,两边弹出数据,获取元素个数,扩展命令
lpush mylist a b c 从头部向mylist中添加数据
rpush mylist 1 2 3 从尾部向mylist中添加数据
lrange mylist 0 -1 显示数据,start end end如果小于零表示从头部向前几个元素
lpop mylist 从头部弹出元素
rpop mylist 从尾部弹出元素
llen mylist 得到链表的长度
lpushx mylist x 只有当mylist存在的时候,才会从头部向链表中插入元素
lrem mylist 2 3 从mylist中从头部开始删除2 个3,如果0 3表示删除链表中所有的3,如果-2 3表示从尾部开始,删除2个3
lset mylist 3 mmm 将mylist中第三个元素替换为mmm
linsert mylist before 1 111 在元素1之前插入 1111,如果是after 1 mmm 表示在元素1之后插入mmm
rpoplpush mylist mylist2 mylist尾部弹出的元素插入到mylist2的头部
6.存储set
在redis中set可以看错没有排序的类型集合,set集合中不允许出现相同的值。set会在服务器端完成一些操作,效率高。
常用命令:添加,删除,获得元素,集合差集,交集,并集运算
set经常使用在保证数据唯一性中,或是查找数据相关性:例如,有两个商品A B分别用两个set来存购买的用户,如果想要看哪些用户是两个商品都买了的,就求两个set的交集就可以得到了。
sadd myset a b c 向set中添加数据
smembers myset 显示set中的元素
sismember myset 1 判断元素1是否在set中,如果在返回1,否则返回0
srem myset a b 删除myset中的元素a b
sdiff myset1 muset 求两个set的差集
sdiffstore mydiff myset1 myset 把两个集合的差集存储起来
sinter myset1 myset 求两个集合的交集
sinterstore myinter myset1 myset 存储两个集合的交集
sunion myset1 myset 求两个集合的并集
sunionstore myunion myset1 myset 存储两个集合的并集
srandmember myset 随机得到集合中的某个元素
7.keys的应用
查看所有的数据keys *显示出来的是所有keys的名称
exists name 查看这个名字的key是否存在
rename name newname 原名字 新名字
type mylist 显示类型
expire mylist 1000 设置过期时间
flushdb
删除当前数据库中的所有Key
flushall
删除所有数据库中的key
8.redis特性
多数据库,redis事物。
redis客户端连接数据库的时候可以指定连接哪个数据库,一共可以有16个,默认连接的是0号数据库。
(error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data
set are disabled. Please check Redis logs for details about the error.
在使用redis中报错,是因为强制关闭redis,导致不能持久化
127.0.0.1:6379> config set stop-writes-on-bgsave-error no
select 1 选择数据库
move key 1 把表移动到数据库1
nulti 开启事物,之后的命令存放到命令队列中
exec 相当于提交命令,让命令原子化的执行
discard 相当于回滚
9.redis的持久化
redis高性能是因为数据存储在内存中,要实现持久化需要把数据同步到硬盘上。持久化两种方式,RDB AOF
RDB方式:是默认支持的,不需要配置。是在制定的时间间隔内,把数据写入磁盘。
AOF方式:以日志的方式记录数据,在启动的时候读取配置文件,设置数据库。