redis -java客户端jedis

接上一篇

1 key可以有过期的设置

2 Lists 列表
插入元素很快,
按索引查询,慢

//列表是自动创建和删除的

//从左侧添加给List1 一个值 1
lpush list1 1

//从右侧添加2
rpush list1 2

//返回list1的值,从索引0 到最后
lrange list1 0 -1

//可变参数
lpush list1 1 3 3 2

//从list中右侧那一个查询并删除
rpop list1

//子列表,其他的被删除
//保留list中索引0 ~ 2的,并返回,其他的删除
ltrim list1 0 2

//实现队列. 左侧添加(生产),右侧弹出(消费)
//如果右侧弹出为nil,那么会等待一段时间再弹
lpush list1 666
rpop list1

//实现阻塞队列
//block right pop 从list1中右侧弹出元素,如果为null,那么等待(阻塞)5秒
//直到有元素返回 0为一直阻塞(问,中间多久轮询一次?)
brpop list1 5

3 hash(map)

//创建表hash_user1 ,里面的key-value对,分别为name:wanganyu 等等
hmset hash_user1 name wanganyu age 23 address 回龙观东大街

//从hash中获得key为name的value
hget hash_user1 name

//获得全部value
hgetall hash_user1

//返回hash中key为name ,age的值得数组
hmget hash_user1 name age

4 set(集合)
无序

//添加
sadd set1 1 3 6

//查看元素(返回的是无序的)
smembers set1

//查看是否存在某元素
sismember set1 3
返回1 ,否则返回0

//删除元素并返回(随机)
spop set1

//交集 操作
sinter set1 set2 set3

//并集操作
sadd set1 set2

5 有序集合
添加时慢(因为要排序),取时快(因为有序了)
//添加 下面的2,56是分数, 是排序的依据
zadd zset1 2 “tom”
zadd zset1 56 “john”

//查看元素(从第0个到倒数第一个)
zrange zset1 0 -1

//反序查看
zrevrange zset1 0 -1

//根据分数返回 (小于某值的所有)
zrangebyscore zset1 -inf 4

//根据分数删除(分数在2到8之间)
zremrangebyscore zset1 2 8

//获得元素的位置
zrank zset1 “tom”

6 位图(bitmaps)
基体是一个字符串,每一个是一个‘位’,值为0或者1 。
//设置某位的值(字符串bm1,第10位设置为1)
setbit bm1 10 1

//取某位的值(返回1,或者0)
getbit bm1 10

//计算所有值为1的位的数量
bitcount bm1

//找到第一个为1的位(索引)
bitpos bm1

7 redis可以像zookeeper一样,实现发布订阅的功能

8 事务
格式如下:
//标记一个事务块的开始
multi

命令1
命令2

//执行上述命令
exec

8-2:
其他: discard 取消事务

9 脚本
除了执行一条命令,还可以执行脚本
使用eval
eval “return xxxxx”

10 管理服务器
10-1 查看信息
info
11 管道技术
其实就是 一次性提交多个请求到server,然后一次性返回所有响应,
以此提升性能

12 java客户端 jedis
http://my.oschina.net/lilw/blog/169635

采用桥接(跟主机平行的关系)的网络连接方式,
我本机ip192.168.1.102,虚拟机ip 106

使用如下代码测试连接时,出现一些问题,最终解决,打印了PONG(通)
Jedis jedis = new Jedis(“192.168.1.106”,6379);

System.out.println(jedis.ping());

问题1:连接不上redis.虽然ping的tong106.
解决: 关闭虚拟机的防火墙,重启虚拟机。
方法为,在终端执行chkconfig iptables off

问题2:提示 DENIED Redis is running in protected mode because protected mode is enabled 等错误
解决:vim编辑redis.config文件,把保护模式变为no.重启
如果提示readonly不能保存文件,那么使用sudo vim

测试是否能连上虚拟机配置的redis服务


/***
 * 测试是否能连上虚拟机配置的redis服务
 * @author wangany
 *
 */
public class JedisConnectTest {


    /**
     * @param args
     */
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.1.106",6379);
        System.out.println(jedis.ping());
    }

    public void testStringKey(){

    }

}

创建连接池对象

/***
 * 真实环境,获得jedis连接 要使用连接池
 * 
 * 
 * @author wangany
 *
 */
public class JedisPoolUtil {

    private static JedisPool jedisPool;//连接池对象

    /***
     * 从连接池中 获取一个jedis对象
     * @return
     */
    public static Jedis getJedis(){
        if(jedisPool==null){
            iniPool();
        }
        return jedisPool.getResource();
    }

    /***
     * 初始化连接池对象
     */
    public static void iniPool(){
        if(jedisPool==null){
            createPool();
        }
    }

    /***
     * 创建连接池对象
     * 
     * 真实环境,配置的信息要抽离出来
     */
    public static void createPool(){
        // 建立连接池配置参数
        JedisPoolConfig config = new JedisPoolConfig();

        // 设置最大连接数
        config.setMaxIdle(100);

        // 设置最大阻塞时间,记住是毫秒数milliseconds
        config.setMaxWaitMillis(1000);

        // 设置空间连接
        config.setMaxIdle(10);

        // 创建连接池
        jedisPool = new JedisPool(config, "192.168.1.106", 6379);
    }

    /***
     * 回收一个jedis对象到连接池
     * @param jedis
     */
    public static void gc(Jedis jedis){
        jedisPool.returnResource(jedis);
    }

常用的操作

/***
 * 常用的操作
 * key 
 * list
 * set
 * hset等
 * @author wangany
 *
 */
public class JedisCommonOpt {

    private static Jedis jedis;

    public JedisCommonOpt() {
        jedis = getJedis();
    }

    public static Jedis getJedis(){
        if(jedis==null){
            jedis = JedisPoolUtil.getJedis();
        }
        return jedis;
    }

    /***
     * 测试 key
     */
    public void testKey() {
        jedis.set("key1", "value1");
        String value1 = jedis.get("key1");
        System.out.println(value1);
    }

    /***
     * 测试 list
     */
    public void testList() {
        String[] valueOfList1 = {"value1OfList1","value2OfList1","value3OfList1"};
        jedis.lpush("list1", valueOfList1);

        // 获取存储的数据并输出
         List list = jedis.lrange("list1", 0 ,-1);
         for(int i=0; i<list.size(); i++) {
           System.out.println("Stored string in redis:list1: "+list.get(i));
         }
    }

    public static void main(String[] args) {
        JedisCommonOpt opt = new JedisCommonOpt();
        //opt.testKey();
        opt.testList();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值