redis实践
2015-07-15 19:34
751 查看
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。
================
redis特点:
异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录。
redis的安装以及配置
1.到官网http://redis.io下载压缩文件并解压
2.cd到redis根目录 cd /usr/local/redis-3.0.2
3.在redis根目录编译源程序:make
启动服务以及客户端连接
1.启动服务:在reids根目录下输入 src/redis-server
2.客户端连接:在reids根目录下输入 src/redis-cli
redis数据类型
1.string
2.hash
3.列表(list)
4.集合(set)
5.有序集合(zset)
redis数据库基本操作
1、插入数据,设置一个key-value对。
set name zpeng
2、查询数据,取出key所对应的value。
get name
3、删除键值,删除这个key及对应的value。
del name
4、验证键是否存在 ,其中0,代表此key不存在;1代表存在。
exists name \
5、 设置密码
config set requirepass 123456
config get requirepass
auth 123456
使用spring-redis对 redis CRUD
参考blog: http://blog.csdn.net/java2000_wl/article/details/8543203/
watch out:showcase使用maven构建
pom.xml
AbstractBaseRedisDao.java
IUserDao.java
UserDao.java
User.java
Spring2RedisTest.java
================
redis特点:
异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录。
支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集合,有序集合,散列数据类型。这使得它非常容易解决各种各样的问题,因为我们知道哪些问题是可以处理通过它的数据类型更好。 操作都是原子性:所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值。 多功能实用工具:Redis是一个多实用的工具,可以在多个用例如缓存,消息,队列使用(Redis原生支持发布/订阅),任何短暂的数据,应用程序,如Web应用程序会话,网页命中计数等。
redis的安装以及配置
1.到官网http://redis.io下载压缩文件并解压
2.cd到redis根目录 cd /usr/local/redis-3.0.2
3.在redis根目录编译源程序:make
启动服务以及客户端连接
1.启动服务:在reids根目录下输入 src/redis-server
2.客户端连接:在reids根目录下输入 src/redis-cli
redis数据类型
1.string
2.hash
3.列表(list)
4.集合(set)
5.有序集合(zset)
redis数据库基本操作
1、插入数据,设置一个key-value对。
set name zpeng
2、查询数据,取出key所对应的value。
get name
3、删除键值,删除这个key及对应的value。
del name
4、验证键是否存在 ,其中0,代表此key不存在;1代表存在。
exists name \
5、 设置密码
config set requirepass 123456
config get requirepass
auth 123456
使用spring-redis对 redis CRUD
参考blog: http://blog.csdn.net/java2000_wl/article/details/8543203/
watch out:showcase使用maven构建
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.company.redis</groupId> <artifactId>spring2redis</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>3.1.2.RELEASE</version> <scope>test</scope> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency> </dependencies> </project>
AbstractBaseRedisDao.java
package com.company.dao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.RedisSerializer; /** * AbstractBaseRedisDao * @author http://blog.csdn.net/java2000_wl * @version <b>1.0</b> */ public abstract class AbstractBaseRedisDao<K, V> { @Autowired protected RedisTemplate<K, V> redisTemplate; /** * 设置redisTemplate * @param redisTemplate the redisTemplate to set */ public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) { this.redisTemplate = redisTemplate; } /** * 获取 RedisSerializer * <br>------------------------------<br> */ protected RedisSerializer<String> getRedisSerializer() { return redisTemplate.ge 4000 tStringSerializer(); } }
IUserDao.java
package com.company.dao; import java.util.List; import com.company.entity.User; /** * @version <b>1.0</b> */ public interface IUserDao { /** * 新增 * <br>------------------------------<br> * @param user * @return */ boolean add(User user); /** * 批量新增 使用pipeline方式 * <br>------------------------------<br> * @param list * @return */ boolean add(List<User> list); /** * 删除 * <br>------------------------------<br> * @param key */ void delete(String key); /** * 删除多个 * <br>------------------------------<br> * @param keys */ void delete(List<String> keys); /** * 修改 * <br>------------------------------<br> * @param user * @return */ boolean update(User user); /** * 通过key获取 * <br>------------------------------<br> * @param keyId * @return */ User get(String keyId); }
UserDao.java
package com.company.dao; import java.util.ArrayList; import java.util.List; import org.springframework.dao.DataAccessException; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.util.Assert; import com.company.dao.AbstractBaseRedisDao; import com.company.dao.IUserDao; import com.company.entity.User; /** * Dao * @version <b>1.0</b> */ public class UserDao extends AbstractBaseRedisDao<String, User> implements IUserDao { /** * 新增 *<br>------------------------------<br> * @param user * @return */ public boolean add(final User user) { boolean result = redisTemplate.execute(new RedisCallback<Boolean>() { public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] key = serializer.serialize(user.getId()); byte[] name = serializer.serialize(user.getName()); return connection.setNX(key, name); } }); return result; } /** * 批量新增 使用pipeline方式 *<br>------------------------------<br> *@param list *@return */ public boolean add(final List<User> list) { Assert.notEmpty(list); boolean result = redisTemplate.execute(new RedisCallback<Boolean>() { public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); for (User user : list) { byte[] key = serializer.serialize(user.getId()); byte[] name = serializer.serialize(user.getName()); connection.setNX(key, name); } return true; } }, false, true); return result; } /** * 删除 * <br>------------------------------<br> * @param key */ public void delete(String key) { List<String> list = new ArrayList<String>(); list.add(key); delete(list); } /** * 删除多个 * <br>------------------------------<br> * @param keys */ public void delete(List<String> keys) { redisTemplate.delete(keys); } /** * 修改 * <br>------------------------------<br> * @param user * @return */ public boolean update(final User user) { String key = user.getId(); if (get(key) == null) { throw new NullPointerException("数据行不存在, key = " + key); } boolean result = redisTemplate.execute(new RedisCallback<Boolean>() { public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] key = serializer.serialize(user.getId()); byte[] name = serializer.serialize(user.getName()); connection.set(key, name); return true; } }); return result; } /** * 通过key获取 * <br>------------------------------<br> * @param keyId * @return */ public User get(final String keyId) { User result = redisTemplate.execute(new RedisCallback<User>() { public User doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] key = serializer.serialize(keyId); byte[] value = connection.get(key); if (value == null) { return null; } String name = serializer.deserialize(value); return new User(keyId, name, null); } }); return result; } }
User.java
package com.company.entity; import java.io.Serializable; public class User implements Serializable { private static final long serialVersionUID = -6011241820070393952L; private String id; private String name; private String password; /** * <br>------------------------------<br> */ public User() { } /** * <br>------------------------------<br> */ public User(String id, String name, String password) { super(); this.id = id; this.name = name; this.password = password; } /** * 获得id * @return the id */ public String getId() { return id; } /** * 设置id * @param id the id to set */ public void setId(String id) { this.id = id; } /** * 获得name * @return the name */ public String getName() { return name; } /** * 设置name * @param name the name to set */ public void setName(String name) { this.name = name; } /** * 获得password * @return the password */ public String getPassword() { return password; } /** * 设置password * @param password the password to set */ public void setPassword(String password) { this.password = password; } @Override public String toString() { return this.id + "+" + this.name + "+" + this.password; } }
Spring2RedisTest.java
package com.company.test; import java.util.ArrayList; import java.util.List; import junit.framework.Assert; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; import com.company.dao.IUserDao; import com.company.entity.User; /** * 测试 * @author http://blog.csdn.net/java2000_wl * @version <b>1.0</b> */ @ContextConfiguration(locations = {"classpath*:applicationContext.xml"}) public class Spring2RedisTest extends AbstractJUnit4SpringContextTests { @Autowired private IUserDao userDao; /** * 新增 * <br>------------------------------<br> */ @Test public void testAddUser() { User user = new User(); user.setId("user2"); user.setName("123456"); user.setPassword("520loveu"); boolean result = userDao.add(user); Assert.assertTrue(result); } /** * 批量新增 普通方式 * <br>------------------------------<br> */ @Test public void testAddUsers1() { List<User> list = new ArrayList<User>(); for (int i = 10; i < 50000; i++) { User user = new User(); user.setId("user" + i); user.setName("java2000_wl" + i); bceb list.add(user); } long begin = System.currentTimeMillis(); for (User user : list) { userDao.add(user); } System.out.println(System.currentTimeMillis() - begin); } /** * 批量新增 pipeline方式 * <br>------------------------------<br> */ @Test public void testAddUsers2() { List<User> list = new ArrayList<User>(); for (int i = 10; i < 1500000; i++) { User user = new User(); user.setId("user" + i); user.setName("java2000_wl" + i); list.add(user); } long begin = System.currentTimeMillis(); boolean result = userDao.add(list); System.out.println(System.currentTimeMillis() - begin); Assert.assertTrue(result); } /** * 修改 * <br>------------------------------<br> */ @Test public void testUpdate() { User user = new User(); user.setId("user1"); user.setName("new_password"); boolean result = userDao.update(user); Assert.assertTrue(result); } /** * 通过key删除单个 * <br>------------------------------<br> */ @Test public void testDelete() { String key = "user1"; userDao.delete(key); } /** * 批量删除 * <br>------------------------------<br> */ @Test public void testDeletes() { List<String> list = new ArrayList<String>(); for (int i = 0; i < 10; i++) { list.add("user" + i); } userDao.delete(list); } /** * 获取 * <br>------------------------------<br> */ @Test public void testGetUser() { String id = "user2"; User user = userDao.get(id); System.out.println(user); Assert.assertNotNull(user); Assert.assertEquals(user.getName(), "123456"); } /** * 设置userDao * @param userDao the userDao to set */ public void setUserDao(IUserDao userDao) { this.userDao = userDao; } }
相关文章推荐
- redis安装问题小结
- Redis偶发连接失败案例实战记录
- Redis中实现查找某个值的范围
- Redis和Memcached的区别详解
- 分割超大Redis数据库例子
- Redis总结笔记(一):安装和常用命令
- Redis sort 排序命令详解
- redis中修改配置文件中的端口号 密码方法
- 在Ruby on Rails上使用Redis Store的方法
- Redis和Memcache的区别总结
- 在Node.js应用中使用Redis的方法简介
- Redis服务器的启动过程分析
- web 应用中常用的各种 cache详解
- 利用yum安装Redis的方法详解
- 从MySQL到Redis的简单数据库迁移方法
- 为啥懒 Redis 是更好的 Redis
- 在Redis数据库中实现分布式速率限制的方法
- redis2.8配置文件中文翻译版
- 详解Redis使用认证密码登录
- Redis 在真实世界的 5 个用法