Redis基础语法

1.Jedis
     Jedis是Redis官网首选的Java客户端开发包,下载之后导入项目中
     通过Java代码连接数据库:
     首先服务器端打开redis服务器,然后在客户端连接服务器,但是在redis.conf配置文件中有bind 127.0.0.1:2320这么一句,他是为服务器绑定了一个连接,我们需要注释掉他,注释掉之在代码中访问redis的时候会报错。
Redis基础语法
     这个是因为我们注释掉bind这句之后,我们需要为服务器设置一个授权密码,这个也是在配置文件中进行修改requirepass是关键字,root是你设置的密码通过这个设置之后我们就可以在代码中访问数据库了
Redis基础语法
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不存在,创建,然后加指定的字符串.
Redis基础语法
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
Redis基础语法
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     相当于回滚
Redis基础语法
9.redis的持久化
     redis高性能是因为数据存储在内存中,要实现持久化需要把数据同步到硬盘上。持久化两种方式,RDB AOF
     RDB方式:是默认支持的,不需要配置。是在制定的时间间隔内,把数据写入磁盘。
     AOF方式:以日志的方式记录数据,在启动的时候读取配置文件,设置数据库。